301 Redirects sind wichtig. Je komplexer Webseiten werden und desto häufiger neue Inhalte produziert werden, desto mehr steigert sich auch der Einsatz von Weiterleitungen. In diesem Artikel geht es um die typischen 301 Redirects die SEOs benötigen und darum, was mit Mod_Rewrite sonst nützliches machbar ist.
Wir Suchmaschinenoptimierer glauben an die Dauerhaftigkeit von URLs. Diese sollten sich am besten niemals ändern, hängt an ihnen doch unsere geliebte Linkpower und allerlei soziale Signale. Ab und an lässt es sich jedoch nicht vermeiden, dass sich eine URL ändert. Dann versuchen wir diese mit einem 301 Redirect suchmaschinenfreundlich umzuleiten. Der clevere SEO nutzt dafür Mod_Rewrite. In diesem Artikel habe ich die gebräuchlichsten Mod_Rewrite Snippets aufgeschrieben, die ich so nutze.
Inhaltsverzeichnis
- Grundlagen
- Mod_Rewrite und Mod_Alias
- Eine Domain umziehen
- Alle Unterseiten der alten Domain auf die Startseite der neuen Domain
- Doppelte Inhalte mit und ohne www vermeiden
- Datum aus URLs entfernen
- Eine URL ändern
- Eine Domain auf eine andere weiterleiten und das Verzeichnis dahinter beibehalten
- Alle Verzeichnisse einer Domain auf eine andere Domain umleiten
- Ordner in der URL umschreiben
- Pagespeed erhöhen
Grundlagen
Wenn du Mod_Rewrite benutzen möchtest, dann muss es dein Webserver unterstützen. Heutzutage ist das fast überall Standard bei Hosting-Paketen und Servern, die auch PHP bereitstellen. Sollte irgendetwas nicht funktionieren, dann einfach den Hoster fragen. Mod_Rewrite wird normalerweise über eine Datei namens .htaccess gesteuert, die sich im Seiten-Rootverzeichnis und/oder auch in Unterverzeichnissen befinden kann. Beachte den führenden Punkt im Dateinamen. Dieser ist wichtig. Damit wird die Datei jedoch in einigen FTP-Programmen nicht angezeigt. Suche nach einer Option „Versteckte Dateien anzeigen“ oder „Dateien mit Punkt anzeigen“. Sollte die Datei fehlen, leg sie einfach leer an. Solltest du aktuelle Redaktionssysteme einsetzen, die sprechende URLs verwenden, dann geh davon aus, dass die htaccess-Datei schon existiert. Zum Starten muss Mod_Rewrite in der Datei aktiviert werden. Das machst du mit folgendem Code:
RewriteEngine On
Zur Sicherheit lege ich danach immer noch das Verzeichnis fest, auf welches sich die Regeln beziehen sollen:
RewriteBase /
Liegen die URLs, die du umleiten willst, in einem Unterverzeichnis, ist RewriteBase entsprechend anzupassen.
Mod_Rewrite und Mod_Alias
Der Apache-Webserver bringt nicht nur das Rewrite-Modul mit sich, sondern auch das Alias-Modul. Dieses enthält zwei sehr hilfreiche Werkzeuge namens Redirect und RedirectMatch. Ich nutze diese auch gern, da die Syntax einfacher ist, und finde deshalb, sie passen gut in diesen Artikel.
Eine Domain umziehen
Es passiert immer mal wieder, dass eine ganze Domain umziehen muss. Dann sollten möglichst alle Inhalte einfach auf der neuen Domain erreichbar sein. Mit den folgenden Zeilen ist das möglich:
RewriteCond %{HTTP_HOST} ^domain.de [NC,OR]
RewriteCond %{HTTP_HOST} ^www.domain.de [NC]
RewriteRule ^(.*)$ http://www.neue-domain.de/$1 [L,R=301,NC]
Alles was auf domain.de erreichbar war, ist danach unter neue-domain.de erreichbar.
Alle Unterseiten der alten Domain auf die Startseite der neuen Domain
RewriteEngine On
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://www.domain.de/ [L,R=301]
Doppelte Inhalte mit und ohne www vermeiden
Der gängigste Fall ist wohl der folgende: Eine Domain ist mit und ohne www erreichbar und bildet damit eine Gefahrenquelle für die Entstehung doppelter Inhalte bei Google. Mit einem Zweizeiler lässt sich das sehr einfach lösen:
RewriteCond %{HTTP_HOST} !^www\.domain\.de$ [NC]
RewriteRule ^(.*)$ http://www.domain.de/$1 [R=301,L]
Wenn die Domain ohne www-Standard sein soll, dann muss der Code so aussehen:
RewriteCond %{HTTP_HOST} !^domain\.de$ [NC]
RewriteRule ^(.*)$ http://domain.de/$1 [R=301,L]
Ob mit oder ohne www ist eine ästhetische Frage. Das www ist ein Kropf aus vergangenen Internet-Tagen. Da sich die meisten Menschen jedoch an das www gewöhnt haben, empfehlen wir, die Domain immer mit www.domain.de als Standarddomain zu nutzen.
Datum aus URLs entfernen
Das CMS WordPress hatte lange Zeit als quasi Standard-URL eine Variante mit Jahr, Monat und Tag in den URLs. Die URLs sehen dann so aus: http://www.domain.de/2014/03/23/beitragstitel/. Wenn du damit gestartet bist dann willst du diese URLs vielleicht irgendwann umstellen. Mit der folgenden Codezeile geht das ganz einfach:
RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ http://www.domain.de/$4
Eine URL ändern
Du möchtest http://www.domain.de/eine-url/ zu http://www.domain.de/eine-neue-url/ mit einem Redirect weiterleiten, damit Google erkennt, dass die Seite umgezogen ist? Das lässt sich mit einer Zeile lösen:
RedirectPermanent /eine-url/ http://www.domain.de/eine-neue-url/
Diese Regel funktioniert sehr gut für eine einzelne URL.
Eine Domain auf eine andere weiterleiten und das Verzeichnis dahinter beibehalten
Hier geht es darum, http://www.domain.de/verzeichnis/ auf http://www.domain2.de/verzeichnis/ weiterzuleiten. Also alles hinter .de/ beizubehalten und weiterzuleiten. Das ist relativ einfach:
RedirectMatch permanent ^/verzeichnis/ http://www.domain2.de/verzeichnis/
Alle Verzeichnisse einer Domain auf eine andere Domain umleiten
Alle Verzeichnisse auf einer Domain so wie http://www.domain.de/verzeichnis1/ oder http://www.domain.de/verzeichnis2/ sollen auf eine neue Domain http://www.domain2.de/ umgeleitet werden.
RewriteRule ^(.*)$ http://www.DOMAIN2.de/index.html [L,R=301]
Ordner in der URL umschreiben
Auf einer Domain soll ein Ordner geändert werden. Also http://www.domain.de/verzeichnis/datei.html soll zu http://www.domain.de/anderes-verzeichnis/datei.html werden. Das geht mit folgender Zeile:
RewriteRule ^verzeichnis/(.*)$ /anderes-verzeichnis/$1 [R=301,L]
Pagespeed erhöhen
Die htaccess-Datei kannst du nutzen, um die Geschwindigkeit deiner Seite zu verbessern. Schnellere Seiten führen zu zufriedeneren Besuchern. Im Folgenden zeige ich ein paar Codeschnipsel, mit denen sich die Komprimierung der übertragenen Seiten sowie das Browsercaching für statische Seiten aktivieren lassen. Nicht jeder Server unterstützt diese Einstellungen. Du solltest daher in einem Verzeichnis oder Testsystem vorher prüfen, ob es bei dir klappt. Beide Lösungen haben übrigens nichts mehr mit mod_rewrite zu tun, passen aber gut zu diesem Thema.
gzip-Komprimierung aktivieren
Durch die folgenden Zeilen aktivierst du für verschiedene Dateitypen die Komprimierung. Die Dateien werden vor dem Ausliefern verkleinert. Das spart Bandbreite und beschleunigt die Übertragung zum Besucher:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-shockwave-flash
Browser-Caching aktivieren
Damit Browser Dateien in deinem Cache ablegen, kann der Server an den Browser Informationen senden, wie lange eine Datei gecacht werden soll und kann. Ruft der Besucher eine weitere Seite bei dir auf, die zum Beispiel das Logo und andere Bilder erneut enthalten, werden diese aus dem Cache geladen. Das spart Ladezeit und Bandbreite. Mit den folgenden Zeilen weist du den Dateitypen Zeiten zu, wie lange diese gecacht werden dürfen. Bitte passe die Zeiten an deine Bedürfnisse an:
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
#ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresDefault "access plus 14 days"
Bei Fragen zu diesen Regeln hinterlasse einfach einen Kommentar unter dem Artikel.
Danke eisy für diese leicht verständliche Zusammenfassung.
Vielen Dank für die hilfreiche Übersicht.
Wie entferne ich denn ein Verzeichnis aus einer Url?
domain.de/verzeichnisa/verzeichnisb/artikelname.html
zu
domain.de/verzeichnisb/artikelname.html
RewriteRule ^verzeichnisa/(.*)/(.+)$ http://domain.de/$1/$2 [L, R=301]
Danke !
Ich bekomme aber einen 500er Fehler. Woran kann das liegen?
aus dem [L, R=301] habe ich ein [R=301,L] gemacht und es funktioniert.
Habe es leider nicht getestet, nur aus dem Kopf. Wenns geht super :).
Genialer Content.
Alle Jahre wieder braucht man diese Information, darum kann man sie sich so schlecht merken und muss(te) immer alles an verschiedenen Stellen ergooglen.
Mein Kollege René hat zu 301-Weiterleitungen und ihren Tücken einen interessanten Artikel geschrieben. Vielleicht ist der für Eure Leser auch interessant, um ins Thema zu finden: http://www.sistrix.de/news/seo-basics-website-relaunch-niemals-ohne-weiterleitungen/
[…] für passende 301-redirects zeigt Eisy auf seinem Blog. Das ist sehr hilfreich, weil die .htaccess nicht immer das macht, was ein normal denkender Mensch […]
Und das ^verzeichnis/(.*)$ bedeutet alles was zwischen ^ $ ist das Suchmuster. In diesem Fall also betrifft das alle Verzeichnisse die nach verzeichnis/ kommen, egal wie Sie benannt wurden.
Doppelte Inhalte mit und ohne www vermeiden
was muss ich denn in der htaccess Datei ändern oder entfernen um diesen o.g. zweizeiler einzufügen damit die Seite mit www. aufrufbar ist? Vielleicht komische Frage, aber ich bin Anfänger in diesen Sachen.
LG
Jürgen
Hallo Jürgen, einfach diesen Abschnitt beachten: https://www.eisy.eu/301-redirects/#Doppelte_Inhalte_mit_und_ohne_www_vermeiden
Hallo,
ich würde gerne /reg.php?uc=xyz nach /x/y/z/dateiname.php?uc=xyz umleiten, ohne dass man die neue Struktur sehen kann, also quasi das alte sichtbar bleibt. Ist das möglich und wie?
Vielen Dank im voraus
Gruß
Uwe
Hallo 🙂
Eie 301-Geschichte ist eine sehr nützliche und gute Sache! Es kam öfter vor, dass Kunden auf ein neues Shop-System wechselten, aber den Nutzen von der 301-Weiterleitung nicht erkannten. Für ein paar Euro Aufpreis hätten diese Kunden weniger potenzielle Kunden verloren… Gruß Per
Hallo Eisy, danke für die tolle Anleitung, die mir bisher sehr weitergeholfen hat. Nun bin ich eigentlich kein Fan von „Anfrage an Websitebetreiber für lau im Kommentar“ – allerdings komme ich gerade nicht weiter.
Deshalb stelle ich einfach mal meine Frage und freue mich, wenn Ihr mir weiterhelfen könnt.
Ausgangslage:
Homepage: http://domain.de/verzeichnis/index.php/datum/datum/datum/postartikel-in-meinem-wordpress
http://domain.de/verzeichnis/index.php/pageseite-von-meinem-wordpress
soll umgeleitet werden zu:
http://domain.de/verzeichnis/postartikel-oder-page-oder-oder
Ich habe oben die Variante für das entfernen des Datums schon gesehen, bin aber unsicher, wie ich dieses Konstrukt mit index.php ebenfalls beseitigt bekomme.
Ich freu mich, wenn Ihr Muße und kurz Zeit findet mir zu helfen. Danke
[…] die Website-Adresse (URL) gleich sein. Du kannst dieses Problem über die .htaccess Datei lösen. Bei Eisy.eu erfährst Du, wie das […]
[…] gleicht so weit wie möglich den ehemaligen Inhalten der neuen Domain. Dorthin führt dann via 301-Redirect die erbeutete Domain und alle ihre […]
Danke für die Übersicht, hat mal wieder geholfen!