Suchmaschinenfreundlich und barrierefrei: Sitemaps für TYPO3
Sitemaps sorgen zuerst einmal dafür, dass Besucher auf einer Website nicht verloren gehen. Sie bieten ein Plus an Benutzerfreundlichkeit. Was noch besser ist: Eine Sitemap unterstützt Suchmaschinen dabei, Eure Website zu indizieren. Auch im Zeitalter von Google Sitemaps hat das seine Berechtigung, denn eine suchmaschinenfreundliche Sitemap transportiert zu jedem Link mehr Informationen, als das Sitemap Schema es ermöglicht. Diese Informationen können Aufschluss darüber geben, zu welchen Begriffen die Zielseite gefunden werden soll, und werten den internen Backlink damit auf.
TYPO3 bietet ab Werk verschiedene Inhaltselemente vom Typ Menü/Sitemap an, die diese Aufgabe nur teilweise erfüllen: Der Typ "Menü der Unterseiten der gewählten Seiten mit Inhaltsangabe" gibt zwar eine dl aus - Titel und Inhaltsangabe (abstract) der Seite werden angezeigt - aber er arbeitet nicht rekursiv. Unterebenen werden also nicht erfasst. Der Typ "Sitemap" bzw. "Sitemap der ausgewählten Seiten" erzeugt eine ul aller Seiten in einem Seitenbaum (auch mit frei wählbarer Startseite), verzichtet aber auf die Beschreibung zum Link.
Natürlich gibt es auch Extensions, die eine suchmaschinenfreundliche Sitemap erstellen, z.B. den Klassiker fl_seo_sitemap (Anleitung zur Extension). Das Ausgabeformat ist hier allerdings auf Listen beschränkt, der Infotext zum Link kann nicht semantisch korrekt abgetrennt werden.
Wer eine barrierefreie Sitemap benötigt und zugleich auf eine zusätzliche Extension verzichten will, codet schnell diese Zeilen Typoscript (in zwei Geschmacksrichtungen)
- Semantisch korrekt als ul oder dl
- Valider Quelltext
- Felder für Linktext, Title und die Beschreibung können angepasst werden
- Links und Hierarchieebenen werden durchnummeriert, die Nummerierung innerhalb des Links in <dfn>-Tags ausgespielt.
## Sitemap als verschachtelte Liste ## lib.sitemap = COA lib.sitemap { # Überschrift verstecken 10 = TEXT 10 { value = Sitemap als ul wrap = <h3 class="hidden">|</h3> } # Menü 20 = HMENU 20 { special = directory special.value = 1 1 = TMENU 1 { expAll = 1 wrap = <ul>|</ul> NO = 1 NO { stdWrap { cObject = TEXT cObject { field = title htmlSpecialChars = 1 dataWrap = <dfn>1.{register:count_MENUOBJ} </dfn> | } } wrapItemAndSub = <li>|</li> ATagTitle.field = subtitle // title after { cObject = TEXT cObject { data = field:abstract // field:description htmlSpecialChars = 1 wrap = <span class="description">|</span> } } } } # 2. Ebene 2 < .1 2.NO.stdWrap.cObject.dataWrap = <dfn>2.{register:count_MENUOBJ} </dfn> | # 3. Ebene 3 < .1 3.NO.stdWrap.cObject.dataWrap = <dfn>3.{register:count_MENUOBJ} </dfn> | } }
## Sitemap als dl ## lib.sitemapDL = COA lib.sitemapDL { # Überschrift verstecken 10 = TEXT 10 { value = Sitemap als df wrap = <h3 class="hidden">|</h3> } # Menü 20 = HMENU 20 { wrap = <dl>|</dl> special = directory special.value = 1 1 = TMENU 1 { expAll = 1 NO = 1 NO { linkWrap = <dt class="level-1">|</dt> ATagTitle.field = subtitle // title stdWrap { field = title htmlSpecialChars = 1 dataWrap = <dfn>1.{register:count_MENUOBJ} </dfn> | } after { cObject = TEXT cObject { data = field:abstract // field:description htmlSpecialChars = 1 required = 1 } ifBlank = wrap = <dd class="level-1">|</dd> } } } # 2. Ebene 2 < .1 2.NO { linkWrap = <dt class="level-2">|</dt> after.wrap = <dd class="level-2">|</dd> stdWrap.dataWrap = <dfn>2.{register:count_MENUOBJ} </dfn> | } # 3. Ebene 3 < .1 3.NO { linkWrap = <dt class="level-3">|</dt> after.wrap = <dd class="level-3">|</dd> stdWrap.dataWrap = <dfn>3.{register:count_MENUOBJ} </dfn> | } } }