WordPress: Indizierung von Seiten mit Templates unterbinden

Vor ein paar Tagen wurde in den Kommentaren eine Frage an mich gestellt. Es ging darum wie man bestimmte Seiten, wie zum Beispiel Impressum, von der Indizierung durch Suchmaschinen ausschließt.

Möchte man das die Suchmaschinen eine Seite zwar nicht indizieren aber sonst allen Links folgen, dann trägt man folgendes im Kopfbereich (<head></head>) des HTML-Dokuments ein:

<meta name="robots" content="noindex, follow" />

Um die Problematik rund um Duplicate Content auf der eigenen Website in den Griff zu bekommen, kann man in der header.php des WordPress-Themes folgendes eintragen:

<?php
if (is_search() or is_archive()) {
	echo "<meta name=\"robots\" content=\"noindex, follow\" />\n";
	}
?>

Mit dieser Anweisung erreiche ich, dass WordPress bei allen Suchergebnissen und allen Archiven – Jahr, Monat, Tag, Autor, Kategorien, Tags – den Suchmaschinen “sagt”: “bitte nichts von hier aufnehmen, aber du kannst den Links folgen”.

Und wie schaut es mit Impressum & Co. aus

So weit so gut. Es könnte aber sein, dass jemand sich denkt: der Inhalt im Impressum, Datenschutzangaben im Kontaktbereich etc. das muss auch nicht in die Suchmaschine. Um dies Problem zu lösen kann man die obere Regel erweitern:

<?php
if (is_search() or is_archive() or is_page('impressum')) {
	echo "<meta name=\"robots\" content=\"noindex, follow\" />\n";
	}
?>

Hat man jetzt zum Beispiel, 50+ Seiten und man möchte bei 17 von denen das Indizieren unterbinden, dann hat man ein meterlanges if-Konstrukt. Das ist unübersichtlich, schwer zu pflegen und fehleranfällig. Viel geschickter wäre folgendes:

<?php
if (is_search() or is_archive() or is_page_template('keinindex.php')) {
	echo "<meta name=\"robots\" content=\"noindex, follow\" />\n";
	}
?>

[adrotate banner=”18″]

Hier wird abgefragt ob das Seiten-Template mit dem Dateinamen keinindex.php im Einsatz ist. Diese Abfrage wird hier noch ins Leere laufen. Man muss sich ein Seiten-Template erstellen und diese Datei keinindex.php benennen. Wie man ein Seiten-Template in WordPress erstellt habe ich bereits auf der Buch-Website beschrieben und unter Blog-Archiv mit Bordmitteln gibt es ein praktisches Beispiel für Einsatz von Seiten-Templates.

Nun kann man jedes mal wenn man eine neue Seite erstellt in der Meta-Box Attribute durch die Auswahl des passenden Templates bestimmen ob die Seite indiziert wird oder nicht.

Und was ist mit Plugins?

Das obere Beispiel eignet sich für Leute, die keine Berührungsängste vor dem Code-Editor haben und/oder die die Anzahl der eingesetzten Plugins minimieren möchten. Wer das nicht möchte, der kann hier auf die Hilfe von Plugins zurückgreifen. Ich kenne jetzt nicht alle SEO-Plugins für WordPress, aber ich weiß, dass die Erweiterung wpSEO von Sergej Müller es erlaubt, dass man pro Beitrag individuelle Einstellungen tätigen kann:

wpSEO: manuelle Robots-Einstellung
wpSEO: manuelle Einstellungen

Also ob auf einem Artikel oder Seite indiziert und/oder gefolgt werden darf.

Fazit

In diesem Artikel kann man sehr gut erkennen, dass die Seiten-Templates nützliche und mächtige Helfer für den Themes-Entwickler sind. Mit denen kann man nicht nur Design-Abweichungen realisieren, sondern automatische Inhalte einbinden oder einfach, wie in diesem Artikel gezeigt, einen zusätzlichen Ansatzpunkt für Conditional Tags bereitstellen.

Wir arbeiten seit 20 Jahren mit WordPress und bieten diverse Dienst­leistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.

Verwandte Beiträge:

3 Kommentare

  1. Google- und Yahoo-Bots sind folgsam, was “noindex” angeht. Bing kümmert das wenig und zeigt trotzdem mein Impressum, das ich damit verbergen wollte, in den Suchergebnissen an. Dafür ist der Marktanteil gering. (Ich verwende übrigens das Plugin Robots Meta.)

  2. Hey, ein guter Artikel! Ich regle das häufig durch die robots.txt. Hat das irgendwelche negativen Folgen?

    P.S.:”Und was ist Plugins?” da fehlt wohl ein “mit” 🙂

  3. Und was ist mit Artikel-IDs, Titeln und/oder Slugs?

    $noindex = array( 5, 7, 'About', 'slug-impressum' );
    if( is_page( $noindex ) ) { ... }

    Oder etwas bequemer über benutzerdefinierte Felder, muss man nicht bei jeder Seite das Array im Code ändern:
    if( get_post_meta( $post->ID, 'noindex' ) ) {...}
    Fügt den Code ein wenn der Post/Seite ein benutzerdefiniertes Feld mit den Namen “noindex” hat.

Kommentare sind geschlossen.