« Zurück zum Magazine

Klein, aber oho – htaccess-Datei und SEO

Eine htaccess-Datei zu konfigurieren, kann eine sehr mühselige Aufgabe sein – besonders dann, wenn Du nicht damit vertraut bist. Gehe hier mit Bedacht vor, wenn Du Dich nicht gut auskennst, denn Du kannst eine Website durch eine falsche Regel oder ein falsch platziertes Zeichen ziemlich schnell kaputt machen. In diesem Artikel möchte ich Dir aufzuzeigen, wie ein SEOler von der Konfiguration profitieren kann. Immerhin ist htaccess eine doch sehr nützliche Datei für viele Dinge – in diesem Artikel zeige ich Dir ein paar der häufigsten Anwendungsbeispiele dafür.

Was ist eine htaccess-Datei?

Eine sehr vereinfachte Beschreibung einer Hypertext Access Datei ist, dass es sich dabei um eine Teilmenge von Apache Webserver Konfigurationsregeln auf Verzeichnisebene handelt. Eine Website kann auch in jedem Verzeichnis eine haben, aber in diesem Artikel konzentrieren wir uns nur auf den Fall, dass die htacces-Datei auf Root-Ebene liegt, da die Verwendung der Webroot-Datei in den meisten Fällen völlig ausreichend.

Mit anderen Worten: Du kannst die globale Konfiguration von Apache mit htaccess überschreiben oder erweitern. Gängige Anwendungsbeispiele dafür sind beispielsweise URL-Weiterleitungen, URL-Shortening, Zugriffskontrolle (für unterschiedliche Webseiten und Dateien) oder benutzerdefinierte Fehlermeldungen. Mit weiteren Konfigurationsregeln kannst Du noch eine ganze Menge mehr anstellen. Da sich die Datei im Webroot befindet, können wir Regeln innerhalb einer einzelnen Domain kontrollieren, ohne Regeln auf anderen Domains im gleichen Server zu verändern. Das bringt somit viele Vorteile mit sich.

Auch wenn es für viele wie eine Programmiersprache aussehen mag, besteht die Datei aus Apache-Direktiven, die eine Variante von PCRE (Perl Compatible Regular Expressions) sind. Aber keine Sorge, Du musst hier keine neue Sprache lernen, es ist es nur ein Format, das htaccess für sein Regelwerk nutzt. Das Internet ist voll von detaillierten und anschaulichen Beispielen, also sollten selbst kleine Änderungen schon etwas bewirken.

Die Datei hat zudem nichts mit der Applikation zu tun, die deine Seite hostet. Sieh sie eher als eine Datei, die unabhängig von CMS oder E-Commerce-Plattformen wie WordPress, Magento, Prestashop etc. und an den Webserver selbst gebunden ist. Dieselben Regeln gelten unabhängig davon, auf welchem System deine Seite läuft. Das Einzige, das sich ändern könnte, ist die Verzeichnisstruktur, wenn Du den Zugriff innerhalb der Regeln weiterleitest oder blockierst. Es ist also nicht wichtig, ob Deine Seite mit PHP, Ruby oder Javascript aufgebaut ist. Die Funktionalität der htaccess-Datei bleibt gleich.

Wie Du vielleicht schon weißt, wird .htaccess hauptsächlich von Apache Webservern genutzt. Wenn Du nginx (eine weitere beliebte Webserver Software) nutzt, ist der Aufbau etwas anders, sodass die Regeln nicht zu 100% übereinstimmen. Bevor du fortfährst, checke also erst, auf welchem Webserver Deine Website läuft.

Wie funktioniert htaccess?

Der Standard-Dateiname ist .htaccess und genau so muss er lauten, um zu funktionieren. Wobei der eigentliche Dateiname nur htaccess ist – der Punkt vor dem Dateinamen bedeutet, dass es sich um eine versteckte Datei handelt. Das ist eine verbreitete Art, um Dateien im UNIX/LINUX-Umfeld zu verstecken. Du musst also wissen, wie Du versteckte Dateien in Deinem System ansehen kannst, um .htaccess zu finden.

Die Datei selbst ist eine einfache Textdatei. Nutze ein geeignetes Bearbeitungsprogramm wie Notepad ++, Atom oder Sublime Text, wenn Du die Datei auf Deinem Gerät erstellst oder bearbeitest. Ich arbeite am liebsten in UTF-8 Zeichenkodierung, da Zeichensätze vor Jahren ziemlich umständlich waren. Wenn Du die Datei online mit cPanel bearbeitest, sind die richtigen Einstellungen normalerweise bereits von vornherein gegeben. Wenn Du sie aber mit FTP oder SFTP übertragen musst, achte darauf, dass die Übertragung im ASCII Modus geschieht. Aber ich möchte hier nicht ins Detail gehen und setze einfach mal voraus, dass Du Dich hier schon auskennst.

Glaube mir: Auch wenn es kompliziert erscheint – mit der Zeit bekommst du eine gewisse Routine und normalerweise müssen die Einstellungen nur einmal pro Software angepasst werden. Es ist allerdings wichtig, diese Einstellungen zu kennen, denn fehlerhafte Einstellungen bedeuten eine fehlerhafte Datei, die nicht richtig funktionieren wird, wenn sie dann auf dem Server ist. Wenn es um .htaccess geht, steckt der Teufel wirklich im Detail!

So, jetzt haben wir eine saubere Datei. Lass sie uns verwenden! Wenn Du in der Datei schon Inhalte hast (was wahrscheinlich an Deiner momentanen Website-Software wie WordPress liegt), dann keine Sorge: Wir gehen im nächsten Schritt die Basics durch.

Struktur Deiner htaccess-Datei Inhalte

Um Dich mit der Syntax vertraut zu machen, verwende ich hier einfach die WordPress-htaccess als Beispiel. Wahrscheinlich hast Du sie schon oft gesehen und Dich gefragt, was sie bedeutet. Lass uns also loslegen!

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

Wie Du hier sehen kannst, wird # für Kommentare je Zeile genutzt. Kommentare enden mit Zeilenumbruch oder einfach, indem Du Enter drückst. Htaccess unterstützt ganze Kommentarabsätze nicht. Wenn Du also über mehrere Zeilen hinweg kommentieren möchtest, muss jede Zeile mit # starten.

RewriteEngine On

Hier stellen wir sicher, dass die Rewrite-Engine von Apache für diese Website aktiviert ist. Es ist ein separates Modul, das nicht in der Basis von Apache verankert ist. Es kann auf Server-Ebene in der globalen Konfigurationsdatei httpd.conf, oder wie hier im Kontext je Verzeichnis durch htaccess festgelegt werden. Wenn es auf Server-Ebene festgelegt ist, müssen wir es hier nicht unbedingt wiederholen.

RewriteBase /

Hier setzen wir die Basis für spätere Rewrite-Regeln (Regeln zum Überschreiben) fest. Du musst an dieser Stelle relative Pfade verwenden. Komplizierter wird es, wenn Du mehrere .htaccess-Dateien in mehreren Verzeichnissen hast, aber gehen wir davon aus, dass Du nur eine Datei im Root-Verzeichnis hast. Das /-Zeichen beschreibt hier das Stammverzeichnis des Dokuments, in dem sich die Website-Dateien befinden. Normalerweise bedeutet es also dasselbe wie https://www.beispiel.com/ (Domain-URL).

RewriteRule ^index\.php$ - [L]

Bei den Rewrite-Regeln kommt die wirkliche Magie ins Spiel. Du kannst davon an sich unendlich viele haben, aber bedenke, dass sie “on-the-fly” geschrieben werden. Das bedeutet, dass diese Regeln mehrere Male mit jedem Seitenaufruf geprüft werden. Du kannst davon mehrere implementieren, bevor sich Auswirkungen bemerkbar machen, besonders wenn Dein Webserver SSD verwendet (was er sollte...). Als allgemeine Regel sollte hier aber gelten: halte die Datei so schlank wie möglich!

Die Syntax der Rewrite-Regel sieht folgendermaßen aus:
RewriteRule Pattern Target/Substitution [Flag1, Flag2, Flag3]

Flags sind optionale Modifikatoren der Regel, die deren Verhalten ändern können. Wir können beispielsweise ein Cookie festlegen, wenn eine Regel mit dem CO Flag übereinstimmt, und dem Cookie Keys und Werte zuschreiben. Wir können auch manche Seiten mit dem F Flag so einstellen, dass sie einen 403 Fehlercode auslösen, oder auch MIME-Types mit dem T Flag festlegen.

Das Ganze kann sehr schnell sehr technisch werden, aber das dient nur dazu, Dir zu zeigen, wie vielfältig diese Regel ist. Lass uns also zur vorliegenden Regel zurückkehren.

RewriteRule ^index\.php$ - [L]

Mit ^index\.php$ suchen wir nach der index.php-Datei, und nach nichts anderem. Das ist ein gängiges Ausdrucksformat, um sehr vielseitige Gruppen von Strings zu finden. Es ist auch für Google Analytics nützlich, hier allerdings mit ein paar Einschränkungen. Google hat RegEx zwar etwas abgebaut, dennoch ist es dort auch noch sehr nützlich.

Schauen wir uns als Nächstes das String-Pattern an. ^ signalisiert dabei den Anfang eines Strings. Wenn Du ein String suchen willst, das einen Punkt beinhaltet, musst Du dem Zeichen ein \ hinzufügen. $ markiert das Ende des Strings. ^index\.php$ hat nur einen einzigen, genauen Treffer: index.php.

Jetzt sehen wir, dass unser Ziel oder Substitut “-” ist. Das bedeutet, dass es kein Substitut gibt. Am Ende ist ein Flag [L], das besagt, dass die Regel dort endet.

Wir haben nun also nach der index.php-Datei gesucht und eine Regel zum Nichtstun festgelegt. Aber wozu das Ganze? Es ging darum, zu verhindern, dass spätere Regeln die index.php umschreiben – also ist es eine Art Schutz der index.php. Wir wollen, dass index.php unsere Permalinks in WordPress behandelt. Mit anderen Worten: wenn der Browser zu index.php gelangt, wollen wir nicht, dass spätere Regeln greifen.

Wie Du sehen kannst, ist die Reihenfolge bei htaccess wichtig. Du musst Deine Regeln in einer bestimmten Reihenfolge setzen, um Deine Ziele umzusetzen. Behalte das im Hinterkopf für die nächsten Schritte!

RewriteCond %{REQUEST_FILENAME} !-f

Rewrite-Bedingungen sind eine Möglichkeit, die Arten von Anfragen einzuschränken, auf die sich die Rewrite-Regel NACH ihnen auswirken wird. So kannst Du beispielsweise bestimmte Weiterleitungen für eine Gruppe von IP-Adressen festlegen.

Die Syntax für die Rewrite-Bedingung sieht folgendermaßen aus:

RewriteCond Teststring Condition [Flag1, Flag2, Flag3]

Wenn mehr als eine Bedingung festgelegt wird, müssen sie alle erfüllt oder wahr sein, bevor die nächste Regel angewendet wird. Teststring ist in diesem Kontext meistens eine Server-Variable wie zum Beispiel %{REQUEST_FILENAME}. “Request filename” beinhaltet die gesamte URL einer angefragten Datei vom Webserver und ist auf Server-Ebene festgelegt.

Die Bedingung ist in diesem Fall !-f. -f bedeutet “ist eine reguläre Datei”. Sie überprüft also, ob der Teststring eine gültige Datei ist. Das ! davor verneint das allerdings, also überprüft die Bedingung hier, ob der Teststring KEINE gültige Datei ist.

Okay, viel auf einmal. Nochmal in anderen Worten:

RewriteCond %{REQUEST_FILENAME} !-f

Die Regal überprüft, ob die gesamte URL, von der ein Besucher zugreift, keine gültige Datei ist. Wenn dem nicht so ist (also eine gültige Datei), geht es weiter. Das ist eine Möglichkeit, die Rewrite-Pfade abzufangen, da es sich bei Permalinks nicht um richtige Dateien oder Verzeichnisse handelt. Wir müssen sie verarbeiten lassen, sonst gibt der Server einfach überall 404-Fehler zurück. Auf diese Weise fangen wir sie aber vorher ab und leiten sie zur weiteren Verarbeitung an das CMS.

Noch dabei? Okay, weiter gehts.

RewriteCond %{REQUEST_FILENAME} !-d

Hier setzen wir dieselbe Bedingung für Verzeichnisse, die wir vorher für Dateien verwendet haben, denn das ist natürlich nicht das gleiche!

Jetzt haben wir also zwei Bedingungen festgelegt, die überprüfen, ob eine angefragte URL keine gültige Datei UND kein gültiges Verzeichnis ist. Erst, wenn beide Aussagen zutreffen gehen wir weiter zur nächsten Regel.

RewriteRule . /index.php [L]

Diese Regel wenden wir an, wenn die Bedingungen zutreffen. Mit anderen Worten: Wir überprüfen, ob jemand versucht, auf ein Element unserer Website zuzugreifen das garnicht existiert. Das Pattern hierbei ist ein einfacher Punkt, der jedes Zeichen bis auf einen Zeilenumbruch meint. Aber weil Zeilenumbrüche in Zusammenhang mit URLs selten vorkommen, ist damit quasi alles gemeint. Jetzt ist das Ziel nur noch /index.php – also die index.php-Datei im Root-Verzeichnis –, die wir vorhin davor geschützt haben, umgeschrieben zu werden. [L] stoppt auch hier wieder die weitere Verarbeitung von Regeln. Wenn Du Deine Regeln darunter oder zwischen die Bedingungen setzt, kann das also der Grund dafür sein, falls einige Deiner Regeln nicht funktionieren. Auf die Reihenfolge kommt es an!

Die Frage ist aber doch: Was haben wir dem Server jetzt eigentlich aufgetragen? Unser Ziel ist es, WordPress selbst die Permalinks behandeln zu lassen. Damit es das auch kann, müssen wir jede Anfrage umschreiben, die nicht auf eine Datei, ein Verzeichnis oder auf /index.php zeigt. Und wenn eine Anfrage auf /index.php führt, muss sie dort enden. Das wars! Nun sollte WordPress sich um alles Weitere kümmern.

Wofür kannst du die .htaccess Datei benutzen?

Ich zähle hier ein paar Anwendungsfälle auf, damit Du eine genauere Vorstellung bekommst, was diese Datei neben URL-Weiterleitung, URL-Shortening, Zugriffskontrolle oder benutzerdefinierten Fehlermeldungen noch so kann. Lass uns aber im Bereich der SEO bleiben.

  • Einfache Autorisierung und Authentifizierung
    Praktisches Beispiel: wenn Du sicher gehst willst, dass eine Website-Testumgebung nicht frühzeitig in den Google Index einfließt. Natürlich solltest Du Deine Testumgebung mit noindex versehen – eine Staging-Seite zu indizieren wäre wirklich uncool – vielleicht ist es also eine gute Idee, hier mit einer einfachen Autorisierung nochmal nachzuhelfen.

  • URL-Überschreiben
    Sogenannte “Sprechende URLs” oder “Pretty URLs” nutzen ebenfalls oft .htaccess. Oder zumindest sorgen sie dafür, dass das CMS das handhabt.

  • Verzeichniseintrag
    Wir können kontrollieren, wie der Server reagieren wird, wenn keine bestimmte Seite festgelegt ist. Nehmen wir mal an, dass wir ein paar PDF-Dateien haben, die nicht gelistet werden sollen. Dann können wir mit Hilfe der htaccess kontrollieren, ob der Eintrag angezeigt wird oder nicht.

  • HTTPS & HSTS
    Die Ausführung von HTTPS und HSTS auf dem Apache Server hängt stark vom richtigen URL-Rewriting sowie der korrekten Information in der Kopfzeile in der .htaccess-Datei ab. Jegliche falsche Syntax in der Datei während der Anwendung von HTTPS oder HSTS führt zu einem Fehler in der Ausführung.

  • Fehlermeldungen
    Fehler passieren – aber es ist schön, seinem Besucher in einer themenbezogenen Message zu zeigen, was los ist. Mit htaccess können wir genau das machen.

  • Umleitungen
    Wir SEOs lieben unsere 301, nicht wahr? Stelle sie hier einfach ein.

  • Blockierungen
    Wenn wir beispielsweise einen nervigen Bot auf unserer Seite haben, können wir ihn hier mit Hilfe der IP-Adresse blockieren. Wir können auch Traffic, der von bestimmten Seiten kommt, mit einem Verweis blockieren.

Und vieles mehr… wie Du sehen kannst, ist mit dieser kleinen Datei einiges möglich!

Ich würde eigentlich gerne jeden einzelnen Anwendungsfall mit konkreten Beispielen genauer darstellen, aber dann würde dieser Artikel schnell ermüden. Du kannst natürlich immer nach Beispielen googlen oder einfach nachfragen. Der Grundgedanke ist aber, Dir ein paar Ideen zu geben, wie Du als SEO von dieser kleinen Datei profitieren kannst.

Es ist auch schlau, nicht alles durch .htaccess zu handhaben, denn ein paar wenige Nachteile bringen Änderungen in htaccess dann doch mit sich:

  • Performance Verluste:
    Das ist zwar kein so großes Problem mehr, seit SSD beliebt geworden ist, aber dennoch gut zu wissen. Für jeden HTTP-Request an den Server gibt es einen Dateisystem-Zugriff, der in den meisten Situationen den “Bottleneck” darstellt, und der Webserver checkt die Regeln zusätzlich bei jedem Zugriff auf jedes Verzeichnis. Mit anderen Worten: Die Festplatte wird jedes Mal mindestens einmal verwendet, wenn eine Ressource abgefragt wird, was sich summieren kann. Diese Festplattennutzung kann allerdings optimiert werden. Und sofern die Datei nicht physisch groß ist oder es davon zu viele gibt, halten sich die Performance Verluste meist in Grenzen.

  • Sicherheit:
    Du brauchst die richtigen Einstellungen, sonst entsteht im Worst Case eine Sicherheitslücke. Stelle sicher, dass Dein Hosting diesbezüglich immer auf dem besten Stand ist!

  • Syntax:
    Wie ich vorher schon erwähnt habe, sind bei .htaccess die Details entscheidend. In diesem Zusammenhang bedeutet das, dass sogar nur ein falsches Zeichen deine Seite verwüsten kann – oder zumindest Teile davon. Schreibfehler können leicht zu einem 501 Serverfehler führen – und das kann wirklich unschön werden. Du kannst immer die komplette Datei offline nehmen, indem Du den Namen abänderst, beispielsweise zu _htaccess oder zu htaccess.old. Das wird alle Änderungen in der .htaccess Datei zurücksetzen und normalerweise deine Seite wieder online bringen.

Diese Datei hat es also ganz schön in sich. Die Vielseitigkeit und zahlreichen Anwendungsfälle können eines Tages von Vorteil für Dich sein, um Deine Aufgaben zu vereinfachen. Sei mutig, probiere es aus und denke daran: wenn der Worst Case eintritt und du Deine Website geschrottet hast, kannst Du sie einfach wieder zurücksetzen, indem Du die Datei umbenennst. Wenn Du schon eine funktionierende Datei im Root-Verzeichnis hast, ist es SEHR ratsam, die Datei zu kopieren, bevor Du darin Änderungen vornimmst. So kannst Du ganz leicht alle Änderungen rückgängig machen.

Leseempfehlungen:

Finde heraus, welches Optimierungspotential Deine Website aufweist.

Veröffentlicht am Oct 2, 2020 von Suganthan Mohanadasan