HowTo: Einbinden von canonical in den Header mit TYPO3
Das “canonical”-Tag ist in aller Munde. Es dient dazu duplicate content für die Suchmaschinen identifizierbar zu machen.
Unter TYPO3 hat man automatisch schon doppelte Inhalte, da eine Seite z.B. unter: www.domain.de/index.php?id=1 oder unter www.domain.de/?id=1 erreichbar ist. Die Beispiele lassen sich natürlich beliebig fortsetzen.
Da TYPO3 das (noch) nicht von Haus aus als headerData mitbringt, müssen wir das halt händisch basteln.
Um einen enstprechenden Tag in der Form
<link href=”http://www.domain.de/seite.html” rel=”canonical”/>
zu bekommen, bemühen wir mal ein bisschen TypoScript und basteln uns etwas zusammen:
# baseURL setzen (falls nicht schon vorher geschehen) WICHTIG den / am Ende nicht vergessen
config.baseURL = http://www.domain.de/# holen des URL-Teil hinter dem ersten /
temp.activepage = TEXT
temp.activepage.typolink {
parameter.data = TSFE:id
returnLast = url
}# Erstellung des Header-Link-Tag in mehreren Teilen
page.headerData = COA
page.headerData.10 = TEXT
page.headerData.10 {
value = <link rel=”canonical” href=”
}
page.headerData.20 = TEXT
page.headerData.20 {
value < config.baseURL
}
page.headerData.30 < temp.activepage
page.headerData.40 = TEXT
page.headerData.40 {
value = ” />
}
Bei meinem kleinen Test hat das ganze sowohl auf einer Seite mit index.php?id=XY als auch mit RealURL funktioniert. Besonders schön ist, das durch die Nutzung der TYPO3 Linkerzeugung auch bei Aufruf einer Seite via index.php-Parameter die RealURL-Seite als canonical angegeben wird.
Ebenso wird durch die Einbindung von baseURL die Variante abgefangen, dass der Webauftritt unter verschiedenen URL (z.B. www.domain.de und www.domain.com) erreichbar ist.
Wäre noch interessant, ob die Lösung auch bei anderen klappt. Wie sieht es mit CoolURI aus? Über Feedback hier als Kommentar würde ich mich freuen.


Das geht mit wesentlich weniger Code ;)
lib.canonical = TEXT
lib.canonical {
typolink.parameter.data = TSFE:id
typolink.returnLast = url
wrap =
}
page.headerData.1000 < lib.canonical
Hi Peter!
Weniger Code ist immer gut ;-) Irgendwie will Dein Code bei mir aber nicht funktionieren.
Und wie fängst Du ab, dass die Seite z.B. unter fladi.de und fladi.com erreichbar ist?
Hi,
ist natürlich die Frage warum ein bot je die ?id=xx sehen sollte, oder die index.php?id=xxx
wenn dann ist wohl wesentlich interessanter eine ext zu generieren, die einen user eintragen lässt wenns wo einen duplicate content gibt
Hi Fladi,
mir ist grad erst aufgefallen, dass dein Blog wohl meinen wrap mit HTML nicht mag, drum hier nochmal:
wrap = [link rel="canonical=" href="{$baseURL}|" /]
Die eckigen Klammern müssen natürlich durch spitze Klammern ersetzt werden.
Gruß
Peter
Hi Peter,
sehr schön! Thx! Ich muss halt noch viel lernen :-)
Prima Typoscript, funktioniert aber nur, wenn kein TT_NEWS verwendet wird..
Unser TypoScript baut den aktuellen Link mit Berücksichtigung aller erlaubter URL-Parameter mithilfe des cHash auf. Alle von TYPO3 nicht explizit erlaubten URL-Parameter fliegen dann raus. Das klappt soweit mit allen Extensions, die sich der cHash-Logik bedienen, z.B. tt_news, cal
;-)
http://blog.marit.ag/2009/02/23/canonical-tag-fur-die-suchmaschinen/
Vielen Dank für den Tipp! Mit dieser Ergänzung hier funktionierts auch bei Extensions wie tt_news (es werden die notwendigen Parameter bei der Generierung der URL berücksichtigt):
Cooler Tipp. Jetzt kann ich auch in meine Typo-Seiten den Tag einbauen. Für wordpress hab ich auch schon ein plugin gefunden.
Ich hab ne kleine Extension namens canonical geschrieben, die automatisiert bereits einen kleineren Teil abdreckt. Vorstellung bei typo3blogger.de: http://typo3blogger.de/extension-canonical-zur-vermeidung-von-duplicate-content/
@ Peter
@ Fladi
danke für die Tipps, werde mal schauen, ob ich als Anfänger das umgesetzt bekomme
Vielen Dank für den Tipp! Mit dieser Ergänzung hier funktionierts auch bei Extensions wie tt_news (es werden die notwendigen Parameter bei der Generierung der URL berücksichtigt):
<blockquote>
lib.canonical {
typolink.addQueryString = 1
typolink.addQueryString.method = POST,GET
typolink.addQueryString.exclude = no_cache, id
}
</blockquote>
Mir stellt sich nur die Frage, was man mit dem Zeugs soll. Prinzipiell fängt man doch solche Sachen durch mod_rewrite ab.
.htaccess
———————-
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.meineeine\.de$ [NC]
RewriteRule ^(.*) http://meineeine.de/$1 [R=301]
RewriteCond %{HTTP_HOST} ^www.meineandere\.com$ [NC]
RewriteRule ^(.*) http://meineeine.de/$1 [R=301]
RewriteCond %{HTTP_HOST} ^wasauchimmer\.de$ [NC]
RewriteRule ^(.*) http://meineeine.de/$1 [R=301]
Somit wird kein Code generiert und auch wieder ein bisschen Rechenzeit gespart. Total “green” config ;-)
Wenn jetzt jemand anführen möchte, dass es Hoster gibt die kein mod_rewrite liefern sollte man sich überlegen ob man nicht zufällig einen Igel in der Tasche hat. Andere daseinsberechtigungen entziehen sich meinem Verständnis.