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
				}
				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.
Krypto-Donate an:
BTC: 1Emte6AxnifWqt7N8vSqSF7JK1K6CYuBj4
LTC: Lfs2F8DabYuunxYw2ym9CRLAMBKZUaaBNh
ETH: 0x95298b41564f070bc83bc76159bb7804d26483d6
Vielen Dank!

Ich bin freiberuflicher TYPO3-Entwickler, Web-Entwickler und Frontend-Entwickler. Ich arbeite im und für das Web etwas mehr als 12 Jahre. Mehr Infos zu der TYPO3 Internetagentur - INGENIUMDESIGN.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

2 Kommentare

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

  2. 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 🙂