SEO Sitemap in TYPO3 9

Die neue Systemextension tx_seo generiert eine schöne XML Sitemap, die man in der Search Console hinterlegen kann und die hoffentlich das Google Ranking positiv beeinflusst.

Es gibt genügend Anleitungen, wie das alles funktioniert (Doku). Ich möchte daher hier nur auf einige Dinge hinweisen, die erst auf den zweiten Blick zum Vorschein kommen.

Zunächst wird die Extension SEO aktiviert und das statische Template XML Sitemap (seo) inkludiert. Um die URL www.domain.de/sitemap.xml verwenden zu könnte, muss folgendes in der yaml Datei der Sitekonfiguration hinzugefügt werden:

routeEnhancers:
  PageTypeSuffix:
    type: PageType
    map:
      sitemap.xml: 1533906435

Damit wird eine Sitemap der Seiten erstellt. Es empfiehlt sich natürlich einige Seiten auszuschließen; dies geschieht über die Seiteneigenschaften im Reiter SEO (noindex, nofollow).

Weiterhin benötigen wir eventuell eine Sitemap für die News; auch dafür findet man die entsprechenden Anleitungen leicht (Doku).

Eine Schwierigkeit könnte auftreten, wenn tx_news mehrfach eingesetzt wird, also mit unterschiedlichen Detail-Seiten. In der Standardanleitung ist dieser Fall nicht vorgesehen. Folgendermaßen kann man das lösen:

plugin.tx_seo.config {
  xmlSitemap {
    sitemaps {
      news-1 {
        provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
        config {
          table = tx_news_domain_model_news
          sortField = sorting
          lastModifiedField = tstamp
          pid = 100 # id des Ordners mit den News
          recursive = 2
          url {
            pageId = 101 # id der Detailseite
            fieldToParameterMap {
              uid = tx_news_pi1[news]
            }
            additionalGetParameters {
              tx_news_pi1.controller = News
              tx_news_pi1.action = detail
            }
            useCacheHash = 1
          }
        }
      }
      news-2 {
        provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
        config {
          table = tx_news_domain_model_news
          sortField = sorting
          lastModifiedField = tstamp
          pid = 200 # id des Ordners mit den News
          recursive = 2
          url {
            pageId = 201 # id der Detailseite
            fieldToParameterMap {
              uid = tx_news_pi1[news]
            }
            additionalGetParameters {
              tx_news_pi1.controller = News
              tx_news_pi1.action = detail
            }
            useCacheHash = 1
          }
        }
      }
    }
  }
}

Hat man nun diese Sitemap erstellt und hinterlegt sie bei der Search Console, so wird man früher oder später eine Nachricht von Google bekommen, dass etwas nicht stimmt. Und zwar entweder

Gesendete URL nicht gefunden (404)

oder

Gesendete URL als "noindex" gekennzeichnet

je nachdem, ob man die Detailseite(n) der News mit noindex,nofollow ausgezeichnet hat oder nicht. Hat man sie so markiert, so dass die Detail-Seite nicht in der Sitemap der Seiten erscheint (was logisch wäre), erhält man die zweite Nachricht (weil ja die News aus der Newssitemap diese Seite verwenden – wenn auch unter einer anderen URL), hat man sie nicht entfernt (was auch logisch wäre, da man diese Seite ja über die News Sitemap indiziert haben möchte), bekommt man die Nachricht mit dem 404 Fehler; das kommt daher, dass tx_news bei direktem Aufruf einer Detailseite einen 404 Fehlercode sendet. Also der Fehler kommt einmal aus der Sitemap der News und das andere Mal aus der Sitemap der Seiten.

Was also tun?

Nach einigem Überlegen und ergebnislosem Recherchieren habe ich mich entschlossen, den 404 Fehlercode aus der Newsextension zu entfernen, also ganz am Ende der Typoscript Zeile statt 404 einfach 200 zu schreiben:

plugin.tx_news.settings.detail.errorHandling = showStandaloneTemplate,EXT:news/Resources/Private/Templates/News/DetailNotFound.html,200

Außerdem habe ich noch die Standardmeldung bei direkt aufgerufenen News Detail-Seiten entfernt:

plugin.tx_news._LOCAL_LANG.de.newsNotFound =

Soll Google doch diese – dann vollständig leere – Seite doch indizieren, wenn es nicht anders geht.

Wichtig ist übrigens, wenn man die Sitemap in der Search Console hinterlegt, dass man beim Einstiegspunkt im Sitemodul nicht nur einen Slash verwendet (was ja möglich ist, wenn man kein Multidomain Projekt hat), sondern die URL angibt; andernfalls kann Google die Sitemap nicht verarbeiten.