Zum Hauptinhalt springen Skip to page footer

XML SEO Sitemap erstellen mit TYPO3: Optimiere deine Website für Suchmaschinen

| Tutorial | TYPO3 12

Erfahren Sie im aktuellen Tutorial, wie Sie mit TYPO3 eine XML-SEO-Sitemap erstellen, um die Sichtbarkeit Ihrer Website in Suchmaschinen zu optimieren. Erfahren Sie, welche Vorteile eine gut strukturierte Sitemap mit sich bringt und wie Sie diese Schritt für Schritt in TYPO3 integrieren. Es erhöht Ihre Chancen auf ein höheres Ranking in den Suchergebnissen und lockt mehr organischen Traffic auf Ihre Website. Lassen Sie sich von unseren praktischen Tutorials inspirieren und beginnen Sie noch heute mit der Verbesserung Ihrer SEO-Strategie.

Im TYPO3 Core sind bereits einige einige SEO Features implementiert. In diesem Artikel möchten wir einen Einblick in die automatische Generierung von XML-Sitemaps geben.

Warum braucht man eine Sitemap?

Eine Sitemap hilft Suchmaschinen (wie Google), Ihre Website besser zu verstehen und bietet einen Überblick über die relevanten Seiten Ihrer Website. Dadurch können Suchmaschinen Unterseiten finden, die sonst übersehen worden wären. Dies gilt, wenn die Seite gerade erst erstellt wurde oder wenn nur wenige Links zur Seite vorhanden sind oder wenn überhaupt keine Links zur Seite vorhanden sind.

Auch wenn Ihre Sitemap Suchmaschinen unterstützt, gibt es keine Garantie dafür, dass Ihre Seiten tatsächlich indexiert werden. Einige Suchmaschinen und ihre Algorithmen nehmen Ihre Sitemap-Seiten möglicherweise nicht in den Index auf. Dies kann daran liegen, dass die Seiten sehr dünn sind und nur sehr wenig Text enthalten. Auch hier ist Suchmaschinenoptimierung wichtig. 

Vorbereitung

Bevor Sie die automatische Sitemap-Generierung in TYPO3 einrichten können, müssen Sie zwei Vorbereitungen treffen:

  1. Die statische TypoScript-Vorlage „XML Sitemap (seo)“ muss in der Root-Seite eingebunden werden.
  2. Sie müssen eine Site-Konfiguration erstellen. Entweder eine Standardkonfiguration oder eine benutzerdefinierte Konfiguration mit statischen Routen, Routing-Enhancern und Aspects. 

TypoScript Setup anpassen

Sie müssen die folgenden Zeilen zu Ihrem TypoScript-Setup hinzufügen: 

TypoScript Setup:
plugin.tx_seo {
    config {
        xmlSitemap {
            sitemaps {
                pages { 
                    config {
                        excludedDoktypes = 9818, 9819
                        additionalWhere = AND (no_index = 0 OR no_follow = 0)
                    }
                }
            }
        }
    }
}

Die Zeile „excludeDoktypes“ wird nur benötigt, wenn Sie Seiten in anderen Formaten (z.B. RSS-Feeds) bereitstellen, die keine Sitemap erfordern.

Zusätzlich zu Sitemap-Abfragen gibt es bei „AdditionalWhere“ auch die Einschränkung, dass Seiten auch indexierbar sein müssen. 404-Fehlerseiten sollten nicht indexierbar sein.

Sobald Sie Ihre Sitemap-Einstellungen konfiguriert und die genannten Punkte abgeschlossen haben, können Sie Ihre Sitemap unter https://example.com/?type=1533906435 aufrufen.

 

Der Inhalte dieser Sitemap sollte in etwa wie folgt aussehen:

Sitemap für News

Die obige Konfiguration richtet eine Sitemap für statische Seiten ein. Bei Verwendung des News-Moduls werden die einzelnen Nachrichten jedoch noch nicht in der Sitemap einbezogen. Dies erfordert zusätzliche Konfigurationen, um eine weitere Sitemap für Ihre Nachrichten zu erzeugen.

TypoScript Setup:
plugin.tx_seo {
    config {
        xmlSitemap {
            sitemaps {
                pages { 
                    config {
                        excludedDoktypes = 9818, 9819
                        additionalWhere = AND (no_index = 0 OR no_follow = 0)
                    }
                }
                news {
                    provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
                    config {
                        table = tx_news_domain_model_news
                        sortField = sorting
                        lastModifiedField = tstamp
                        recursive = 1
                        pid = 53 // PageID des Ordner, in dem die News-Datensätze gespeichert ind
                        url {
                            pageId = 58 // PageID der Seite, die das News-Details-Modul enthält
                            fieldToParameterMap {
                                uid = tx_news_pi1[news]
                            }
                            additionalGetParameters {
                                tx_news_pi1.controller = News
                                tx_news_pi1.action = detail
                            }
                            useCacheHash = 1
                        }
                    }
                }
            }
        }
    }
}

Eine Übersicht über Ihre Sitemaps können Sie über den folgenden Link aufrufen: https://example.com/?type=1533906435

Der Inhalt der News-Sitemap sollte in etwa wie folgt aussehen:

Wenn Sie nicht alle News in Ihrer Sitemap aufführen wollen, können Sie diese z.B. nach Kategorien filtern. Im folgenden Script wurde dafür die Zeile 15 eingefügt, die nur News berücksichtigt, die zu der Kategorie mit der ID 5 gehören.

TypoScript Setup:
plugin.tx_seo {
    config {
        xmlSitemap {
            sitemaps {
                pages { 
                    config {
                        excludedDoktypes = 9818, 9819
                        additionalWhere = AND (no_index = 0 OR no_follow = 0)
                    }
                }
                news {
                    provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
                    config {
                        table = tx_news_domain_model_news
                        additionalWhere = uid IN (SELECT uid_foreign FROM sys_category_record_mm WHERE uid_local=5)
                        sortField = sorting
                        lastModifiedField = tstamp
                        recursive = 1
                        pid = 53 // PageID des Ordner, in dem die News-Datensätze gespeichert ind
                        url {
                            pageId = 58 // PageID der Seite, die das News-Details-Modul enthält
                            fieldToParameterMap {
                                uid = tx_news_pi1[news]
                            }
                            additionalGetParameters {
                                tx_news_pi1.controller = News
                                tx_news_pi1.action = detail
                            }
                            useCacheHash = 1
                        }
                    }
                }
            }
        }
    }
}

Im folgenden Beispiel wurde im Bereich pages die Zeile 9 eingeführt. Durch diese Zeile wird verhindert, dass die Seite mit der ID 5 in der Sitemap aufgeführt wird.

Weiterhin wurde der Bereich news in die Bereiche tutorials und blogs aufgeteilt. Jeder dieser Blöcke filtert die News nach einer bestimmten Kategorie (siehe Zeilen 16 und 38). Der wesentliche Unterschied ist, dass die News auf verschiedenen Detailseiten dargestellt werden (siehe Zeilen 22 und 44).

TypoScript Setup:
plugin.tx_seo {
    config {
        xmlSitemap {
            sitemaps {
                pages { 
                    config {
                        excludedDoktypes = 9818, 9819
                        additionalWhere = AND no_index = 0
                        excludePagesRecursive = 5
                    }
                }
                tutorials {
                    provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
                    config {
                        table = tx_news_domain_model_news
                        additionalWhere = uid IN (SELECT uid_foreign FROM sys_category_record_mm WHERE uid_local=5)
                        sortField = sorting
                        lastModifiedField = tstamp
                        recursive = 1
                        pid = 97  // PageID des Ordner, in dem die News-Datensätze gespeichert ind
                        url {
                            pageId = 101 // PageID der Seite, die das News-Details-Modul enthält
                            fieldToParameterMap {
                                uid = tx_news_pi1[news]
                            }
                            additionalGetParameters {
                                tx_news_pi1.controller = News
                                tx_news_pi1.action = detail
                            }
                            useCacheHash = 1
                        }
                    }
                }
                blogs {
                    provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
                    config {
                        table = tx_news_domain_model_news
                        additionalWhere = uid IN (SELECT uid_foreign FROM sys_category_record_mm WHERE uid_local=9)
                        sortField = sorting
                        lastModifiedField = tstamp
                        recursive = 1
                        pid = 97  // PageID des Ordner, in dem die News-Datensätze gespeichert ind
                        url {
                            pageId = 103 // PageID der Seite, die das News-Details-Modul enthält
                            fieldToParameterMap {
                                uid = tx_news_pi1[news]
                            }
                            additionalGetParameters {
                                tx_news_pi1.controller = News
                                tx_news_pi1.action = detail
                            }
                            useCacheHash = 1
                        }
                    }
                }
            }   
        }
    }
}

Eine Übersicht über Ihre inzwischen 3 Sitemaps können Sie über den folgenden Link aufrufen: https://example.com/?type=1533906435

Website-Konfiguration

Um die URL über /sitemap.xml statt wie in diesem Fall über den Seitentyp=1533906435 erreichen zu können, muss die Website-Konfiguration angepasst werden. Dies geschieht in der Datei /config/sites/<Ihre_Kennung>/config.yaml.  Hier muss der folgende Code eingetragen werden (wichtig sind die Zeilen 1,2,3,6,9): 

/config/sites/<Ihre_Kennung>/config.yaml
routeEnhancers:
  PageTypeSuffix:
    type: PageType
    default: .html
    index: index
    map:
      feed.xml: 9818
      calendar.ical: 9819
      sitemap.xml: 1533906435

robots.txt

Wir empfehlen, Ihre Sitemap in robots.txt einzubinden, um Suchmaschinen mitzuteilen, wo sie Ihre Sitemap finden können.

Dies kann ganz einfach über das TYPO3-Backend > Site Management > Sites mittels statischer Routen erfolgen.

Beispiel:  

robots.txt
User-agent: *
Disallow: /typo3/
Disallow: /typo3_src/
Disallow: /typo3conf/
Disallow: /typo3temp/
Sitemap: https://example.com/sitemap.xml?sitemap=pages
Sitemap: https://example.com/sitemap.xml?sitemap=tutorials
Sitemap: https://example.com/sitemap.xml?sitemap=blogs

Wichtig!

Es gibt zwei Fallstricke:

  1. Achten Sie darauf, dass ihr TYPO3 so konfiguriert ist, dass das System bei Link-Verweisen absolute Links (inkl. des Domainnamens) generiert. Dies ist aus SEO-Sicht für die Sitemaps für Suchmaschinen  sehr wichtig.
  2. Beim Aufruf der generierten Sitemaps ohne den chash-Wert gibt es Probleme, wenn [FE][pageNotFoundOnCHashError] = true gesetzt ist.