Domainumleitungen für Joomla: Redirect veralteter URLs, z.B. bei Relaunch der Website

Eine häufige Problemstellung: Bei der Umgestaltung einer vorhandenen Internetseite oder gar einem kompletten Relaunch ändern sich Inhalte und Seitenstruktur.

Verlinkungen von externen Seiten laufen somit ins Leere. Ebenso erhalten bereits von Suchmaschinen indizierte Seiten nun einen 404-Fehlercode (Page not found), während die neuen Seiten gleichen oder ähnlichen Inhalts erst neu indiziert werden und PageRank aufbauen müssen.

Domainumleitungen und eigene 404 Fehlerseite für JoomlaAls Lösung bietet Joomla 2.5 hier eine neue Funktion an, mit der sich URLs direkt im Backend umleiten lassen. In unserer praktischen Arbeit funktionierte diese Funktion jedoch unzureichend. Und das Umleiten vieler Domains mit der Joomla-eigenen Funktion verursacht einen erheblichen Arbeitsaufwand.

Daher entwickelten unsere PHP-Programmierer in Frankfurt eine eigene skriptgesteuerte Domain-Umleitung für Joomla, mit der Sie veraltete ULRs einfach und zuverlässig auf die entsprechenden URLs der neuen Internetseite umleiten können.

Das PHP-Skript „error.php“ erkennt 404-Fehler beim Aufruf und erzwingt eine Umleitung auf den neuen Domain-Pfad der entsprechenden Inhaltsseite (Permanent Redirect – Status Code 301). Sind die aufgerufenen Inhalte komplett verschwunden, lässt sich wahlweise auch eine eigene 404-Fehlerseite aufrufen. Beim Umleiten auf neue ULRs wird hierbei automatisch ein Status-Code 301 gesendet, bei der Anzeige einer Fehlerseite ein Status-Code 404.

Domainumleitungen und Fehlerseite einrichten

 

Domainumleitung in errorlist.txt eintragen

Die Domainumleitung besteht aus insgesamt zwei Dateien, dem PHP-Skript error.php und der Konfigurationsdatei errorlist.txt, in welcher die gewünschten Domainumleitungen angegeben werden. Beide Dateien werden direkt im Template-Ordner der Website abgelegt.

PHP-Skript zur Domainumleitung, 404-Fehlerseiten für Joomla
error.php und errorlist.txt im Template-Verzeichnis der Website

Vor dem Datei-Upload werden die umzuleitenden URLs in die Konfigurationsdatei (errorlist.txt) eingetragen in der Form:

/alte/url.html : /neue/url.html

(also ohne den eigentlich Domain-Stamm)

Beispiel:

Joomla - Domainuleitungen über errorlist-Konfigurationsdatei
Domainumleitungen eintragen

Nachdem dies erledigt ist, prüfen Sie die Domainumleitung, indem Sie einzelne veraltete URLs direkt in den Browser eingeben. Sie sollten nun automatisch auf die neuen URLs weitergeleitet werden.

Um nun noch eine eigene Fehlerseite anzulegen, gehen Sie wie folgt vor:

1. Legen Sie eine neue Fehlerseite als Beitrag in Joomla an:

404 - Fehlerseite als Joomla-Beitrag anlegen
404 – Fehlerseite als Joomla-Beitrag anlegen

Tipp: Im Content dieser Seite können Sie z.B. einen Link zur Startseite und zu wichtigen Unterseiten integrieren (z.B. Hier gelangen Sie direkt zu unseren Angeboten: [Link Angebot 1], [Link Angebot 2] etc.).

 

2. Legen Sie nun ein neues verstecktes Menü an, um die Seite mit einer sprechenden ULR aufrufen zu können.

Verstecktes Menü in Joomla anlegen - SEO
Verstecktes Menü in Joomla anlegen

 

3. In diesem Menü erzeugen Sie nun einen neuen Menüpunkt, den Sie mit dem Beitrag verlinken.

Joomla-Menüpunkt im versteckten Menü anlegen
Joomla-Menüpunkt im versteckten Menü anlegen

 

4. Geben Sie in Zeile 25 der Datei error.php den Pfad zur erstellten Fehlerseite an. Dies ist i.d.R. der „Alias“, der für den neuen Menüpunkt erzeugt wurde.

Domainpfad für 404-Seite im PHP-Skript eintragen
Domainpfad für 404-Seite im PHP-Skript eintragen

 

Tipp: Veraltete Domains finden

Zum Schluss noch ein paar Tipps, um veraltete Domains zu finden:

  1. Bevor Sie die neue Seite installieren, klicken Sie Ihre alte Seite durch und notieren Sie sich die URLs der Unterseiten.
  2. Geben Sie auf Google ein: site:IhreDomain und notieren Sie sich, welche URLs Ihres alten Internetauftrittes in Google indiziert sind.
  3. Sofern Ihre neue Website schon online ist, installieren Sie die Google-Webmastertools für Ihre Website und schauen Sie hier unter „Diagnose“ > „Crawling Fehler“ für welche URLs ein Fehler 404 vorliegt. Wenn Sie Webmastertools für die Seite erst neu installieren, müssen Sie unter Umständen ein paar Tage warten, bis hier die ersten Ergebnisse angezeigt werden!
  4. Sofern Sie SEO-Tools wie Xovi oder Sistrix einsetzen, finden Sie auch hier meist eine Übersicht von Backlinks zu Ihrer Seite, die Sie entsprechend auswerten können.

 

Download

Das komplette PHP-Skript mit Muster-Datei für die errorlist.txt können Sie hier herunterladen und kostenfrei einsetzen:

Download PHP-Skript – Domainumleitung und eigene 404-Seite für Joomla

Anleitung (PDF) – Domainumleitung und eigene 404-Seite für Joomla

 

Wir bedanken uns

Ihnen gefällt diese Lösung zur Domainumleitung mit Joomla?

Dann freuen wir uns über einen kurzen Kommentar. Und vielleicht „schenken“ Sie uns auch einen Backlink von Ihrer Homepage, z.B. indem Sie den folgenden Code in Ihre Website einfügen:

 

PS: Senden Sie den Link zu dieser Seite auch an Geschäftspartner, Freunde und Bekannte, so dass diese ebenfalls davon profitieren können!

 

Zurück zur Übersicht

32 Replies to “Domainumleitungen für Joomla: Redirect veralteter URLs, z.B. bei Relaunch der Website”

  1. Sieht mir nach einer guten Lösung aus, ich war wohl etwas übereifrig bei der Neuralisierung unserer Homepage (alles um Wolle und Garn) und habe viele alte url’s mit /shop.html?… . Die Umleitungskomponente funktioniert aber mit .html nicht.
    Noch eine kleine Frage: Verwende momentan noch die error.php des beez5 templates, wie müsste diese aussehen wenn ich die Vorteile von beiden nutzen möchte.

    Über eine Antwort würde ich mich sehr freuen – gäbe dann natürlich auch einen Backlink 😉

    Bis anhinn eine schöne Woche!

    1. Danke für die Infos.

      Die error.php vergleich derzeit nur den Skriptnamen/“Dateinamen“, nicht aber URL-Parameter. Aber danke für den Hinweis, das wäre sicherlich eine sinnvolle Ergänzung, die wir bei einem unserer nächsten Updates berücksichtigen werden.

      Die error.php von beez5 müsste man händisch mit dem Code von unserer error.php ergänzen bzw. „mergen“.

      Dies werden wir bei Gelegenheit ebenfalls ansehen. 😉

  2. na endlich kann mir mal jemand sagen, wie ich die alten URls aufindig machen kann. Der Tipp am Ende ist die Lösung. Vielen Dank hierfür. Ab in die Fav-Liste mit dem Artikel !!!

  3. Gute Arbeit! Ich bin begeistert!!!

    Bei einem Aufruf der Art „index.php/seite.html“ funktioniert die Weiterleitung aber leider nicht, und es wird ein PHP-Error ausgegeben.

    Zeile 53 sollte eine zusätzliche Prüfung bekommen, sonst werden teilweise diese PHP-Fehler ausgegeben.

    if($cRedirOrig!=“*“ && isset($_SERVER[„REDIRECT_URL“]) && $_SERVER[„REDIRECT_URL“]==$cRedirOrig) {

  4. Normalerweise funktionieren Weiterleitungen der Art:
    „/cms/alte_seite.html“ -> „/neue_seite“

    Das folgende Konstrukt mit „index.php“ funktioniert jedoch nicht:
    „/cms/index.php/alte_seite.html“ -> „/neue_seite“

    Damit dies auch funktioniert, muss das Originalskript angepasst werden:
    ———————————————————————–
    Statt $_SERVER[„REDIRECT_URL“] sollte man $_SERVER[„REQUEST_URI“] verwenden.
    Einfach im gesamten Quelltext austauschen.

  5. Ist es mit dieser Methode auch möglich, einen alten RSS-Feed auf einen neuen RSS-Feed umzuleiten? Mein erster Versuch damit war nicht erfolgreich.

    1. RSS-Feeds schlagen offensichtlich nicht in der Template-eigenen error.php auf – daher ist mir aktuell kein schneller Weg bekannt, den Redirect vorzunehmen.

      Denkbar wäre natürlich einen Redirect via .htaccess-Datei, also so etwas in der Art:

      RewriteRule ^feed-alt\.html$ feed-neu.html [R=301,L]

      1. Das habe ich jetzt mal ausprobiert und im Abschnitt „Custom redirects“ diese Zeile eingegeben:

        RewriteRule ^/de/component/ninjarsssyndicator/?feed_id=1&format=raw$ /index.php/de/?format=feed&type=rss [R=301,L]

        Das brachte allerdings noch keinen Erfolg.

  6. Es steht beide Male als „&“.

    Inzwischen habe ich festgestellt, dass die Umleitung doch zumindest eingeschränkt funktioniert. Das heißt, in meinem RSS-Programm wird eine RSS-Nachricht mit eintägiger Verspätung angezeigt. Gebe ich die Feed-Adresse im Browser ein, lande ich allerdings auf meiner neu angelegten Fehlerseite.

  7. Hallo,

    erst einmal freue ich mich euren blog gefunden zu haben. Da sich hier offensichtlich mit absolut praxisnahen Themen beschäftigt wird.
    Mir ist immer nicht ganz klar, warum in joomla tolle Funktionen implementiert werden die dann leider überhaupt nicht konsequent umgesetzt werden. Manchmal sehr zäh alles.
    Umso mehr freue ich mich hier vielleicht eine Lösung gefunden zu haben – zumindest für dieses Problem.

    Nach einem kompletten Relaunch einer unserer domains (http://www.1espresso.de), mussten wir feststellen, dass sich nicht alle alten URL`s einfangen lassen.
    sowas z.B.
    index.php?option=com_content&task=category&sectionid=4&id=13&Itemid=48

    geht das mit eurem Script?
    Würde mich über eine Antwort freuen.

    beste Grüße und weiterhin viel Erfolg

    Marcel Böttcher

  8. funktioniert leider nicht. Was mache ich falsch?

    ich bekomme nur folgende Fehlermeldung:

    Warning: implode() [function.implode]: Invalid arguments passed in /homepages/40/#####/htdocs/djquickwilli/templates/djquickwilli_v02/error.php on line 66
    Fehler 404 – Seite nicht gefunden.

    Die Fehlerseite und der Template-Name ist in der error.php geändert.

    1. Grund könnte sein, dass auf deinem Server die Variable

      $_SERVER

      nicht gesetzt ist. Du kannst daher in Zeile 53 und Zeile 65 mal versuchen, $_SERVER durch $_ENV zu ersetzen.

      Du kannst gerne mal die Ausgabe von

      print_r($_SERVER)

      und

      print_r($_ENV)

      posten …

      1. Der ausgegebene Fehler bleibt gleich…
        die Variablen $_SERVER und $_ENV habe ich mal ausgegeben.

        Ist jeweils reichlich Text mit diversen Serverpfaden bei 1und1 usw. Ich bin nicht sicher, ob ich das posten sollte… ;o)

        Jedenfalls sehen die Ausgaben inhaltlich gleich aus, nur dass SERVER ein paar zusätzliche Felder enthält.

  9. Hallo Sebastian, ich bin nach einigem Suchen auf eure Lösungsmöglichkeit gestoßen. Allerdings habe ich die gleichen Probleme wie Christian.
    ————–
    Warning: implode() [function.implode]: Invalid arguments passed in /…/…/…/templates/…/error.php on line 66
    Fehler 404 – Seite nicht gefunden.
    ————–
    Seid Ihr schon zu einer Lösung gekommen?

    1. Hallo Hermann,

      Zeile 66 versucht, per „file()“ den Inhalt der Fehlerseite zu laden. Wenn auf eurem Server die PHP-Konfig für „allow_url_fopen“ auf „off“ steht, wird die Fehlerseite nicht geladen. Dadurch ist das Array leer und „implode()“ wirft in Zeile 66 den genannten Fehler auf.

      Lösung:

      a) in der php.ini allow_url_fopen auf „on“ stellen (sofern aus sicherheitstechnischen Gründen gewollt/erlaubt!)
      b) Zeile 66 unabhängig davon wie folgt ändern:

      $cRedirErrorContent=@implode(„“,@file($cRedirErrorUrl));

      Dann wird auf jeden Fall der Fehler unterdrückt.

  10. Hallo Sebastian,
    das funktioniert nun schon mal super – vielen Dank.
    Achtung! Die Anführungszeichen aus
    …plode(“”,@fil…
    müssen noch nach dem coppy-paste korrigiert werden.

    Leider habe ich auch noch ein weiteres Problem.
    Die errorlist.txt Datei befindet sich korrekt ausgefüllt

    /index.php?id=78 : /beispielseite.html

    im entsprechenden Template Ordner und wird auch vom Script erkannt.
    Bei Eingabe der Browseradresse
    http://www.meinedomain.com/index.php?id=78
    werde ich allerdings auf die 404-seite-nicht-gefunden Seite geleitet.
    Eine print Ausgabe nach der Zeile 56 bleibt leer. Folglich wird keine Alternativadresse wie /beispielseite.html gefunden.
    Könnt ihr mir da eventuell auch nochmal weiterhelfen?

  11. Hallo Herr Mohila,
    vielen Dank für Ihre Lösung. Mir ist die realisierung Lösung der Umleitung jedoch noch nicht gelungen. Die Situation: Als eigene Fehlerseite habe ich die Sitemap zur Webseite erstellt. Die Seite wird korrekt aufgerufen, die Umleitung auf diese Seite – bei Eingabe einer nicht vorhandenen URL funktioniert jedoch nicht. Bitte um Hilfe, wie die Umleitung aller Fehlermeldungen auf die Sitemap-Seite funktionieren könnte.

  12. Hallo liebes Team,

    mit Freude bin ich auf eure Lösung gestoßen doch leider stelle ich mich entweder zu blöd an oder mache etwas falsch.

    Ich habe im Templateordner die beiden Dateien sowie angegeben eingetragen, was auf Anhieb erstmal gar nicht funktioniert hat. Nachdem ich eure Dateien mit der im Ordner vorhandenen error.php kombiniert habe erfolgt auf alle Fälle schon mal eine Weiterleitung auf die Startseite aber leider nicht von den alten Beiträgen auf die neuen.

    Ich würde mich freuen wenn ihr mir weiterhelfen könntet da meine Programmierkenntnisse sehr beschränkt sind und ich aber die Lösung bisher am besten finde…

    Ich danke euch schon einmal im Voraus und schicke euch bei Bedarf gerne die Dateien zu…

    Ganz liebe Grüße

    Mario

  13. Ich habe ein sehr merkwürdiges Problem und ich kann den Fehler nicht finden. Joomla 3.2.3

    Ich habe die Joomla-Standard error.php Seite mit Eurer ersetzt.

    Fast alles funktioniert, nu wenn man ein falsches Passwort, Benutzer oder gar nichts einträgt und auf Anmelden geht kommt….

    Warning: implode(): Invalid arguments passed in /var/www/customers/webs/ka/ka2/templates/it_blackwhite2/error.php on line 66 Fehler 404 – Seite nicht gefunden.

    Anstatt der Detaillierten Warnmeldungen die auf der Offline_seite eingeblendet werden: Benutzer unbekannt etc.

    Testweise habe ich Eure error.php Datei in noch einer jungfreulichen Joomla Seite benutzt, und hier funktioniert alles einwandfrei – die Fehlermeldungen werden auf der Offline-Seite angezeigt.

    Darauf hin habe ich Tipp in einer der Kommentare geändert:

    $cRedirErrorContent=@implode(“”,@file($cRedirErrorUrl));

    Auf meiner eigentlichen Seite kommt nun auf einer Extraseite:

    Fehler 404 – Seite nicht gefunden.

    Was läuft da falsch? Wo muss ich suchen? Was muss ich ändern?

  14. Wie Kann ich Weiterleitung 301 das ich bei der Seite zwei URLs angeben kann und es nicht problematisch ist wenn die erste auf die zweite weiterleitet

  15. Hallo,

    leider funktioniert bei mir die custom Fehlerseite nicht. Ich habe in der error.php folgendes angegeben:

    $cTemplatePathOverride=“ws_comfort“;
    $cRedirError=“/404″;

    Aber der redirect zur Fehlerseite funktioniert nicht obwohl die Fehlerseite geht. Jedoch normale redirects über die errorlist funktionieren.

    Beispiel: /fg

    Kann mir jemand sagen warum es nicht funktioniert?

    Danke Vielmals!

    Grüsse
    Max

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Spamschutz - bitte kurz noch ausrechnen: *