Canonical Link mit TypoScript: SEO für eine Extension

TYPO3 ist seit der Version 9.5 aus dem Oktober 2018 mit mehreren neuen Möglichkeiten versehen, SEO zu betreiben. Zu einer guten Suchmaschinenoptimierung zählt es, den Quellcode einer Webseite zu strukturieren, Texte zu gestalten und Bilder sowie Links mit Suchbegriffen zu versehen. Es gibt jedoch noch andere Maßnahmen, die technisch und weitgehend automatisch im Hintergrund ablaufen. Eine dieser Maßnahmen ist die Erzeugung eines Canonical Link in einer Extension über TypoScript. In dieser Seite stellen wir Ihnen TYPO3 Code Snippets vor, mit denen Sie die Basis für SEO per TYPO3 legen können.

Update 2024: Es gibt nun auch die Möglichkeit, den Canonical Tag in TYPO3 über die PHP Schnittstellen und ein PSR-14 Event zu erzeugen. Mehr dazu hier:

Canonical Tag für SEO in TYPO3 mit Event Listener

Funktion eines Canonical Link für SEO

Worum handelt es sich bei einem Canonical Link und welche Bedeutung hat er für SEO? Stellen Sie sich vor, Sie haben mehrere Domains für Ihre Webseite. Alle Domains haben dieselbe Struktur und die dieselben Inhalte. Denn vielleicht hatten Sie bereits zuvor Projekte oder haben noch vor, diese Domains anderweitig zu nutzen. Nun zeigen aber alle auf dieselbe Webseite. Und hier beginnt das Problem: Google mag keinen duplicate content, also Inhalte, die identisch unter mehreren verschiedenen Adressen vorlegen. Um nun sicherzustellen, dass Google uns nicht im Page Rank herunterstuft, können wir zur Optimierung unserer Webseite dafür sorgen, dass es trotz mehrerer Domains nur eine Hauptdomain gibt, unter der dieser Artikel zu erreichen ist. Genau zu diesem Zweck setzen wir einen Canonical Link ein. Dieser sagt einer Suchmaschine, dass diese Seite mit einem bestimmten Link unter einer Domain gefunden wurde, die Hauptdomain ist jedoch eine andere und damit soll die Suchmaschine bitte die Informationen unter dem anderen Link abspeichern. Somit haben wir eine wichtige redaktionelle Grundlage für eine erfolgreiche Suchmaschinenoptimierung gelegt. 

Seit der Version 9.5 generiert TYPO3 einen Canonical Link automatisch. Wir haben auch die Möglichkeit, diesen Link redaktionell zu bearbeiten. Zuvor war es das Handwerk des Entwicklers, einen Canonical Link in den <HEAD>-Bereich der Webseite zu schreiben. Dies ist nun nicht mehr notwendig. Es sei denn, Sie möchten diese Möglichkeit auch in einer Extension nutzen.

Canonical Link in einer Extension

Damit kommen wir zum Kern dieses Artikels. Anhand unserer Extension eines Blog für die Webseite unserer Agentur möchten wir Ihnen beschreiben, wie Sie die Anforderung eines Canonical Link für den Blog lösen können. Dabei stellen sich jedoch einige Probleme in den Weg, für die wir Ihnen Lösungsmöglichkeiten aufzeigen möchten.

Erzeugung des Canonical Link abschalten

TYPO3 baut einen Canonical Link bei jeder einzelnen Seite unserer Webseite auf. Um einen eigenen Canonical Link für eine Extension zu erzeugen, ist es also zuerst einmal wichtig, diesen Standard abzuschalten. Dazu gehen wir in unsere Datei ext_localconf.php im Stammverzeichnis unserer Extension und schalten dort die Generierung des Canonical Link für diese Erweiterung ab, indem wir an dieser Stelle der Syntax einen unset-Befehl eingeben: 

 call_user_func(
   function()
   {
   
     unset($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['TYPO3\CMS\Frontend\Page\PageGenerator']['generateMetaTags']['canonical']);
     
     \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
       'Ibkblog',
       'Blog',
       [
         \Ibk\Ibkblog\Controller\BlogController::class => 'list, show'
       ],
       [...]
     );
   }
 );

Ab diesem Zeitpunkt haben wir die Möglichkeit, unseren eigenen Canonical Link zu schreiben. 

Canonical Link per TypoScript im Setup erzeugen

Um nun einen eigenen Canonical Link in einer TYPO3 Extension zu generieren, bietet es sich an, das TypoScript Setup der Erweiterung zu nutzen. Hier wenden wir das page.headerData Objekt von TypoScript an. 

 page {
  headerData { 
    200 = TEXT
    200 {
      htmlSpecialChars = 1    
      typolink {
        parameter.data = TSFE:id
        returnLast = url
        addQueryString = 1
        addQueryString.method = GET
        forceAbsoluteUrl = 1
      }
      wrap = <link rel="canonical" href="|">
    }
  }
}

Die Funktionen des TypoScript Objekts typolink: 

  • parameter.data = TSFE:id
    Damit sagen Sie Ihrem TYPO3, dass es sich die Daten für das Frontend zur UID Ihrer Seite auslesen soll 
  • returnLast = url
    Liefert die URL der Seite zurück, eine andere Möglichkeit wäre das target 
  • addQueryString = 1
    Alle Parameter des Links sollen übergeben werden 
  • addQueryString.method = GET
    Die Parameter des query string sollen ausgelesen werden 
  • forceAbsoluteUrl = 1
    Damit stellen wir sicher, dass die gesamte Domain mit übergeben wird. 

Weitere Informationen zum Canonical Link erhalten Sie im ►Wiki unserer Agentur.

Das Problem des Cache

Wenn Sie nun Ihre Extension durchklicken und sich den generierten Quelltext der Seite ansehen, werden Sie feststellen, dass der Canonical Link oftmals nicht mit dem Link übereinstimmt, der sich oben in der Adressleiste befindet. Was ist passiert? An dieser Stelle greift der Cache unseres TYPO3 Systems ein. 

Wenn Sie eine Extension in eine Seite einbinden, geschieht dies ja meist auf einer einzelnen Seite. Der Cache von TYPO3 generiert also einen Link zu dieser Seite mit einigen Parametern aus einem query und speichert diesen ab. Wenn Sie sich z. B. durch die Listeneinträge des Blog bewegen, bleibt der Canonical Link unverändert, obwohl Sie sich in der Liste weiter nach hinten klicken. 

Hier gibt es derzeit keine allein heilbringende Lösung für dieses Problem. Es bestünde die Möglichkeit, den Cache für diese Seite per TypoScript Template abzuschalten. Davon ist aus Gründen der Performance aber abzuraten.