Hacks
ANTI-SEO
Aus SEO Sicht ist es ungünstig, wenn eine Seite sowohl mit als auch ohne "index.php/" erreichbar ist, Stichwort "Duplicate Content". Um dem gerecht zu werden, wird ab Contao 2.9.0 bei eingeschalteter URL Umschreibung ein Zugriff auf eine URL mit "index.php/" nicht mehr die Seite angezeigt sondern auf ein Error 404 umgelenkt.
Das klingt im Prinzip richtig, hat aber 2 große Nachteile.
- Webseiten die vor dem Einschalten der URL Umschreibung bereits von Suchmaschinen indiziert wurden, haben nun falsche Links dort, Suchergebnisse zeigen nach Aufruf auf die Fehlerseite.
- Logauswertungen haben nachgewiesen, das sogar bei Webseiten die von Anfang an die URL Umschreibung eingeschaltet hatte, trotzdem von Suchmaschinen besucht werden und dabei die URL mit "index.php/" aufgerufen wird. Dazu gehört auch leider der GoogleBot.
Die Idee ist nun, statt der 404 Fehlermeldung die Zugriffe über eine permanente Umleitung auf die richtige URL zu lenken. Dazu wurde in der Datei system/modules/frontend/PageError404.php gleich am Anfang der Methode "generate" folgendes eingefügt:
Mit einem Doppelklick auf die Code-Ansicht, wird diese mit einer vorgewählten Sicht ersetzt. Es kann nun mit Ctrl/Strg/Cmd-C der Code kopiert werden. Ein Klick anderswo stellt den ursprünglichen Zustand wieder her.
// ANTI-SEO-HACK
if ($GLOBALS['TL_CONFIG']['rewriteURL'] && strncmp($this->Environment->request, 'index.php/', 10) === 0)
{
$newRequest = substr_replace($this->Environment->request,"",0,10);
$this->log('Redirect page ID "' . $pageId . '", host "'
. $this->Environment->host . '" and languages "'
. implode(', ', $this->Environment->httpAcceptLanguage)
. '" (' . $this->Environment->base . $newRequest . ')'
, 'PageError404 ANTI-SEO-Hack', TL_CONFIGURATION);
$this->redirect($this->Environment->base . $newRequest, 301);
exit();
}
Das Logging dient hier nur zur Kontrolle und kann auch entfernt werden:
// ANTI-SEO-HACK
if ($GLOBALS['TL_CONFIG']['rewriteURL'] && strncmp($this->Environment->request, 'index.php/', 10) === 0)
{
$newRequest = substr_replace($this->Environment->request,"",0,10);
$this->redirect($this->Environment->base . $newRequest, 301);
exit();
}