Die robots.txt
einer WordPress-Site wird normalerweise dynamisch generiert. Um die in einer normalen Einzelinstallation zu überschreiben, kann einfach eine statische robots.txt
erstellt und auf den Server geladen werden – in einer Multisite würde diese Datei dann aber für alle Seiten gelten, was nicht unbedingt gewünscht ist. Dieser Artikel zeigt euch, wie ihr die robots.txt
für einzelne Sites der Multiste anpassen könnt.
Für die dynamisch erzeugte robots.txt
gibt es den Filter robots_txt
, über den die Ausgabe angepasst werden kann. Mit get_current_blog_id()
bekommen wir die aktuelle Site-ID und können anschließend auf bestimmte Sites der Multisite-Installation testen, um Regeln nur für diese Sites auszugeben. Das sieht beispielsweise aktuell für meiner Site so aus:
/**
* Modify robots.txt for main site and english site
*
* @param $output
* @param $public
*
* @return string
*/
function fbn_custom_robots( $output, $public ) {
$site_id = get_current_blog_id();
if ( $site_id == 1 ) {
$output .= "Disallow: /agb-und-widerruf/\n";
$output .= "Disallow: /mein-konto/\n";
$output .= "Disallow: /warenkorb/\n";
$output .= "Disallow: /impressum-und-datenschutz/\n";
} elseif ( $site_id == 11 ) {
$output .= "Disallow: /account/\n";
$output .= "Disallow: /cart/\n";
$output .= "Disallow: /imprint/\n";
$output .= "Disallow: /terms/\n";
}
return $output;
}
add_filter( 'robots_txt', 'fbn_custom_robots', 20, 2 );
Code-Sprache: PHP (php)
Für die Site mit der ID 1
(das ist die Site florianbrinkmann.com) werden vier Disallow
-Regeln eingefügt, ebenso für die Site mit der ID 11
(meine englischsprachige Site en.florianbrinkmann.com).
Um die Site-IDs herauszubekommen, habe ich einfach folgende Zeile nach $site_id = get_current_blog_id();
eingefügt:
Code-Sprache: PHP (php)$output .= $site_id;
So wird beim Aufruf der beiden robots.txt
-Dateien der gewünschten Sites die ID angezeigt, auf die anschließend geprüft werden kann.
In welche php-Datei soll/muss ich o.g. Funktion schreiben ?
In die robots.txt wohl nicht ?
Hi Josef,
in die
functions.php
des Themes zum Beispiel, oder in ein eigenes kleines Plugin, damit es bei einem Wechsel des Themes nicht verloren geht 🙂Viele Grüße
Florian
Hallo Flo,
thx für deine Anleitung. Funktioniert auch bei mir. Habe meine ellenlange Datei per include() in die functions.php meines Themes eingehängt.
Gruss
Josef
Hallo Josef,
freut mich, dass es funktioniert hat!
Viele Grüße
Florian
Problem gemeldet nach
https://wordpress.org/support/topic/wp-multisite-dynamic-robots-txt-shows-sitemap/
Gruss
Josef
Problem-Meldung vom 17.Sept.2017 gelöst in
https://wordpress.org/support/topic/wp-multisite-dynamic-robots-txt-shows-sitemap/
Eine Jetpack-Datei muss eigenhändig geändert werden (nach jedem Jetpack-Update!).
Problemlösung hier erwähnt für alle Leser mit dem gleichen WordPress-Problem.
Josef
Hallo Josef,
brauchst du die Sitemaps von Jetpack denn? Sonst könntest du die Sitemaps-Funktion von Jetpack über die Plugin-Einstellungen deaktivieren.
Viele Grüße
Florian
Danke für
"Sitemaps-Funktion von Jetpack über die Plugin-Einstellungen deaktivieren"
Habe das im Jetpack erst jetzt bemerkt.