SEO: Aufruf eines Projektes über definierte Domains

Dieser Artikel beschreibt, wie Sie den Aufruf eines Projektes nur über die dafür vorgesehene Projekt-Domain ermöglichen.

Beim Einsatz mehrerer Domains zur gleichen Internet-Präsenz stellt sich die Frage, wie z.B. Suchmaschinen auf diesen sogenannten doppelten Inhalt (Stichwort: "Duplicate Content") reagieren. Aber nicht nur aus Sicht der Suchmaschinenoptimierung (Stichwort: "SEO") kann es ratsam sein, ein Projekt nur über eine konkrete Domain aufrufbar zu machen. Bei Installationen, die mehrere Projekte bzw. Sprachen lizenziert haben (z.B. eine Firmengruppe mit Niederlassungen), ist es ggf. auch erwünscht bzw. erforderlich, daß die Projekte nur über die jeweils gewünschte Domain erreichbar sind.

Änderung Februar 2016:
Ab Weblication® CMS Version 10.x bietet eine aktuelle BASE bereits im Standard vordefinierte Abfragen und Funktionen, auf die Sie zurückgreifen können! Diese Standardumsetzung setzt auf Lösung 2 dieses Artikels auf (siehe unten).

Hierzu nachfolgend ein Beispiel, wie über Umschreibungsregeln (Rewrite-Rules) der Aufruf eines Projektes auf eine konkrete Domain weitergeleitet wird. Durch den Einsatz einer .htaccess Datei und dem Apache-Modul "mod_rewrite" können Sie - wenn der Provider dies für den Apache-Webserver erlaubt - eine permanente Weiterleitung für ein Projekt schalten. Alternativ - und besser in Hinblick auf die Pflegemöglichkeit - ist die Umsetzung rein über PHP, was in Lösung 2 aufgezeigt wird.

Fallbeispiel:

Es besteht eine Weblication® Installation mit zwei lizenzierten Projekten, die jeweils über eine zusätzliche Sprache verfügen:

  • /projekt
  • /projekt-en
  • /projekt2
  • /projekt2-en

Auf diese Projekte / Präsenzen sind folgende Domains aufgeschaltet (gleiche DOCUMENT_ROOT):

  • projekt-domain.de
  • projekt-domain.com
  • projekt2-domain.de
  • projekt2-domain.com

Die einzelnen Projekt bzw. Sprachprojekte (Sprachen) sollen für Seitenbesucher nur über die zugehörige Domain erreichbar sein, also z.B. "projekt-domain.de/projekt" (nicht "projekt-domain.de/projekt2") und "projekt-domain.com/projekt-en", "projekt2-domain.de/projekt2", etc.

Wenn die Lizenz alle Domains über die Lizenzdatei abdeckt, kann dies über Lösung 1 umgesetzt werden. Ist nur eine Domain lizenziert, sollte Lösung 2 verwendet werden.

Lösung 1: Umsetzung über .htaccess

Das folgende Beispiel nutzt hierfür über eine .htaccess Datei im Projektverzeichnis eine Rewrite-Rule. Sofern das Projekt nicht über die Domain "projekt-domain.de" aufgerufen wird, wird die Anfrage auf diese Domain permanent umgeleitet.
Beim Aufruf von"projekt-domain.com/projekt-de/index.php" wird somit weitergeleitet nach "projekt-domain.de/projekt-de/index.php".

Beispiel: Auszug aus einer .htaccess des Projektes /projekt

RewriteEngine on
RewriteCond %{HTTP_HOST} !^.*projekt-domain\.de$ [NC]
#RewriteCond %{HTTP_USER_AGENT} !^.*wSearchBot.* [NC] # Suche läuft als UserAgent: Weblication-Grid/5.0 (wSearchBot)
RewriteRule ^(.*)$ http://www.projekt-domain.de/projekt-de/$1 [R=301,L]

Eine zweite Variante wäre, daß per .htaccess auf die Document Root der Ursprungsdomain leitet, wenn das Unterverzeichnis eines anderen Projektes (nicht für die Domain bestimmt) aufgerufen wird. Dort könnte z.B. eine /index.php eine entsprechende Weiterleitung vornehmen o.ä.

Beispiel: Auszug aus einer .htaccess des Projektes /projekt mit Verweis auf die DocRoot

RewriteEngine on
RewriteCond %{HTTP_HOST} !^.*projekt-domain\.de$ [NC]
RewriteRule ^(.*)$http://%{HTTP_HOST}/ [R=301,L]
  • 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)!

Lösung 2: Umsetzung über PHP (pre.php)

Umsetzung über wMyProject-Funktionen
Ältere Umsetzung rein über pre.php

Um Projektaufrufe über nicht erwünschte Domains 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. Sofern dies in einem älteren Projekt noch nicht vorhanden ist, muss dies manuell nachgezogen werden.

  • 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 des Projektverzeichnisses nur über definierte Domain.

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

Beispiel: Auszug aus /[IHR-LAYOUT-PROJEKT]/wGlobal/scripts/pre.php

// ...
// 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();

// ...
// ...
  • Die Funktionen der wMyProject.php greifen auf Einstellungen der Projekteinstellung des jeweiligen Inhaltsprojektes (z.B. /[IHR-INHALTS-PROJEKT]) zurück.
    xPath: /wProject/accessRules/@hostOnly
    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.
  • Ü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"

Eine alternative Umsetzung ist die Abfrage über PHP. Setzen Sie hierzu in der pre.php des globalen Projektes nach dem Include der grid.php die Abfrage auf das entsprechende Projekt und die erlaubte Domain.

Diese Umsetzungsvariante ermöglicht zusätzlich die Pflege des "anderen" Projektes über die lizenzierte Domain.

Beispiel: Auszug aus /[IHR-LAYOUT-PROJEKT]/wGlobal/scripts/pre.php

// ...
// Hier wird das Weblication Framework eingebunden
include_once($_SERVER['DOCUMENT_ROOT'].'/weblication/grid.php');
// Projektaufruf nur ueber definierte Domain(s) und Weblication Volltextsuche erlauben
// muss vor der Ausgabe der Seiten gesetzt werden:
if(wUserCur::getName() == ''){
// Abfrage zum /projekt Projekt, um den Aufruf nur ueber die DE-Domain (mit www.) und die Weblication Suche zu erlauben
if(wProjectCur::getPath() == '/projekt' && !preg_match("/^www\.projekt-domain\.de/", $_SERVER['HTTP_HOST']) && wRequest::isSearchBot() === FALSE && !preg_match('/newsletter\/newsletters/', $_SERVER['REQUEST_URI'])){
header("HTTP/1.1 301 Moved Permanently");header("Location:http://www.projekt-domain.de".$_SERVER['REQUEST_URI']);
}
// Abfrage zum /projekt-en Projekt, um den Aufruf nur ueber die EN-Domain (mit www.) und die Weblication Suche zu erlauben
elseif(wProjectCur::getPath() == '/projekt-en' && !preg_match("/^www\.projekt-domain\.com/", $_SERVER['HTTP_HOST']) && wRequest::isSearchBot() === FALSE && !preg_match('/newsletter\/newsletters/', $_SERVER['REQUEST_URI'])){
header("HTTP/1.1 301 Moved Permanently");header("Location:http://www.projekt-domain.com".$_SERVER['REQUEST_URI']);
}
else{
//header("HTTP/1.1 301 Moved Permanently");header("location: http://".$_SERVER['HTTP_HOST'].'/index.php');
}
}
// ...
// ...

Hinweise

  • Wie Sie die Startseite (/index.php) der Domains definieren, finden Sie im Artikel unten (weiterführende Links) beschrieben.
  • Beim Einsatz einer Sitemap für Suchmaschine (z.B. Google Sitemap) passen Sie bei Bedarf auch dort für eine Generierung und Auflistung der Sprachversionen (Parameter "Verknüpfte Sprachversionen auch auflisten" aktiviert) die Host- und URL-Ausgabe an.