neue Seite per PHP als NoIndex

  • Moin,

    ich lege über ein PHP-Skript hin und wieder eine neue Seite an. Klappt ohne Probleme:

    Code
    $neueseite = array(
       'post_title' => $xxxxxx,
       'post_type' => 'page',
       'post_content' => $text,
       'post_status'   => 'publish',
       'post_parent' => 0,
       'post_author'   => get_current_user_id(),
       'page_template' => 'templates/template_xxxxxx.php'
    );
    $result = wp_insert_post( $neueseite );

    Klappt prima. Jetzt die Frage: Wie muss ich diese Routine modifizieren, dass die Seite gleich auf NoIndex und NoFollow gesetzt wird, so dass Google etc. sie gar nicht erst in seinen Index aufnimmt?

    Ich hatte gedacht, dass das über noindex() geht, diese Function ist aber deprecated, verweist auf wp_no_robots() die auch deprecated ist, die auf die Function wp_robots_no_robots() verweist

    https://developer.wordpress.org/reference/functions/wp_no_robots/

    die aber nicht existiert.

    AS

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • WordPress verwaltet selbst kein NoIndex/NoFollow auf Seitenbasis, dafür verwendet man in der Regel ein SEO Plugin und dessen API.

    Ohne extra Plugin kannst den/die IDs Deiner neuen Seiten selbst irgendwo speichern oder bei Deinen neuen Seiten ein Custom Field ([FONT=Courier New]meta_input[/FONT]) mitspeichern und dann über den [FONT=Courier New]wp_robots[/FONT] Filter den Meta Tag anhand dieser Daten beeinflussen, Ansatz siehe dort User Contributed Notes zweites Beispiel.

  • Vielen Dank für die schnelle Hilfe. Ich verstehe Wordpress aber nicht ganz. Ich habe die Routine jetzt etwas modifiziert:

    Code
    ...
       'post_author'   => get_current_user_id(),
       'page_template' => 'templates/template_xxxxxx.php'
       'meta-input' => array( 'noIndex' => true,
                                           'noFollow' => true)
    );
    $postID = wp_insert_post( $neueseite );

    So wie ich dich verstehe, reicht das aber nicht aus, die Seite vom Indexieren auszunehmen. Ich muss jetzt ja wohl mit einem Filter weiterarbeiten. Wie aber muss der aussehen?

    Code
    apply_filters( false, 'noIndex, $postID );

    würde ja nur die Meta-Tags ändern, im konkreten Fall noch nicht einmal. Irgendwie muss das über

    Code
    add_filter( 'wp_robots', 'wp_robots_noindex' );

    gehen, wie du ja auch geschrieben hast. Ich verstehen aber nicht, wie man diesen Filder auf alleine die Seite aus $postID anwendet.

    AS

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

  • Schau Dir die Dokumentation bzw. Beispiele bei [FONT=Courier New]wp_insert_post()[/FONT] nochmal an, das Feld heisst [FONT=Courier New]meta_input[/FONT], nicht [FONT=Courier New]meta-input[/FONT], zudem fehlt in Deinem modifizierten Code ein Komma vor der Zeile, das müsste eigentlich einen PHP Fatal Error ergeben.

    Verwende zudem statt [FONT=Courier New]true[/FONT] eher als String lesbare Werte, z.B. [FONT=Courier New]'ja'[/FONT] , damit Du die Meta Felder auch einfach im WordPress Editor kontrollieren bzw. bearbeiten kannst. Würde auch die Meta Feld Namen klein schreiben, das macht man üblicherweise so.

    Das oben verlinkte zweite Beispiel zeigt eigentlich relativ klar, wie man den Filter verwenden kann:

  • Vielen Dank für Deine Hilfe, auch bezüglich Groß-/Kleinschreibung. Das Komma ist übrigens nur beim Kopieren verloren gegangen. Daher gab es keinen Fehler.

    Mir fehlt jetzt ist wahrscheinlich nur eine Kleinigkeit: Wie und wo binde ich die add_filter-Function ein? Wie lasse ich sie los meine gerade angelegte neue Seite, von der ich über die $postID ja die ID habe? Ich kann sie ja nicht einfach hinter die Anweisung mit dem wp_insert_post() setzen.

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

  • Sorry, blöd ausgedrückt. Sie steht in der Functions.php drin, ggw. noch auskommentriert. Denn ich habe die Sorge, dass dieser Filter jetzt über alle Seiten läuft. Das Merkmal NoIndex soll aber nur bei der gerade erstellten Seite geändert werden (das meine ich mit "dahinerhängen"). Oder wird add_filter() immer dann ausgelöst, wenn wp_insert_post() aufgerufen wurde? Da hakt es noch bei mir.

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

  • Der Filter wird immer aufgerufen und ändert anhand Deiner bei [FONT=Courier New]wp_insert_post()[/FONT] einmalig bei der Seite gesetzten Meta Daten das [FONT=Courier New]noindex[/FONT] oder auch nicht. Deine Meta Daten kannst Du jederzeit über den WordPress Editor bearbeiten bzw. löschen, wenn sie nicht mehr benötigt werden.

  • Tut mir Leid, wenn ich nerve. Aber die Verbindung zur gerade angeelgten Seite mir mir nicht klar. Über

    Code
    $postID = wp_insert_post( $neueseite );

    kenne ich ja die ID der neu angeelgten Seite (irgendetwas 1800). Ich habe die add_filter() ermeitert, damit die mir jetzt mal die ID ausgibt, die sie über get_the_ID() holt. Es ist eine völlig andere (irgendwas 1300).

    Wo stehe ich hier immer noch auf dem Schlauch?

    AS

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

  • Der Filter läuft bei jeder Seite.

    Ob Deine Robots Änderungen gemäss Meta Feld funktionieren, kannst Du einfach im HTML-Quelltext der neu angelegten Seite im Frontend sehen.

    Poste Deinen kompletten aktuellen Code und einen Link zu einer damit neu angelegten Seite?

  • Das steht in der functions.php:

    vartest() ist eine Function von mir, die einfach nur den Wert einer Variablen ausgibt.

    Das steht in dem entsprechenden PHP-Skript:

    Und diese Seite wurde angelegt:

    https://www.ifag-berlin.de/zyzf3vj5w3gxp7zsrp/

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

  • Kann es sein, dass es nur ein Darstellungproblem ist? Ich kontrolliere mit dem Yoast SEO-Plugin, wie die Werte gesetzt sind. Dort steht dirn, dass die Seite indiziert werden darf. Aber die echo-Befehle in der functions.php sagen ja was anders.

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

  • Der HTML-Quelltext dieser Seite zeigt:

    Code
    <meta name='robots' content='noindex, nofollow' />


    Also alles bestens.

    Entferne die echo usw. Ausgaben und Du bist fertig.


    Cool! Vielen Dank für Deine unermüdliche Hilfe! :)

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

  • Yoast SEO speichert diese Einstellungen über seine eigene API.

    WordPress verwaltet selbst kein NoIndex/NoFollow auf Seitenbasis, dafür verwendet man in der Regel ein SEO Plugin und dessen API.


    Du hast den Ansatz ohne extra Plugin gewählt.

    Wenn Du die Einstellungen für Yoast SEO kompatibel speichern willst, lade Dir das Plugin herunter und lies den Plugin Code nach, der im Plugin die Einstellungen speichert und erzeuge manuell dieses Speichern beim Anlegen Deiner neuen Seite. Dann brauchst Du keinen eigenen [FONT=Courier New]wp_robots[/FONT] Filter.

  • Kurz mal ausprobiert, mit Yoast SEO könnte ggf. dieser Code ausreichend sein, dann brauchst Du keine eigenen Meta Felder und keinen eigenen [FONT=Courier New]wp_robots[/FONT] Filter:

    Code
    'meta_input' => array(
                        '_yoast_wpseo_meta-robots-noindex' => 1,
                        '_yoast_wpseo_meta-robots-nofollow' => 1
                    )

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!