SEO-Tipp: Hauptverzeichnis ausblenden

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). Arbeiten Sie in solchen Fällen am besten mit sehr eindeutig benannten Projektverzeichnisnamen, welche es sonst in Unterverzeichnissen oder anderen Projekten nicht als Verzeichnisname gibt (z.B. /projekt1-46275291-de/).

Um das Hauptverzeichnis auszublenden, müssen Sie an zwei Stellen eingreifen. Dieser Beitrag zeigt, wie das Projektverzeichnis mit dem Verzeichnisnamen /[IHR-INHALTS-PROJEKT] ausgeblendet wird.

Wichtige Hinweise vorab:

  • 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 Setzen von Umleitungsregeln über "RewriteEngine on" auch in Unterverzeichnissen hebt ggf. Regeln in übergeordneten Verzeichnisses auf, weshalb diese erneut mit entsprechenden Pfadangaben gesetzt werden müssen. Im speziellen gilt das auch dafür, wenn auszublendende Verzeichnisnamen in Unterverzeichnissen oder anderen Projekten auch vorkommen, also gleich benannt sind! Dies müssen Sie über eigene Regeln berücksichtigen oder auf gleiche Verzeichnisnamen verzichten!
  • Der Einsatz von registrierten Benutzern (z.B. zur personalisierten Ausgabe) in einem Projekt mit ausgeblendetem Hauptverzeichnis ist nicht möglich!
  • Wenn das Global-/Layout-Projekt den Pfad /wGlobal benannt hat, funktionieren z.B. Megadropdown-Navigationsseiten o.ä. beim Ausblenden nicht, wenn diese im Inhaltsprojekt unter z.B. /de/wGlobal/content/.... abliegen! Entweder sollten Sie vorneweg das Global-/Layout-Projekt anders benennen (z.B. /default-wGlobal) oder solche Seiten dann ausserhalb von /xxx/wGlobal/... ablegen.

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\.tld) 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}/[IHR-INHALTS-PROJEKT]%{REQUEST_URI} -d
RewriteRule ^(.*)$ /$1/ [L,R=301]

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

# Hauptverzeichnis ausblenden:
# Aufruf ohne www: ^IhreDomain\.tld$ // Aufruf mit www: ^www\.IhreDomain\.tld$
RewriteCond %{HTTP_HOST} ^www\.IhreDomain\.tld$
RewriteCond %{REQUEST_URI} !^\/[IHR-INHALTS-PROJEKT]\/
RewriteCond %{REQUEST_URI} !^\/[IHR-INHALTS-PROJEKT]-wAssets\/
RewriteCond %{REQUEST_URI} !^\/[IHR-INHALTS-PROJEKT]-wGlobal\/
RewriteCond %{REQUEST_URI} !^\/weblication\/
RewriteCond %{REQUEST_URI} !^\/cloud\/
RewriteCond %{REQUEST_URI} !^\/favicon\.ico
RewriteCond %{REQUEST_URI} !^\/robots\.txt

RewriteRule ^(.*)$ /[IHR-INHALTS-PROJEKT]/$1 [L]

## !! Beachten Sie die Hinweise unten !!
  • 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).

Schritt 2: Anzuzeigende Links umschreiben

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 /[IHR-INHALTS-PROJEKT]-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'].'/[IHR-INHALTS-PROJEKT]-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. /[IHR-INHALTS-PROJEKT]/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"
  • In Formularen müssen Sie ggf. bei Verwendung von $this->url dafür sorgen, dass das ausgeblendete Hauptverzeichnis entsprechend ersetzt wird, speziell was z.B. Registrierungs- bzw. Opt-In Links in E-Mails betrifft (z.B. Benutzerregistrierung).

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 /[IHR-LAYOUT-PROJEKT]/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", true, 301);
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. Redirects allgemein bzw. ein 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. Gleiches gilt für den Einsatz der Suggest-Suche, wozu über CSS mit -w-add-data:project-search=/[IHR-INHALTS-PROJEKT] der Projektpfad angegeben werden kann.
  • 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.
  • Ferner ist es beim Ausblenden des Hauptverzeichnisses in Sprachprojekten so, daß dies grundsätzlich nur dann funktioniert, wenn entweder die Pfade unterhalb der Sprachverzeichnisse unterschiedlich benannt sind (z.B. /de/unternehmen/index.php und /en/company/index.php), oder für die Sprachen unterschiedliche (Sub-) Domains verwendet werden.
  • 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!