Suchmaschinenfreundlich und barrierefrei: Sitemaps für TYPO3

© djama - Fotolia

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.
Code: 
## 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 = &nbsp;
                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> | 
        }
    }
}
Bild des Benutzers ambranet

Susanna Künzl

Susanna Künzl leitet seit 1999 diese Agentur und beschäftigt sich hauptsächlich mit der Programmierung von CMS-Erweiterungen für TYPO3 und Drupal.

Kommentare

Vielen Dank für die Codes. So sehr wir typo3 lieben umso schwieriger sind einige (eigentlich selbstverständliche) features.
Da freuen wir uns immer über Tips im www.

Viele Grüsse und ein schönes Wochenende

Neuen Kommentar schreiben