mod rewrite 301 ohne QueryString – Double Content vermeiden

Erst kürzlich hatte ich mit einem schwerwiegenden DC-Problem zu kämpfen (-> Modrewrite und Suchmaschinen- Optimierung für ein Wiki via .htaccess), nun hat sich ein weiteres Problem beim Thema DC (Double Content) im Zuge der Suchmaschinen-Optimierung für Premium Links Webkatalog ergeben.

In dem Webkatalog hatte ich von Anfang an die gesamte Verlinkung auf PR- (PageRank) Vererbung umgestellt. Dadurch wurde die Review-Funktion, die in der verwendeten Katalog-Software normaler weise enthalten ist, überflüssig. Ich habe sie inzwischen vollständig entfernt, aber im Index waren aber schon einige Seiten mit solchen Links aufgenommen: www.premium-links-24.de/review.php?sid=8&recat= (sid enthält jeweils die Nr. des Eintrags)

Natürlich kann man durch die robots.txt diese Seite ausschließen, aber manchmal (die Seiten wurden bislang immernoch aktualisiert) verhalten sich Suchmaschinen einfach zu neugierig und ignorieren die robots.txt:

User-agent: *
Disallow: /review.php
User-agent: googlebot
Disallow: /review.php

Also habe ich als Ergänzung auch noch einen Rewrite-Regel in der .htaccess aufgenommen, um die schnelle Entfernung aus dem Index zu erzwingen:

RewriteRule review.php http://www.premium-links-24.de/sitemap.php [L,R=301]

Und schon hatte ich das nächste DC-Problem, die 301-er Umleitung führte zu folgendem unerwünschtem Ergebnis: www.premium-links-24.de/sitemap.php?sid=8&recat=
Es wurde also immer die selbe (gewünschte ) Seite aufgerufen (die Sitemap), aber immer mit unterschiedlichen Parametern (dem QueryString).

Um den QueryString aus einer URL bei einem forced external Redirect (301-er Weiterleitung) zu entfernen, muss zwingend noch ein ? bei der Substitution angefügt werden. Die korrekte Regel sieht also so aus:

RewriteRule review.php http://www.premium-links-24.de/sitemap.php? [L,R=301]

Jetzt führen alle Aufrufe der review.php seitens Google auf die Sitemap, wo der Robot genug gewünschte Seiten zum spidern vorfindet ;-)

Sie fragen sich, wie Sie auf solche Probleme überhaupt aufmerksam werden können? Benutzen Sie doch mal die “site:www.ihreseite.de”-Abfrage bei Google….

8 Antworten auf „mod rewrite 301 ohne QueryString – Double Content vermeiden“

  1. Ich hänge gerade an einem ähnlichen Problem, nämlich eingehende Urls mit Query String abfangen und zur DC Vermeidung redirecten. Leider klappt es nicht ganz so, wie ich mir das vorstelle:

    RewriteCond %{HTTP_HOST} ^www.domain.de$
    RewriteCond %{QUERY_STING} ^(.+)$
    RewriteRule ^(.*)$ http://www.domain.de/? [L,R=301]

    Die zweite Cond scheint trotz Query String aufruf nicht zu matchen :(

  2. Hallo,

    ich bzw. ein Freund hat da ein ähnliches Problem und ich hoffe dass Sie mir ein paar Tipps geben können im Bezug des DC.
    Wie schon erwähnt hat mein Freund die Index-Seite (default.php) in Flash erstellt. Jetzt ist Ihm aufgefallen, das es zwar optisch genial ausschaut aber was SEO Resultate angeht hat es ziemlich viel zum wünschen übrig. Er möchte jetzt die Seite normal in Html erstellen mit passenden Content!

    index.html Seite liegt min. ein Verzeichnis unter den anderen Seiten. Er möchte mit seine startseite.html was ein Verzeichnis unter default.html liegt die default.html seite überschreiben. Dann hat er automatisch DC. Sprich dann währen default.html und was als nächstes folgt startseite.html gleich bis auf die Head-Bereich (Title, Description und Keywords). Das will er so machen, weil er den gesamten Seiten-Struktur nicht durcheinander bringen will. Könnt Ihr mir bitte sagen wie er das bewerkstelligen soll ohne vom Google als DC dafür abgestraft zu werden?

  3. manchmal kann es auch konventionell ganz hilfreich sein. Vorallem dann, wenn man die Parameter kennt:

    if(substr_count($aktURL,’?redesign’)){
    $N_Location = str_replace(“?redesign”, “”, “$aktURL”);
    Header( “HTTP/1.1 301 Moved Permanently” );
    Header( “Location: $N_Location” );
    }

  4. au mann, danach such ich jetzt schon seit Stunden. wollte schon auf CG’s konventionelle Methode zurück greifen, fand dann aber zum Glück diese Seite ;)

    Danke

  5. In letzter Zeit nehm ich immer öfter die folgende möglichkeit zum Weiterleiten her:
    1.: per 404 auf eine Auswertungsseite Weiterleiten
    2.: dort mit $_SERVER[‘REQUEST_URI’] die angeforderte URI abfragen und
    3.: die gewünschten abfragen machen (z.B.: in der Datenbank nach passenden Seite suchen) und diese
    4.: entweder mit 200 bestätigen und den content aus der db ausgeben, mit nem 301 auf die gewünschte seite weiterleiten oder wenn die anfrage wirklich nicht richtig war nochmal den 404 senden und die fehlerseite ausgeben.
    So hab ichs auch bei meinem aktuellen Projekt, einem kurz URL und dereferer dienst mit dem namen 301log gemacht

  6. Die richtige Variante klappt bei mir hervorragend! ich habe lange nach der 301-Weiterleitung gesucht, danke für diese Lösung!

Schreibe einen Kommentar

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