TYPO3 – XML Sitemap mit typoscript erstellen

Es gibt leider noch keine perfekte Lösung um in TYPO3 eine XML Sitemap inkl. unterschiedliche Extension usw. zu erstellen. Doch hier haben wir für Euch eine TYPO3 typoscript Lösung die an Eure Bedürfnisse angepasst werden kann.

Wir haben ein paar Beispiele auskommentiert.
Zusätzlich müsst Ihr noch die RealURL-Config anpassen.

Ladet dazu nun das TypoScript in Eure Webseite:

xml_sitemap = PAGE
xml_sitemap {
	typeNum = 500001
	config {
		no_cache = 1
		disableAllHeaderCode = 1
		xhtml_cleaning = none
		admPanel = 0
		debug = 0
		disablePrefixComment = 1
		metaCharset = utf-8
		additionalHeaders = Content-Type:text/xml;charset=utf-8
		additionalHeaders.10.header = Content-Type:text/xml;charset=utf-8

		tx_realurl_enable = 1
	}

	wrap = <?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">|</urlset>

	10 = COA
	10 {
#		 Home/RootSeite wird manuel hinzugefuegt #
		1 = TEXT
		1 {
			stdWrap {
				cObject = COA
				cObject {
					wrap = <url>|</url>
					10 = TEXT
					10 {
						typolink {
							parameter = 1
							returnLast = url
							forceAbsoluteUrl = 1
						}
						wrap = <loc>|</loc>
					}
					20 = TEXT
					20 {
						field = SYS_LASTCHANGED
						strftime = %Y-%m-%dT%H:%M:%SZ
						wrap = <lastmod>|</lastmod>
					}
					30 = TEXT
					30 {
						outerWrap = <changefreq>weekly</changefreq>|
						value = <priority>1.0</priority>
					}
				}
			}
		}
		2 = HMENU
		2 {
			special = directory

			# Ausgangspunkt(e)
			special.value = 1,2,3,4

			# 1 = Standard
			# 2 = Erweitert
			# 3 = Externe URL
			# 4 = Shortcut
			# 5 = Nicht im Menu
			# 6 = Backend Benutzer Bereich
			# 7 = Mount Seite
			# 199 = Abstand
			# 254 = Sysordner
			# 255 = Recycler

			excludeDoktypes = 2,3,5,6,7,199,255

			1 = TMENU
			1 {
				expAll = 1
				NO {
					doNotLinkIt = 1
					stdWrap {
						cObject = COA
						cObject {
							wrap = <url>|</url>
							10 = TEXT
							10 {
								typolink {
									parameter.field = uid
									returnLast = url
									forceAbsoluteUrl = 1
								}
								wrap = <loc>|</loc>
							}
							20 = TEXT
							20 {
								field = SYS_LASTCHANGED
								strftime = %Y-%m-%dT%H:%M:%SZ
								wrap = <lastmod>|</lastmod>
							}
							30 = TEXT
							30 {
								outerWrap = <changefreq>weekly</changefreq>|
								value = <priority>1.0</priority>
							}
							# Eigentlich doppelte da es oben ueber excludeDoktypes geregelt werden kann
							#if.isFalse.field = shortcut
						}
					}
				}
			}
			2 < .1
			2.NO.stdWrap.cObject.30.value = <priority>0.9</priority>
			3 < .1
			3.NO.stdWrap.cObject.30.value = <priority>0.8</priority>
			4 < .1
			4.NO.stdWrap.cObject.30.value = <priority>0.7</priority>
			5 < .1
			5.NO.stdWrap.cObject.30.value = <priority>0.6</priority>
			6 < .1
			6.NO.stdWrap.cObject.30.value = <priority>0.5</priority>
			7 < .6
			8 < .6
			9 < .6
			10 < .6
		}

#		# metaMenu
#		3 < .10
#		3 {
#			special = directory
#			special.value = x,x,x
#
#			1.NO.stdWrap.cObject.30.value = <priority>0.8</priority>
#		}
#
#		# includeNotInMenu
#		4 < .10
#		4 {
#			special = list
#			special.value = x,x
#			excludeDoktypes =
#			includeNotInMenu = 1
#
#			1.NO.stdWrap.cObject.30.value = <priority>0.8</priority>
#		}

		# News
		5 = COA
		5 {
			10 = CONTENT
			10 {
				table = tx_news_domain_model_news
				select {
					orderBy = title ASC
					languageField = sys_language_uid
					# Sysordner mit tx_news Datensätzen
					pidInList = 12
					# Nur News anzeigen
					# externe / interne News werden nicht ausgegeben
					where = type=0
				}
				renderObj = COA
				renderObj {
					stdWrap.wrap = <url>|</url>
					1 = TEXT
					1 {
						# News-Detailseite
						typolink.parameter = 13
						typolink.additionalParams = &tx_news_pi1[controller]=News&tx_news_pi1[action]=detail&tx_news_pi1[news]={field:uid}
						typolink.additionalParams.insertData = 1
						typolink.returnLast = url
						typolink.forceAbsoluteUrl = 1
						wrap = <loc>|</loc>
					}
					2 = TEXT
					2 {
						field = tstamp
						strftime = %Y-%m-%dT%H:%M:%SZ
						wrap = <lastmod>|</lastmod>
					}
					3 = TEXT
					3.value = <priority>0.7</priority><changefreq>weekly</changefreq>
				}
			}
		}
	}
}

Passt nun noch die ID´s mit Euren eigenen TYPO3 Seiten ID´s an.
Ihr könnt nun auch andere Extension´s mit hinzufügen, wie in dem Beispiel die tx_news Extension.
Anstatt „special = directory“ könnt Ihr natürlich auch „special = list“ verwenden. Falls Ihr jedoch „Systemordner“ als Seiten-Aufteilung verwendet, so müsst ihr „special = directory“ verwenden.

Hier noch die RealURL Anpassungen:

...
'fileName' => array (
		'defaultToHTMLsuffixOnPrev' => 0,
		'acceptHTMLsuffix' => 1,
		'index' => array (
			'print' => array (
				'keyValues' => array (
					'type' => 98,
				),
			),
			'rss.xml' => array(
				'keyValues' => array(
					'type' => 99,
				),
			),
			'sitemap.xml' => array(
				'keyValues' => array(
					'type' => 500001,
				),
			),
		),
	),
....

Die XML Sitemap sollte nun via www.domain.de/sitemap.xml aufrufbar sein.
Nun könnt Ihre die XML Sitemap an Google, Bing usw. senden und einrichten.

Gerne könnt Ihr uns noch neue Beispiele via Kommentare dazu schreiben.

Eure Meinung zu dem Artikel ist gefragt! Schreibt mir ein Kommentar

Hat Euch der Artikel weitergeholfen oder gefallen?
Ich freue mich auf einen Blick auf meine Amazon-Wunschliste. Vielen Dank!

Hat Euch der Artikel geholfen oder gefallen?
Ich freue mich auf einen Blick auf meine Amazon-Wunschliste.
Vielen Dank!


Ich bin TYPO3 Freelancer, TYPO3-Entwickler, Web-Entwickler und Frontend-Entwickler. Ich arbeite im und für das Web seit 2004.
Mehr Infos zu der TYPO3 Internet-Agentur INGENIUMDESIGN.

Besucht auch unser TYPO3 Hilfe Forum.

Leave a Reply

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

4 Kommentare

  1. Jürg Blaser

    Danke für diese Lösung.
    Wenn man „Nicht im Menu“ – Seiten auch gelistet haben will muss Zeile 70 & 71 so lauten:
    excludeDoktypes = 6,7,199,255
    includeNotInMenu = 1

  2. Stefanie

    Sollen Short-Links nicht mit einbezogen werden, muss die Zeile 102 wieder einkommentiert werden, sonst werden die Unterseiten dieser Verweise nicht in der sitemap.xml aufgeführt – die Verweisseite wird einfach komplett übersprungen.
    Wenn z.B. die Hauptnavigation stets Verweis auf die 1. Unterseite ist, ist das ein witziges Feature 😉
    Danke aber für das geniale Script!

  3. endlich mal eine ideale Lösung, ohne zusätzliche extension

  4. user

    Sehr schön!
    Vielleicht sollte man den Artikel im Titel ein „xml“ mitgeben, so ist klar worum es geht und auch die Suchmaschinen freuen sich 🙂

Next ArticleTYPO3 Form Extension Anleitungen