Selbstgemachte URL-Shortener-Weiterleitung im Widerspruch zu 301 Weiterleitungen

11

Ich habe eine Website, die ursprünglich mit klassischem ASP erstellt wurde. Vor ungefähr einem Jahr wurde es in PHP umgeschrieben. Dies führte dazu, dass sich die Dateierweiterungen änderten und einige Seiten an neue Speicherorte auf der Website verschoben wurden. Natürlich haben wir 301 Weiterleitungen von den alten URLs zu den neuen URLs vorgenommen, damit ihre Benutzer und Suchmaschinen ihre neuen Standorte finden können. Das funktioniert gut.

Wir haben ihnen auch ein Tool erstellt, mit dem der Websitebesitzer eigene winzige URLs erstellen kann, die auf eine Seite mit in der URL enthaltenen Google Analytics-Kampagnenverfolgungsvariablen umleiten, damit er die Kampagne verfolgen und deren Leistung sehen kann.

Das Problem, das ich habe, ist, dass die Kampagnenverfolgungsregeln mit den 301-Weiterleitungen in Konflikt stehen und verhindern, dass die Weiterleitungen überhaupt funktionieren.

Hier ist der Kampagnen-Tracking-Code:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

Wie Sie sehen, wird überprüft, ob eine Datei vorhanden ist, und wenn dies nicht der Fall ist, wird sie zu einem Tracking-Skript (tracking.php) umgeleitet, das dann den Tracking-Code verwendet und mit dem Google Analytics-Kampagnencode in der Abfrage zur richtigen URL umleitet Zeichenfolge.

Dieser Code führt dazu, dass Regeln wie diese fehlschlagen:

redirect 301 /about.asp /about.php
redirect 301 /capabilities.asp /capabilities.php
redirect 301 /capacitors.asp /capacitors.php

Es ist sinnvoll, dass dies nicht zusammenarbeitet, da die Tracking-Regeln besagen: "Wenn eine Datei nicht gefunden wird, leiten Sie sie zu tracking.php weiter." Was ich brauche, ist, dass die 301-Weiterleitungen zuerst ausgeführt werden. Wenn keine von ihnen übereinstimmt, leiten Sie zum Tracking-Skript weiter. Durch Platzieren der Verfolgungsregeln unter den 301-Weiterleitungen werden die Ergebnisse nicht geändert.

Kann dies über .htaccess erfolgen? Oder muss ich das Tracking-Skript so ändern, dass, wenn eine Kampagne nicht gefunden wird, überprüft wird, ob die Kampagnen-ID tatsächlich eine alte Seite ist, die umgeleitet werden muss, und dann die 301-Umleitung von dort aus durchgeführt wird?

John Conde
quelle

Antworten:

5

Versuchen Sie, Ihre mod_aliasWeiterleitungen in mod_rewriteDirektiven umzuwandeln .


Bearbeiten: Im folgenden Beispiel wird davon ausgegangen, dass Sie alte ASP-Dateien durch PHP-Dateien unter demselben Pfad ersetzt haben.

RewriteEngine on

# *.asp -> *.php
RewriteRule (.*)\.asp$ /$1.php [R=301,L]

# tracking script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

... oder Sie können die Variable für reguläre Ausdrücke überspringen und eine explizite Umleitung für jeden der alten URIs festlegen:

RewriteRule about\.asp$ /about.php [R=301,L]
RewriteRule capabilities\.asp$ /capabilities.php [R=301,L]
RewriteRule capacitors\.asp$ /capacitors.php [R=301,L]

Edit # 2: Hier ist ein Beispiel, das die meisten Situationen abdecken sollte, denen Sie begegnen werden:

RewriteEngine on

# Changes to path + Query String Append
RewriteRule ^/path/to/old\.asp$ /path/to/new/about.php [R=301,L,QSA]

# *.asp -> *.php + Query String Append
RewriteRule ^(.*)\.asp$ $1.php [R=301,L,QSA]

# tracking script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]
danlefree
quelle
Ich bin mir nicht sicher was du meinst. Können Sie ein Beispiel geben, das auf dem basiert, was ich in meiner Frage gezeigt habe?
John Conde
Danke für die Bearbeitung. Macht jetzt Sinn. Ich denke, meine letzte Ausgabe wäre, was mit den Dateien zu tun ist, deren Pfade sich geändert haben. Ist das möglich? Oder frage ich zu viel?
John Conde
Sie können explizite Weiterleitungen für diese Dateien festlegen (wenn sich die meisten Pfade geändert haben, können Sie auch explizite Weiterleitungen für alle Dateien verwenden, um sicherzustellen, dass die Konfiguration wartbar ist).
danlefree
Ich vermute, dass das [R=301,L]Problem nicht nach jeder Weiterleitung auftritt. Lassen Sie mich das versuchen und ich werde Sie wissen lassen, was passiert.
John Conde
Der *.asp -> *.phpPlatzhalter funktioniert hervorragend. Die einzelnen Regeln für die Seiten, die keinen direkten Übergang darstellen und Abfragezeichenfolgen enthalten, sind problematisch. Dies scheint jedoch der richtige Weg zu sein. Wenn ich diesen Teil nicht klären kann, werde ich eine neue Frage dazu stellen.
John Conde
-1

Ich würde die Weiterleitung umkehren und sie so lassen, wie sie ursprünglich war. Leiten Sie Ihre NEUE Site auf Ihre ALTE Site um. Ihre ALTE Website profitiert wahrscheinlich bereits von Backlinking, Alter der Website und SEO. Es wäre eine Schande, das zu verlieren, nur um es durch eine neuere Site mit einem niedrigeren Seitenrang zu ersetzen. Google bestraft Weiterleitungen. Ihre NEUE Site hat noch keine SEO, daher ist es besser, eine Weiterleitung für diese zu verwenden :)

Brian McCarthy
quelle
Ich denke nicht, dass Regression eine gute Lösung ist. Die ursprüngliche Seite wurde in fast jeder Hinsicht schlecht gemacht. Wir haben die Website schneller, benutzerfreundlicher, zugänglicher, organisierter und wartbarer gemacht. Sie werden durch die Weiterleitungen nichts verlieren, da es sich um eine Nischen-Site handelt, die zunächst nur wenige Links hatte und die meisten auf die Startseite gingen, für die keine Weiterleitung erforderlich ist. Wir wollen also definitiv nicht zur alten Seite zurückkehren, da wir nichts gewinnen und viel verlieren.
John Conde
Zu Ihrer Information, Google bestraft nicht für Weiterleitungen. Das einzige Problem, das Weiterleitungen haben, ist, wenn sie zu tief angekettet sind, dass sie ihnen nicht mehr folgen und etwas PR verloren geht, wenn sie einen 301 machen, aber der Betrag ist trivial und es lohnt sich im Vergleich zu den Alternativen, es überhaupt nicht zu tun.
John Conde