Das große Sitemaps-Problem

Viele Plugins registrieren eigene Inhaltstypen (CPT=Custom Post Types) und Taxonomien. WordPress, so wie viele SEO-Plugins, melden diese CPTs und Taxonomien dann über eine so genannte Sitemap an Suchmaschinen.

Aber oft sind diese CPTs oder Taxonomien gar keine eigenen öffentlichen Webseiten, sondern werden nur zur Befüllung von Modulen oder als „Template Part“ benutzt, also nur um Teilbereiche zu befüllen.

Leider veröffentlichen viele SEO-Plugins trotzdem diese CPTs und Taxonomien und erzeugen damit Probleme, haben kein verständliches User-Interface dafür oder andere Probleme. Das dürfte insbesondere für Laien ein schwer zu verstehendes Problem sein. Also Zeit sich dem mal intensiv zu widmen!

Fangen wir am Anfang an! Was ist eine Sitemap überhaupt? Eine Sitemap ist eine maschinenlesbare XML-Datei, die alle Seiten einer Webseite enthalten soll, die eine Suchmaschine indizieren soll. Seit Version 5.5 erzeugt WordPress selbst so eine XML-Sitemap. Dabei gilt folgende Regel, was darin aufgenommen wird:

By default, sitemaps are created for all public and publicly queryable post types and taxonomies, as well as for author archives and of course the homepage of the site.Quelle

Wenn der CPT oder die Taxonomie nur als „Template Part“ genutzt wird und keine öffentliche Seite hat, können wir somit die Aufnahme in die XML-Sitemap leicht unterbinden, indem wir bei der Registrierung des CPTs oder der Taxonomie zum Beispiel 'publicly_queryable' => false, bei den Parametern hinzufügen.

Alternativ gibt es dafür auch Filter.

Zum Beispiel für das Deaktivieren der Sitemap für einen Custom Post Type „Buch“:

add_filter(
    'wp_sitemaps_post_types',
    function( $post_types ) {
        unset( $post_types['buch'] );
        return $post_types;
    }
);

Oder für das Deaktivieren der Sitemap für eine Taxonomie „Genre“:

add_filter(
    'wp_sitemaps_taxonomies',
    function( $taxonomies ) {
        unset( $taxonomies['genre'] );
        return $taxonomies;
    }
);

Bedauerlicherweise machen viele Plugin-Entwickler:innen die Registrierung falsch und so landen komplett leere Seiten in den Sitemaps tausender Websites. In meinem Fall war es das Plugin Simple Link Directory. Und ich teile den Namen des Plugins hier gerne, denn die Reaktion auf meinen Bugreport war mehr als vorbildlich. In unter einer Stunde von Meldung zu neuer Pluginversion, das ist ein krass schneller Support.

Ich habe dieses Phänomen dann als Anlass genommen und mir angeschaut, ob die ganzen SEO-Plugins es genau so machen wie WordPress, denn die WordPress-Sitemap hat ein kleines Problem: Die Zusatzwerte wie last-modified, change frequency oder priority werden hier leider nicht gesetzt. Und ich habe auch sonst keine Möglichkeit der Konfiguration, wie zum Beispiel einzelne Sitemaps zu deaktivieren.

Helfer-Plugins wie WP Sitemaps Config helfen zwar beim Deaktivieren von falsch registrierten CPTs und Taxonomien, aber für die Zusatzwerte werden hier nur feste Standardwerte gesetzt. Und die sind nicht alle wirklich sinnvoll. Einzig das last-modified kann und sollte aktiviert werden. Die change frequency wird auf never gestellt, was aber laut Spezifikation nur für archivierte URLs eingestellt werden sollte. Die priority immer mit 0.5 auszugeben ergibt dann gar keinen Sinn, denn 0.5 ist sowieso der Standardwert. Es geht hier außerdem um die Gewichtung innerhalb einer Website, weshalb es generell unsinnig ist, allen Einträgen denselben Wert zuzuweisen.

Also schauen wir uns mal die größeren SEO-Plugins an, ob die es besser machen. Der Custom Post Type vom Simple Link Directory lautet „sld“ und sollte nicht in der Sitemap landen, da keine öffentliche Webseite damit verknüpft ist (durch 'publicly_queryable' => false, bei der Registrierung):

All-In-One-SEO erstellt die Sitemap für den Inhaltstyp „sld“ und macht es somit falsch. AIOSEO bietet aber eine Konfigurationsmöglichkeit an. Wenn auch nicht besonders intuitiv. Der Punkt „Include all …“ muss abgewählt werden, denn erst dann erscheinen alle CPTs bzw. Taxonomien, um dann eine konkrete Auswahl treffen zu können. Siehe Dokumentation von AIOSEO. Das Plugin setzt zudem alle Zusatzwerte (last-modified, change frequency oder priority) ein und bietet zusätzlich URL-Count (bei den Indexes) und Image-Count an. In den erweiterten Einstellungen können diese Werte auch einzeln konfiguriert werden.

Yoast macht es korrekt, zeigt also den CPT nicht in der Sitemap. Zusätzlich ist die Sitemap in Yoast konfigurierbar. Interessant ist aber, dass der CPT in der Liste auftaucht und auch aktivierbar ist, er dann aber trotzdem nicht in der Sitemap auftaucht. Offensichtlich gibt es hier eine Prüfung, ob der CPT/die Taxonomie öffentlich (durchsuchbar) ist, aber das UI gibt uns diese Information nicht bzw. spiegelt das nicht wider. Auch sind die Einstellungen für die Sitemap nicht gebündelt an einer Stelle, sondern verteilt auf die Taxonomien, CPTs und unter Advanced. Außerdem jeweils verknüpft mit der Anzeige der Archive in den Suchmaschinen (via noindex). Neben last-modified wird noch die Anzahl an Bildern ausgegeben.

Auch SEOPress macht es korrekt und zeigt den CPT „sld“ erst einmal nicht an. Die Einstellungen von SEOPress sind überschaubar. Eigentlich können vor allem einzelne CPTs/Taxonomien (de)aktiviert werden. Leider lässt sich der CPT aktivieren, obwohl er ja gar nicht als öffentlich durchsuchbar deklariert ist. Bei den Zusatzwerten wird nur last-modified ausgegeben. Was hier noch auffällt ist, dass Einstellungen -> Permalinks immer einmal aufgerufen werden muss, um die Sitemap aufrufen zu können. Vorher kommt nur ein 404.

Slim SEO zeigt den CPT „sld“ in der Sitemap, macht es also falsch und bietet kein UI für die Konfiguration, nicht mal einen Link zur Sitemap (die ja keinen standardisierten Dateinamen hat). Entfernen geht nur über einen Filter, der in der Dokumentation zu finden und gut erklärt ist. Bei den Zusatzwerten wird auch hier nur last-modified ausgegeben.

RankMath macht es korrekt, zeigt also standardmäßig den CPT nicht an. Außerdem ist alles einzeln konfigurierbar. Leider wurde in meinem Test keine meiner Änderungen übernommen. Bei den Zusatzwerten wird wieder nur last-modified ausgegeben. Daneben gibt es noch einen Image-Counter.

The SEO Framework hat als einziges Plugin keine XML-Übersichtsseite, was aber auch an den wenigen Inhalten in meiner Testseite liegen kann. Es zeigt den CPT „sld“ korrekterweise nicht an. Leider hat es aber auch keine dokumentierte Konfigurationsmöglichkeit für weiteres (de)aktivieren. Ein Autorenarchiv wird im Gegensatz zu allen (?) anderen nicht ausgegeben.

Auch das Plugin XML Sitemaps macht es korrekt, zeigt „sld“ also nicht standardmäßig an. Es lässt sich allerdings hinzufügen, obwohl es nicht als öffentlich durchsuchbar deklariert ist. Die Konfiguration von change frequency und priority ist hier vorbildlich gelöst (in meinen Augen etwas intuitiver als bei AIOSEO), wenngleich die Einstellungsseite sonst etwas sehr textlastig, lang und unübersichtlich ist.

Zusammenfassend muss ich sagen, dass mich in Bezug auf Sitemaps keines der Plugins überzeugt hat. Alle Plugins haben irgendein Problem, sind an irgendeiner Stelle nicht intuitiv oder bieten zu viel, zu wenig oder sinnbefreite Einstellungsmöglichkeiten an.

Erschwerend kommt hinzu, dass es bestimmt etliche Plugins gibt, die ihre Taxonomien und CPTs nicht korrekt registrieren und so den Plugins keinen Hinweis darauf geben, dass dahinter keine echten Seiten stecken. WordPress macht es nur dann richtig, wenn die Plugins es korrekt implementieren. Aber machen sie es falsch, fehlt für die notwendige nachträgliche Korrektur ein User Interface. Für die meisten ist ein Filter sicher nicht zugänglich genug.

Da WordPress, genau so wie viele SEO-Plugins, standardmäßig das Autorenarchiv ausgibt, ist hier nochmal darauf hingewiesen, dass Anmeldenamen kein Geheimnis darstellen.

Es gäbe noch so viel mehr zu testen … wird die Sitemaps auch immer korrekt in der robtos.txt ausgegeben? Nutzt du eines der oben genannten SEO-Plugin? Dann schaue doch mal in deine Sitemap und kontrolliere, ob da leere Inhalte an Suchmaschinen gemeldet werden und wenn du schon dabei bist, checke mal die robots.txt und poste in die Kommentare, ob die Sitemap darin korrekt gelistet wird. Vielen Dank schon mal dafür!

15 Antworten auf Das große Sitemaps-Problem

  1. Hey Torsten,
    ich hatte mir das Problem auch schon vor einigen Wochen angesehen.

    Die für mich gefühlten großen drei (Yoast, RankMath und XML Sitemaps) machen es ja gar nicht so falsch.
    CPT gibt es schon lange, aber die gesonderten Einstellungen in den SEO-Plugins sind noch relativ jung.
    Wir sind also auf dem richtigen Weg 🙂

    lg
    Jochen

    • Ja, definitiv auf dem richtigen Weg. Ich sehe das aber auch eher als Gesamtproblem. Die Registrierung in anderen Plugins ist häufig unzureichend durchdacht und führt wie in dem Beispiel mit dem Simple-Link-Directory-Plugin dann zu den genannten Problemen. Ich kann daher auch verstehen, dass die SEO/Sitemap-Plugins hier eher vorsichtig sind und tendenziell lieber mehr erlauben als zu viel weglassen. Als Anwender sollte das auf jeden Fall kontrolliert werden, was die Plugins hier (ggf. im Zusammenspiel) an Google melden. Es fällt halt womöglich nicht auf, da es ja nicht direkt sichtbar ist …

  2. Hi Torsten,
    erstmal ein Kompliment an deine Beiträge, finde ich immer sehr interessant!
    Zum Thema XML-Sitemap, wird das ganz dann noch unter der Betrachtung von Mehrsprachigkeit, richtig Tricky und hier haben dann auch einige Großen Ihre Schwierigkeiten, so arbeitet aktuell RankMath mit Polylang nicht sauber miteinander und aktuell habe ich ein Projekt mit Yoast SEO & WPML auf dem Tisch, wo auch die Sitemap´s falsch ausgespült werden☹ XML-Sitemap Generator for Google hat vor kurzem erst ein Bug den ich gefunden hatte bzgl. Mehrsprachigkeit mit Polylang gefixt. Das zeigt das das ganze noch lange nicht richtig rund läuft…

    web(wahn)sinnige Grüße
    Jörg

    • Danke für das Lob! 🙂

      Kann ich bestätigen. Bei mir war es eine Website, die ich übernommen habe (WPML + ACF + viel custom Code), die zu diesem Beitrag geführt hat. Da war das Aufräumen der Sitemap auch viel Code-Archäologie, bis ich verstanden habe, warum das alles so kaputt war.

      Ein paar Plugin-Entwickler haben ja schon reagiert. Mal schauen, wie sich das in Zukunft noch entwickelt. Da ist auf jeden Fall noch Luft nach oben.

  3. Interessanter und gut geschriebener Beitrag!

    Deine Beobachtungen zu The SEO Framework kann ich so nicht bestätigen. Sybre, der Entwickler, legt sehr viel wert auf fehlerfreien, perfekten Code. Hier findest du auch mehr zum Thema Sitemaps:
    https://kb.theseoframework.com/kb/all-you-must-know-about-sitemaps/ Mailen kannst du ihm sicher auch: Sybre Waaijer „sybre (ät) theseoframework.com“…

    Du kannst entweder die durch TSF optimierte Sitemap nutzen (…/sitemap.xml) oder diese Funktion deaktivieren, dann wird die Standard-Sitemap ausgegeben (…/wp-sitemap.xml).

    Und auch die Standard-Sitemap exkludiert URLs, die man in den „TSF-Einstellungen -> Robots-Meta-Einstellungen -> Indexierung“ ausgeschlossen hat.

    Ich kann jedem nur TSF empfehlen. Es ist massiv schneller als alle anderen SEO-Plugins und verursacht keine fatalen Fehler, wie ich es schon oft mit SEOpress erlebt habe. Ich bekomme kein Geld und dies stellt nur meine Meinung dar :).

    • kann ich so nicht bestätigen

      Nun ja. Ich stelle nur meine Erfahrungen dar.

      Punkt 1: keine XML-Übersichtsseite -> Das ist das, was bei mir passiert ist. Ein Fakt. Und ich kann dazu auf der verlinkten Seite auch nicht Gegenteiliges lesen.

      Punkt 2: Der CPT „sld“ wird korrekterweise nicht angezeigt -> Da TSF hier alles richtig macht, wirst du das wohl nicht meinen.

      Punkt 3: Keine Dokumentation für das Deaktivieren von CPTs oder Taxonomien. -> Stimmt, über den beschriebenen Weg geht es tatsächlich. Das ist in meinen Augen nur noch schlechter gelöst als in Yoast. Technisch korrekt, aber die Verbindung ist völlig unklar. Es gibt weder im Text noch sonst im UI irgendeinen Hinweis darauf, dass dies einen Einfluss auf die Sitemap hat. Auch auf der verlinkten Seite ist der Text missverständlich formuliert:

      Excluding posts and pages
      You can exclude posts and pages from the sitemap by applying noindex to them.

      Ich lese das als einzelne Beiträge/Seiten können ausgeschlossen werden. Dass dies auch für ganze Inhaltstypen und Taxonomien funktioniert und wo man das macht, steht auf der Seite leider nicht.

      Punkt 4: Kein Autorenarchiv. -> Nicht, dass ich das besonders sinnvoll finde, aber die anderen Plugins und WordPress machen es und trotz *keinem* Häkchen für ein „noindex“ beim Autoren-Archiv wird es nicht ausgegeben. Auch dies nachprüfbar korrekt.

      • Wenn du die bon TSF optimierte Sitemap deaktivierst, müsstest du doch deine XML Übersichtsseite erhalten (dann wird die Standard-Sitemap ausgegeben (…/wp-sitemap.xml). Er hat ja klar dargelegt, warum die optimierte Version nur pages und posts enthält und ich muss ihm da zustimmen.

        • Wenn ich die von TSF optimierte Version deaktiviere, was hat dann die Ausgabe noch mit TSF zu tun? Die Standard-Sitemap wird dann ja die von WP sein und somit gibt TSF standardmäßig keine Index-Sitemaps aus. Muss ja nicht schlimm sein. Ist doch nur eine Feststellung.

          Sagt die Doku übrigens auch konkret:

          The base sitemap we bring in TSF plugin is small and consists of one page only. We use one page for the reasons described above: Search engines easily and rapidly process it.

          Du meinst wahrscheinlich auch diese Dokumentationsseite, wo er klar dargelegt hat, warum nur Seiten/Beiträge in der Sitemap sind:

          Only posts and pages are included in the sitemap of The SEO Framework; you won’t find archives, attachments, or author pages therein. We exclude those because most themes already properly provide internal linking, among technical difficulties.

          Mit einem weiterführenden Link hierhin:
          https://kb.theseoframework.com/kb/why-arent-archives-listed-in-the-sitemap/

          Ich befürchte nur, dass nicht jedem klar ist, dass „posts“ auch CPTs beinhaltet, denn Einzelseiten eines CPT werden durchaus in die Sitemap aufgenommen. Ich sehe auch inhaltlich (und nicht nur technisch) keinen großen Sinn darin, die Übersichtseiten (Archive, Kategorien, Autoren, …) an Suchmaschinen zu melden. Der interessante Inhalt ist ja eh in 99% auf den Einzelseiten. Finde nur das UI/UX bzw. das Wording nicht besonders anwenderfreundlich.

          • Also macht TSF doch aus SEO-Sicht alles richtig und zeigt deine CPTs nicht an. Und nimmt laut Dokumentation nur Posts und Pages, die indexiert werden sollen (also auch CPT pages), in die Sitemap auf. Und wenn du eine Index-Sitemap willst, musst du die von WordPress nehmen :).

          • Ich habe nie etwas anderes behauptet 😉

            Aus Anwendersicht empfinde ich nur bei TSF (und bei eigentlich allen anderen Plugins ebenfalls) das UI/UX schlecht und nicht ausreichend transparent. Im Fall TSF z.B. habe ich das Plugin aktiviert, den Menüpunkt im Backend aufgerufen und den Sitemap-Bereich der Einstellungen angesteuert. Was genau der Unterschied zwischen optimiert und nicht optimiert ist, wird mir nicht erklärt (Optimiert ist schneller – aha). Immerhin gibt es einen Link zur Sitemap, den haben auch nicht alle. In den Reitern kann ich diverse Dinge konfigurieren (Wieso sollte ich last-modified deaktivieren? Warum ein Logo auf eine Seite für Crawler?), aber den wichtigen Hinweis, wo ich z.B. weiteren Einfluss nehmen kann (Robots-Meta-Einstellungen -> Indexierung) oder die Tatsache, dass standardmäßig keine Archive ausgegeben werden (im Gegensatz zum WP-Standard!) wird mir nicht mitgeteilt.

  4. Thorsten, ich habe gerade große Probleme mit Yoast SEO und Polylang auf einer Website. Deshalb überlege ich doch mal auf ein anderes SEO-Plugin zu wechseln.
    Was ist dein bevorzugtes SEO-Plugin?

  5. Pingback: Nachlese zum WordPress Meetup #103 – Alles über Sitemaps - WordPress Meetup Hamburg

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert