SEO-Tipp: Hauptverzeichnis ausblenden

07. Dez 2016

Dieser Artikel beschreibt, wie Sie das Hauptverzeichnis Ihres Projektes in der Ausgabe ausblenden.

Falls Sie das Hauptverzeichnis eines Projektes als unnötig oder sogar störend empfinden, können Sie dieses einfach ausblenden. Häufig ist dies in Bezug auf Suchmaschinen erwünscht (SEO).

Dazu müssen Sie an zwei Stellen eingreifen. Dieser Beitrag zeigt, wie das Projektverzeichnis mit dem Verzeichnisnamen /IhrInhaltsProjekt ausgeblendet wird.

Wenn Sie unterhalb Ihrer Weblication® CMS Installation mehrere Projekte nutzen, sollte die lizenzierte Domain nicht gleichzeitig auch zum Ausblenden des Hauptverzeichnisses eines Projektes genutzt werden! Ein reibungsloser Betrieb ist sonst nicht gewährleistet!
Ein gleichzeitiger Einsatz von registrierten Benutzern (z.B. zur personalisierten Ausgabe) zu Projekten mit ausgeblendetem Hauptverzeichnis ist auf diese Weise nicht möglich!

Lassen Sie die Lizenz auf eine Pflege-Subdomain wie z.B. "cms.IhreDomain.tld" ausstellen, damit Sie sich über diese Subdomain einloggen und bearbeiten können.

Schritt 1: Eingehende Anfragen umschreiben

Die Anfragen ohne Hauptverzeichnis müssen über .htaccess so umgeschrieben werden, dass das existierende Hauptverzeichnis davor gesetzt wird. Hierzu legen Sie in der DOCUMENT_ROOT Ihrer (Sub)Domain eine .htaccess Datei mit folgendem Inhalt ab (Beispielpfade).
Die Domain (IhreDomain\.dd) und Pfadangaben (/IhrInhaltsProjekt etc.) ersetzen Sie durch Ihre Domain und Pfade!

Wir empfehlen beim Ausblenden des Hauptverzeichnisses die Aufrufe zu diesem Projekt nur über eine bestimmte Domain zu erlauben. Ansonsten kann es gerade bei CMS-Installationen mit mehreren Projekten zu Konflikten kommen.

Beispiel: Inhalt der .htaccess Datei, die in der Document Root liegen muss (Beispielpfade)

RewriteEngine on
RewriteBase /

## Optional:
## Trailing-Slash-Problem abfangen im Zusammenhang mit dem Ausblenden des Hauptverzeichnisses:
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{DOCUMENT_ROOT}/IhrInhaltsProjekt%{REQUEST_URI} -d
RewriteRule ^(.*)$ /$1/ [L,R=301]

# HTTP-Aufrufe erfolgen entweder mit oder ohne www
# mit www:
RewriteCond %{HTTP_HOST} ^IhreDomain\.dd$ [NC]
RewriteRule ^(.*)$ http://www.IhreDomain.dd/$1 [NE,R=301,L]
# wenn Sie die HTTP-Aufrufe ohne www setzen wollen:
# RewriteCond %{HTTP_HOST} ^www\.IhreDomain\.dd$ [NC]
# RewriteRule ^(.*)$ http://IhreDomain.dd/$1 [R=301,L]

# Hauptverzeichnis ausblenden:
# Aufruf ohne www: ^IhreDomain\.dd$ // Aufruf mit www: ^www\.IhreDomain\.dd$
RewriteCond %{HTTP_HOST} ^www\.IhreDomain\.dd$
#RewriteCond %{HTTP_HOST} m\.IhreDomain\.dd$ # falls mobile Version, dann Zeile davor mit [OR] verknüpfen
RewriteCond %{REQUEST_URI} !^\/IhrInhaltsProjekt\/
RewriteCond %{REQUEST_URI} !^\/IhrInhaltsProjekt-wAssets\/
RewriteCond %{REQUEST_URI} !^\/IhrInhaltsProjekt-wGlobal\/
RewriteCond %{REQUEST_URI} !^\/weblication\/
RewriteCond %{REQUEST_URI} !^\/favicon.ico
RewriteCond %{REQUEST_URI} !^\/robots.txt

RewriteRule ^(.*)$ /IhrInhaltsProjekt/$1 [L]

## !! Beachten Sie die Hinweise unten !!
  • 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 (Pfadangaben ggf. anpassen)!
  • Die o.g. Bedingungen ergänzen Sie um die Verzeichnisse, die auch entsprechend erfasst werden sollen (z.B. wenn mehrere Projekte innerhalb einer Installation ohne Angabe des Hauptverzeichnisses aufgerufen werden sollen).
Umsetzung über wMyProject-Funktionen
Ältere Umsetzung rein über pre.php

Um die Links in den generierten Seiten entsprechend umzuschreiben, können Sie ab Weblication® CMS Version 10.x mit aktueller BASE auf bereits vordefinierte Abfragen und Funktionen zurückgreifen.
Ab CMS-Version 011.002.143.000 ist die nachfolgend beschriebene Umsetzung auch direkt über die Maske der Projekteinstellungen des Projekt-/Sprach-Verzeichnisses möglich.

Die pre.php des BASE Projektes ist bereits im Standard mit den entsprechenden Funktionsaufrufen ausgestattet, die sich auf Funktionen beziehen, die in der wMyProject.php definiert sind:

  • wMyProject::executeAccessRules()
    Dieser Funktionsaufruf ist direkt nach dem Include der wMyProject.php gesetzt und dort entsprechend definiert. Über diese Funktion können Aufrufe bei Bedarf umgeleitet werden - z.B. Aufrufe mit Angabe des Projektverzeichnisses.
  • wMyProject::executeRewriteRules($preResult)
    Dieser Funktionsaufruf ist direkt nach dem Include der Software pre.php in Bezug zur $preResult Variablen gesetzt und ebenso in der wMyProject.php definiert. Über diese Funktion können Links innerhalb der Seite bei Bedarf umgeschrieben werden - z.B. Links mit Angabe des Projektverzeichnisses.

Die genaue Definition der Funktionen (PHP-Code) ist in diesem Artikel nicht angeführt, sondern entnehmen Sie bitte immer der aktuellsten BASE Projektbasis.

Durch Einsatz dieser Funktionen werden Links innerhalb der Seiten ohne das Hauptverzeichnis gesetzt. Die Ausgabe wird lediglich für nicht eingeloggte Benutzer umgeschrieben! Die Abfrage berücksichtigt zudem den Einsatz der Weblication® CMS Volltextsuche, des Newsletter-Modules und des Versionierungs-Modules (Versionenanzeige).

Beispiel: Auszug aus /IhrInhaltsProjekt-wGlobal/wGlobal/scripts/pre.php zum Umschreiben des Hauptverzeichnisses (Beispielpfade)

// ...
  // Hier wird das Weblication Framework eingebunden
  
include_once($_SERVER['DOCUMENT_ROOT'].'/weblication/grid.php');
  
  
// Projektspezifische Funktionen einbinden
  
include_once($_SERVER['DOCUMENT_ROOT'].'/IhrInhaltsProjekt-wGlobal/wGlobal/scripts/php/wMyProject.php');

  
// Leitet Aufrufe bei Bedarf um
  
wMyProject::executeAccessRules();

  
// ... (der Sourcecode der pre.php zwischen beiden Aufrufen ist hier im Beispiel nicht angeführt) ...

  // Hier wird das globale Steuerungsskript eingebunden
  
include($_SERVER['DOCUMENT_ROOT'].'/weblication/grid5/default/project/wGlobal/scripts/pre.php');

  
$preResult wMyProject::executeRewriteRules($preResult);
// ...
  • Die Funktionen der wMyProject.php greifen auf Einstellungen der Projekteinstellung des jeweiligen Inhaltsprojektes (z.B. /IhrInhaltsProjekt/weblication/project/wProject.php) zurück.
    xPath: /wProject/rewriteRules/@hideDirProject und /wProject/accessRules/@hostOnly
    Wenn @hideDirProject auf "1" gesetzt ist, wird die Funktion zum Ausblenden des Hauptverzeichnisses aktiviert.
    Wenn @hostOnly mit einem Wert (Domain) versehen ist, kann das Projekt für Seitenbesucher und Robots nur noch über die dort angegebene Domain aufgerufen werden. Dies ermöglicht die Umsetzung von Projekten über definierte Domains.
  • Inwiefern ein Hauptverzeichnis auch bei eingeloggten Benutzern ausgeblendet werden soll, entscheiden Sie individuell über die Abfrage in der wMyProject.php!
  • Übrigens:
    Soll auch die index.php Angabe in der URL nicht sichtbar sein, so brauchen Sie in einem Projekt auf aktueller BASE Projektbasis nichts weiter zu unternehmen, da dies bereits im Standard in der pre.php für Seitenbesucher und Robots so gesetzt ist ($preVars['removeAllIndexPhp'] = true;).
    siehe auch Artikel "SEO-Tipp: Statt /de/index.php nur /de/ anzeigen"

Um die Links in den generierten Seiten entsprechend umzuschreiben, filtern Sie dies über die pre.php Ihres Projektes. Somit werden Links innerhalb der Seiten ohne das Hauptverzeichnis gesetzt. Die Ausgabe wird lediglich für nicht eingeloggte Benutzer umgeschrieben! Die Abfrage berücksichtigt zudem den Einsatz der Weblication® CMS Volltextsuche, des Newsletter-Modules und des Versionierungs-Modules (Versionenanzeige). In der pre.php ist hierzu eine Abfrage vor der Transformation und eine nach Transformation erforderlich.

Wie im folgenden Quelltextbeispiel angeführt, setzen Sie am Anfang der pre.php direkt hinter die schon bestehende Zeile zum Include der /weblication/grid.php die if-Abfrage für das Redirect ein und passen diese auf Ihr Verzeichnis an.

Beispiel: Auszug aus /IhrGlobalesProjekt/wGlobal/scripts/pre.php zum Umschreiben des Hauptverzeichnisses (Beispielpfade)

// ...
  // Hier wird das Weblication Framework eingebunden
  
include_once($_SERVER['DOCUMENT_ROOT'].'/weblication/grid.php');
  
  
// Umleitung für Hauptverzeichnisaufrufe (Hauptverzeichnis "ausblenden"):
  // Das Projektverzeichnis kann somit nicht mehr per Direktaufruf erreicht werden (wird "ausgeblendet")
  // Beachten Sie, dass das Redirect in der obersten /index.php dann auch umgeschrieben werden muss (ohne Angabe Hauptverzeichnis)!
  
$dirToHide 'IhrInhaltsProjekt';
  if(!
wRequest::isSearchBot() && preg_match('/^\/'.$dirToHide.'\//'$_SERVER['REQUEST_URI']) && !preg_match('/wEditor\.php/'$_SERVER['REQUEST_URI']) && !preg_match('/diffTmp_/'$_SERVER['REQUEST_URI']) && !preg_match('/newsletter\/newsletters/'$_SERVER['REQUEST_URI']) && !preg_match('/documents\/drafts/'$_SERVER['REQUEST_URI'])){
    
$urlRedirect preg_replace('/^\/'.$dirToHide.'\//''/'$_SERVER['REQUEST_URI']);
    
header("Location: $urlRedirect"true301);
    exit;
    
// Umschreiben der Links der generierten Seiten erfolgt weiter unten (siehe: Hauptverzeichnis "ausblenden" - Links umschreiben)
  
}

  
// ... (der Sourcecode der pre.php zwischen beiden Aufrufen ist hier im Beispiel nicht angeführt) ...

  // Hier wird das globale Steuerungsskript eingebunden
  
include($_SERVER['DOCUMENT_ROOT'].'/weblication/grid5/default/project/wGlobal/scripts/pre.php');
  
  
// Hauptverzeichnis "ausblenden" - Links umschreiben
  
if(wUserCur::getName() == '' && !wRequest::isSearchBot()){
    
// Hauptverzeichnis aus Links rausnehmen:
    
$preResult preg_replace("/([\"'>])\/$dirToHide\//""$1/"$preResult);
    
// beim Einsatz der mobileAPP zusätzlich:
    // $preResult = preg_replace("/([wOpenUrl\(\'])\/$dirToHide\//", "$1/", $preResult);
    // Hauptverzeichnis aus Google-Sitemap (google-sitemap.php) rausnehmen:
    
if(stristr(wRequest::getPath(), 'google-sitemap')){
     
$preResult preg_replace("/\/$dirToHide\//""/"$preResult);
    }
  }
// ...
Inwiefern ein Hauptverzeichnis auch bei eingeloggten Benutzern ausgeblendet werden soll, entscheiden Sie individuell über die Abfrage in der pre.php!

Wichtige Hinweise

  • Passen Sie die Pfade an Ihr Projekt an!
  • GGf. müssen Sie Pfade im Projekt manuell anpassen, wie z.B. das Redirect im Kontaktformular auf die Dankeseite bzw. die "Gesendet von" URL für die Kontakt E-Mail oder auch die URL für die Bestätigung einer Newsletter-Anmeldung.
  • Der Server muss mod_rewrite unterstützen, was Sie bei Ihrem Provider erfragen können!
  • Sofern ein Direktaufruf mit Angabe des Hauptverzeichnisses generell für Seitenbesucher unterbunden werden soll, können Sie dies z.B. über PHP abfangen (siehe oben (Abfrage in pre.php))!
    Eine auch von Google empfohlene Möglichkeit, ist das Setzen des Canonical-Tags, siehe weiterführende Links! Damit Sie auch hier das Hauptverzeichnis rausnehmen können, filtern Sie dies z.B. über PHP.
  • Sofern eine URL ohne Dateiangabe immer mit einem Slash enden soll (empfohlen), können Sie dies ebenso über PHP oder mod_rewrite umschreiben (Trailing-Slash)!
  • Beim Einsatz der Klickanalyse muss das Ausblenden des Hauptverzeichnisses in älteren Projekten entsprechend in der wClickAnalyzer.php Datei berücksichtigt werden, damit die URL ($url) korrekt protokolliert und ausgelesen werden kann. In aktuellen BASE-Versionen wird diese Datei direkt über die Software mitgeliefert und und Sie müssen lediglich in der includes.global.php den zu ersetzenden Pfad angeben, z.B.:
    wClickAnalyzer.pathReplace  = '/IhrInhaltsProjekt';
  • Beim Einsatz von Analyse-Werkzeugen wie z.B. econda Site Monitor muß dies im Javascript der includes.global.php entsprechend zum $wDocumentPath individuell berücksichtigt werden.
  • Beim Einsatz des Werkzeuges Linkprüfung geben Sie die Pfade, ab denen geprüft werden soll, so an, wie Seitenbesucher die Seite aufrufen (also ohne Hauptverzeichnis).
  • Sofern Sie in der URL die index.php Angabe ausblenden wollen, finden Sie im Artikel "SEO-Tipp: Statt /de/index.php nur /de/ anzeigen" eine entsprechende Vorgehensweise!

Durch das Ausblenden des Hauptverzeichnisses kann es je nach Projekt und Umsetzung zu Störungen von Funktionen oder Werkzeugen in Weblication® kommen, weshalb der Einsatz auf eigene Verantwortung erfolgt!

Entwicklerbereich Weblication® CMS - © Scholl Communications AG