Man kann sich mit Typoscript eine wunderbare XML Sitemap basteln, ohne dazu extra eine der vielen erhältlichen Extensions verwenden zu müssen.
In diesem Beispiel wird der komplette Seitenbaum abgebildet, plus zusätzlich die Einträge einer Extensiontabelle. Wenn man z.B. eine Auflistung von Newsartikeln inkl. einer Detailansicht zum jeweiligen Artikel hat, kann man diese Detailseiten ebenfalls hier hinzufügen. (ab 20 = CONTENT…)
xmlSitemap = PAGE xmlSitemap { typeNum = 200 config { no_cache = 1 disableAllHeaderCode = 1 additionalHeaders = Content-Type: text/xml; charset=utf-8 simulateStaticDocuments = 0 tx_realurl_enable = 1 } 10 = COA 10 { wrap ( <?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd" >|</urlset> ) 10 = HMENU 10 { special = directory #Ausgangspunkt / Root Seite special.value = 1 #1 = Standard #2 = Erweitert #3 = Externe URL #4 = Shortcut #5 = Nicht im MenÌ #6 = Backend Benutzer Bereich #7 = Mount Seite #199 = Abstand #254 = Sysordner #255 = Recycler excludeDoktypes = 2,3,5,6,7,199,254,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.value = <priority>1.0</priority> 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 } # beliebige records... /* 20 = CONTENT 20 { table = tx_adprojects_domain_model_project select { orderBy = title ASC languageField = sys_language_uid pidInList = 11,12,13,14,15,30 } renderObj = COA renderObj { stdWrap.wrap = <url>|</url> 5 = TEXT 5 { typolink.parameter = 123 typolink.additionalParams = &tx_adprojects_projects[project]={field:uid}&tx_adprojects_projects[controller]=Project&tx_adprojects_projects[action]=show typolink.additionalParams.insertData = 1 typolink.returnLast = url typolink.forceAbsoluteUrl = 1 wrap = <loc>|</loc> } 10 = TEXT 10 { field = tstamp strftime = %Y-%m-%dT%H:%M:%SZ wrap = <lastmod>|</lastmod> } 20 = TEXT 20.value = <priority>0.7</priority><changefreq>weekly</changefreq> } } } */ }
Ich denke das meiste ist selbsterklärend.
Die Ausgabe der Sitemap erhält man dann mittels der festgelegten Typenum. (http://www.domain.at/?type=200)
Mit der passenden realurl Config oder alternativ einer RewriteRule bekommt man das auch noch in schön hin:
//[...] 'fileName'=> array ( 'index'=> array ( 'sitemap.xml'=> array ( 'keyValues'=> array ( 'type'=>200, ), ), //[...] |
(http://www.domain.at/sitemap.xml)
Geniale Sache, Danke!
Wobei mir gerade noch was auffällt: Ein special=list und sepcial.value=1 bringt auch die Startseite mit in die Sitemap rein 😉
Hallo Alex,
wie muss die Geschichte denn aussehen, wenn ich eine mehrsprachige Seite abbilden möchte?
grüsse frank
Hallo Frank,
mehrsprachige Seiten bilde ich immer folgendermaßen ab:
http://domain.xyz/de/sitemap.xml
http://domain.xyz/en/sitemap.xml
oder ohne realurl
http://domain.xyz/index.php?type=200&L=0
http://domain.xyz/index.php?type=200&L=1
Es gibt also für jede Sprache eine eigene sitemap.xml.
In der robots.txt würde das dann so aussehen:
Sitemap: http://domain.xyz/de/sitemap.xml
Sitemap: http://domain.xyz/en/sitemap.xml
Habe ewigkeiten mit Extensions rumgehampelt, obwohl es doch so einfach und so sauber und so updatefähig geht.
Vielen Dank!
Danke
Hallo ich habe beruflich mit sehr vielen verschiedenen CMSen zu tun und kenne mich mit TypoScript überhaupt nicht aus. Wenn ich jedes CMS in allen Details lernen müsste käme ich gar nicht mehr hinterher. Ich finde die Möglichkeit eine XML Sitemap ohne Plugins zu erstellend sehr interessant. Kannst du mir sagen wo dieser Code in Typo3 in welchem Element eingefügt werden muss? Vielen Dank im Voraus.
Tina
Hallo Tina,
am einfachsten ist es, wenn du den Code in dein Main Typoscript Template kopierst.
xmlSitemap = PAGE
xmlSitemap {
...
}
Info zu den Templates findest du z.B. hier: http://typo3buddy.com/the-basics/the-main-typoscript-template/
Ich erstelle für solche Dinge immer ein „Extension Template“ und binde dieses dann ins Main Template ein, aber es führen beide Wege zum Ziel.
Hallo
Vielen Dank für den vielversprechenden Post – aber wie immer (und da schliesse ich mich meine Vor-Schreiberin an) kommt man als Neuling vom Hundersten ins Tausende. Ich habe ein Extension-Template mit Deinem Code definiert, bekomme aber nun beim Aufruf meiner Sitemap (https://www.board-portal-software.de/?type=200) nun immer vom Browser einen Redirect auf https://www.board-portal-software.de/start.html?type=200 präsentiert. Dieser enthält alles andere als eine braucbare Sitemap.
Danke für jeden sachdienlichen Hinweis.
Lieber Gruss
Markus
Hallo Markus,
die Sitemap wird richtig generiert (sieh dir mal den Quelltext an), allerdings ohne korrekten XML Content-Type (daher stellt sie der Browser auch nicht als XML dar) und es befindet sich nur eine Seite (die Startseite) in der Sitemap.
Wie sieht denn dein Seitenbaum aus? Wenn ich mir die Website so ansehe, finde ich da gar kein Menü mit Seiten, sondern nur Artikel. Diese XML-Sitemap ist primär für normale TYPO3-Seiten gedacht. Natürlich kann man auch Extension-Records in der XML-Sitemap ausgeben, siehe dazu den Abschnitt „# beliebige records…“. LG
Hallo Alex,
viele Dank für diesen Typoscript Snippet. Ich habe diesen in meiner TYPO3 (8.7) Instanz eingebunden aber der w3c validator bemängelt immer, dass die 1. Zeile eine blank line ist. Ich kann mir nicht erklären wo diese herkommen soll. Hast du einen Tipp für mich?
Vielen Dank
Christopher
Danke für das Script, ich setze es bei ein, zwei Seiten ein:
Aktuelle Version für TYPO3 8, mit leicht geänderter additionalHeaders Schreibweise und tx_news URLS:
https://gist.github.com/fabtho/837c4424da9d5ce28ae609173426d46f