XML SEO Sitemap erstellen mit TYPO3: Optimiere deine Website für Suchmaschinen
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:
- Die statische TypoScript-Vorlage „XML Sitemap (seo)“ muss in der Root-Seite eingebunden werden.
- 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:
- 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.
- Beim Aufruf der generierten Sitemaps ohne den chash-Wert gibt es Probleme, wenn [FE][pageNotFoundOnCHashError] = true gesetzt ist.