Inhalt
Ausgangslage
Wieso das per typoscript und nicht einfach mit der Extension dd_googlesitemap machen?
Ja, dies habe ich mir zuerst auch überlegt. Ich habe die Extension installiert und die generierte Ausgabe angeschaut. Auf den ersten Blick sieht die Ausgabe okay aus. Auf den zweiten Blick merkt man, dass wenn die Seiten etwas älter sind ( was bei mir teilweise der Fall ist ) bei der changefreq=yearly drin steht.
Sicherlich denken jetzt einige: Klar! Ist doch richtig so, wenn seit einem Jahr nichts an der Seite gemacht wurde.
Das mag sein, jedoch möchte ich nicht, dass die Suchmaschine die Seite erst wieder in einem Jahr erneut besucht. :-) Jedoch war dies nicht der Grund, weshalb ich die typoscript Variante erstellen wollte. Mir ist aufgefallen das dd_googlesitemap Unterseiten eines SystemOrdners im TYPO3 nicht in der Sitemap Ausgibt.
Nehmen wir also an, dass in einem SystemOrdner Unterseiten ( Newsletter, MetaNavigation ) angelegt wurden, welche ich auch in die Sitemap einbinden möchte. Ebenfalls möchte ich auch bestimmte Seiten, welche im Menü nicht angezeigt werden in der Sitemap einbinden. Im weiteren sollte es möglich sein, manuell Seiten von der Sitemap auszuschliessen.
Fazit: Viel Spass, wenn dies mit einer Extension gemacht werden soll!
Basis Wissen zum Sitemap Aufbau
Informationen über den Google Sitemap Aufbau findet man in den Support Seiten von Google.
XML Seite vorbereiten
Als erstes wird eine neues TYPO3 PAGE Object erstellt, welche in diesem Fall über den Parameter type=1234 angesprochen wird. Was soviel heisst wie, MeineSeite.ch/?type=1234 soll die Sitemap darstellen.
Optisch diese URL bei einer Suchmaschine anzumelden ist nicht so toll. Deshalb wird auch gezeigt wie man dies einbinden könnte.
TYPO3 PAGE
google_sitemap = PAGE
google_sitemap {
# URL Parameter type=1234. Nicht nur Relevant wenn man mit realurl arbeitet.
typeNum = 1234
config {
# Charset soll utf-8 sein
metaCharset = utf-8
# TYPO3 Header Code deaktivieren
disableAllHeaderCode = 1
# Content-type anpassen
additionalHeaders = Content-type:text/xml;charset=utf-8
# Seite nicht Cachen
no_cache = 1
# Kein xhtml cleaning durch TYPO3
xhtml_cleaning = 0
}
}
typoscript code
realurl variante
$TYPO3_CONF_VARS['EXTCONF']['realurl'] = array (
'_DEFAULT' => array (
'fileName' => array(
'index' => array(
'sitemap.xml' => array(
'keyValues' => array(
'type' => 1234,
),
),
),
),
),
);
sitemap.xml mit realurl an type=1234 binden
.htaccess variante
# theorie, hat bei mir nicht funktioniert!
RewriteRule sitemap.xml$ /index.php?type=1234 [L,R=301]
per RewriteRule Anweisung
XML Inhalt
google_sitemap {
# Hilfs Code für manuellen Zeilenumbruch im Quellcode
append = TEXT
append.char = 10
10 = TEXT
10.value = <?xml version="1.0" encoding="UTF-8"?>
10.append < .append
30 = COA
30 {
wrap = <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">|</urlset>
1 = LOAD_REGISTER
1 {
# Beispiel wenn man nicht die Default Sprache L=0 ausgeben will
# 1:DE / 2:FR / 3:IT / 4:EN etc.. ( je nach config )
langparam = &L=2
}
# ROOTLEVEL ITEM
10 = COA
10 {
10 = TEXT
10 {
wrap = <loc>{getIndpEnv:TYPO3_SITE_URL}|</loc>
insertData = 1
typolink {
parameter.data = leveluid:0
# Einbinden wenn nicht L=0
#additionalParams = {register:langparam}
#additionalParams.insertData = 1
returnLast = url
}
}
20 = RECORDS
20 {
source = pages_{leveluid:0}
source.insertData = 1
dontCheckPid = 1
tables = pages
conf.pages = TEXT
conf.pages {
wrap = <lastmod>|</lastmod>
data = field:lastUpdated // field:SYS_LASTCHANGED // field:tstamp // field:crdate
date = c
}
}
30 = TEXT
30 {
wrap = <changefreq>|</changefreq>
# Mögliche Werte:
# always / hourly / daily / weekly / monthly / yearly / never
value = daily
# output kosmetik
#append < google_sitemap.append
}
40 = TEXT
40 {
wrap = <priority>|</priority>
# 0.1 - 1.0
value = 1.0
# output kosmetik
#append < google_sitemap.append
}
stdWrap.wrap = <url>|</url>
stdWrap.prepend < google_sitemap.append
}
20 = HMENU
20 {
excludeUidList = {$google_sitemap.excludeUidList}
1 = TMENU
1 {
expAll = 1
noBlur = 1
NO {
doNotLinkIt = 1
doNotShowLink = 1
stdWrap2 {
# diverese informationen aufbereiten
cObject = COA
cObject {
1 = LOAD_REGISTER
1 {
title {
field = title
htmlSpecialChars = 1
}
}
# loc
10 = TEXT
10 {
wrap = <loc>{getIndpEnv:TYPO3_SITE_URL}|</loc>
insertData = 1
typolink {
parameter.field = uid
# Einbinden wenn nicht L=0
#additionalParams = {register:langparam}
#additionalParams.insertData = 1
returnLast = url
}
# output kosmetik
#prepend < google_sitemap.append
#append < google_sitemap.append
}
# lastmod
20 = TEXT
20 {
wrap = <lastmod>|</lastmod>
data = field:lastUpdated // field:SYS_LASTCHANGED // field:tstamp // field:crdate
date = c
# output kosmetik
#append < google_sitemap.append
}
# changefreq
30 = TEXT
30 {
wrap = <changefreq>|</changefreq>
# always / hourly / daily / weekly / monthly / yearly / never
value = monthly
# output kosmetik
#append < google_sitemap.append
}
# entfernt damit XML nicht ueber 50KB
30 >
# priority
40 = TEXT
40 {
wrap = <priority>|</priority>
# 0.1 - 1.0
value = 1.0
# output kosmetik
#append < google_sitemap.append
}
stdWrap.wrap = <url>|</url>
stdWrap.prepend < google_sitemap.append
#stdWrap.append < google_sitemap.append
}
}
append < google_sitemap.append
}
}
2 = TMENU
2 < .1
2.NO.stdWrap2.cObject.40.value = 0.9
3 = TMENU
3 < .1
3.NO.stdWrap2.cObject.40.value = 0.9
4 = TMENU
4 < .1
4.NO.stdWrap2.cObject.40.value = 0.8
5 = TMENU
5 < .1
5.NO.stdWrap2.cObject.40.value = 0.7
6 = TMENU
6 < .1
6.NO.stdWrap2.cObject.40.value = 0.7
}
# Spezielle Seiten, welche nicht über die normale Navigation wie
# zum Beispiel: News / Events / Disclaimer / Impressum / Metanavigation
# erreichbar sind und im *Menü nicht anzeigen* haben.
30 = HMENU
30 < .20
30 {
special = list
special.value = {$google_sitemap.includeSpecialUidList}
includeNotInMenu = 1
}
}
}
typoscript code