SEO-Tipp: Statt /de/index.php nur /de/ anzeigen

Dieser Artikel beschreibt, wie Sie dafür sorgen, dass eine Seite nicht gleichzeitig über den reinen Verzeichnisaufruf und index.php Aufruf erreichbar ist.

Sie können über eine einfache Regel in der .htaccess Datei des Projektes (z.B. /de/.htaccess) dafür sorgen, dass eine Seite nicht gleichzeitig über z.B. /de/index.php und /de/ aufgerufen werden kann.

URL-Aufrufe mit index.php Angabe über .htaccess umschreiben

Da ein Inhalt nur über eine URL erreichbar sein sollte, um so Suchmaschinen die Arbeit zu erleichtern, bietet es sich an, den eigentlichen Dateinamen einer index.php zu entfernen.

Über eine mod_rewrite Regel wird deshalb jeder index.php Aufruf (via GET) direkt auf das entsprechende Verzeichnis geleitet und die Parameter angehängt. POST-Anfragen hingegen werden von dieser Regel ausgeschlossen. Beachten Sie wegen der GET-Anfragen die Hinweise am Artikelende!

Beispiel: Inhalt der .htaccess Datei Ihres Projektverzeichnisses (z.B. /IhrProjekt/)

# RewriteEngine aktivieren (on), falls noch nicht erfolgt:
RewriteEngine on
RewriteBase /IhrProjekt
RewriteCond %{REQUEST_URI} \/index\.php$ [NC]
### Weblication Volltextsuche "Weblication-Grid/5.0 (wSearchBot)" ausschliessen:
RewriteCond %{HTTP_USER_AGENT} !^Weblication.*(wSearchBot).*$ [NC]
RewriteCond %{THE_REQUEST} ^GET
RewriteRule ^(.*)index\.php$ /IhrProjekt/$1?%{QUERY_STRING} [R=301,L]

Sofern auch die oberste index.php umgeschrieben werden soll, definieren Sie am besten eine 301-Weiterleitung über eine .htaccess Datei, die direkt unterhalb der Domain liegt (also in DOCUMENT_ROOT):

Beispiel: Inhalt der .htaccess Datei aus der DOCUMENT_ROOT

# oberste /index.php in / umschreiben:
Redirect 301 /index.php /
Sofern in einem Unterverzeichnis über eine .htaccess-Datei der Befehl "RewriteEngine ON" gesetzt wird, gilt die Vererbung der im Verzeichnis höher liegenden .htaccess-Datei nicht mehr. Es müssen also in dieser neuen .htaccess-Datei alle Befehle erneut gesetzt werden!

Links mit index.php Angabe innerhalb der Seite umgeschreiben

Um die Links in den generierten Seiten auch entsprechend anzupassen, filtern Sie dies über die pre.php Ihres Projektes.

Ab CMS-Version 008.005.002.000 können Sie das Umschreiben der Links in der pre.php des Projektes mit folgender Zeile beeinflussen. Somit werden Links in Navigationen, Google-Sitemap, Canonical Links, etc. auch ohne die index.php Angabe gesetzt. Die Ausgabe wird lediglich für nicht eingeloggte Benutzer umgeschrieben!

$preVars['removeAllIndexPhp'] = true;

Eine individuelle Lösung (z.B. bei älteren CMS-Versionen) kann alternativ zur vorigen preVars-Umsetzung über die pre.php wie folgt aussehen:

// ...
  // Hier wird das globale Steuerungsskript eingebunden
  include($_SERVER['DOCUMENT_ROOT'].'/weblication/grid5/default/project/wGlobal/scripts/pre.php');
  
  if(wUserCur::getName() == '' && !wRequest::isSearchBot()){
    // index.php wird nur aus Links entfernt, die mit Slash beginnen
    // und innerhalb der Google-Sitemap (google-sitemap.php) gesetzt sind
    if(stristr(wRequest::getPath(), 'google-sitemap')){
      $preResult = preg_replace("/\/index\.php/", "/", $preResult);
    }
    else{
      $preResult = preg_replace("/(href=\"\/|action=\"\/)([^\"']*\/)index\.php/", "$1$2", $preResult);
    }
  }
// ...

Wichtige Hinweise

  • Passen Sie die Pfade an Ihr Projekt an!
  • Der Server muss mod_rewrite unterstützen, was Sie bei Ihrem Provider erfragen können!
  • Sofern in einem Unterverzeichnis über eine .htaccess-Datei der Befehl "RewriteEngine ON" gesetzt wird, gilt die Vererbung der im Verzeichnis höher liegenden .htaccess-Datei nicht mehr. Es müssen also in dieser neuen .htaccess-Datei alle Befehle erneut gesetzt werden!
  • Beim Einsatz der Weblication® CMS Volltextsuche ist es erforderlich, dass diese für die Suchindexierung in der .htaccess entsprechend gesetzt ist (siehe Quelltextbeispiel der .htaccess Datei oben)!
  • Ein Such-Formular in der Webseite (z.B. im Kopf) muß ggf. dementsprechend angepasst werden, daß dem Formularaufruf über das action-Attribut dort schon die URL ohne index.php Angabe übergeben wird!
    (anstatt action="/de/search/" wie folgt: action="/de/search/")
    Ansonsten kann es zu Problemen bei Suchbegriffen mit Umlauten kommen, die dann durch den GET-Aufruf ggf. URL-Kodiert werden.