it-swarm.com.de

Weiterleitung 301 mit Hash-Teil (Anker) #

Eine unserer Websites hat eine URL wie diese: example.oursite.com. Wir haben uns entschlossen, unsere Website mit einer URL wie dieser zu verschieben www.oursite.com/example. Zu diesem Zweck haben wir in unseren Apache-Server eine Umschreiberegel geschrieben, die mit einem Code 301 auf unsere neue URL umleitet.

Viele Websites verlinken mit URLs der Form example.oursite.com/#id=23 auf uns. Das Problem ist, dass die Umleitung den Hash-Teil der URL mit IE löscht. Soweit ich weiß, wird der Hash-Teil niemals an den Server gesendet.

Ich wollte die Umleitung mit Javascript implementieren, um den Hash-Teil beizubehalten, aber die Suchmaschine wird nicht wissen, dass sich unsere URL geändert hat. (kein Code 301 zurückgegeben)

Ich möchte, dass die Suchmaschine über unsere neue URL (301) informiert wird, da wir den Seitenrang auf unsere neue URL übertragen müssen.

Gibt es eine Möglichkeit, mit einem 301-Code umzuleiten und den Hash-Teil (#id=23) der URL beizubehalten?

21
Mike

Suchmaschinen interessieren sich in der Tat für Hash-Tags, sie verwenden sie häufig, um bestimmten Inhalt auf einer Seite hervorzuheben.

Zu der Frage werden Ankerplätze jedoch leider nicht im Rahmen der HTTP-Anfrage an den Server gesendet. Wenn Sie einen Benutzer umleiten möchten, müssen Sie dies in Javascript auf der Clientseite tun.

Guter Artikel: http://web.archive.org/web/20090508005814/http://www.mikeduncan.com/named-anchors-are-not-sent/

14
Eric Martindale

Google verwendet für AJAX Anwendungen eine spezielle Syntax, die auf Hash-URLs basiert: http://code.google.com/web/ajaxcrawling/docs/getting-started.html

2
kkaefer

Ich bin mir ziemlich sicher, dass der Hash-/Seitenanker-/Lesezeichen-Teil einer URL nicht von Suchmaschinen indiziert wird und daher keinen Einfluss auf Ihr Seitenranking hat. Bei einer Google-Suche nach "inurl: #" werden keine Dokumente zurückgegeben, was meine Annahme bestätigt. Links von externen Seiten werden ohne den Hash indiziert.

Sie haben Recht damit, dass der Hash-Teil nicht an den Server gesendet wird. Soweit mir bekannt ist, gibt es keine gute Möglichkeit, eine Umleitungs-URL mit dem darin enthaltenen Hash zu erstellen.

Aus diesem Grund muss der Browser den Hash während einer Umleitung korrekt verwalten. Firefox 3.5 scheint dies erfolgreich zu tun. Wenn Sie einen Hash an eine URL anhängen, deren Weiterleitung bekannt ist, wird die URL in der Adressleiste an den neuen Speicherort geändert, der Hash bleibt dort jedoch erfolgreich gespeichert.

Bearbeiten : In Reaktion auf den Kommentar unten ist es durchaus möglich, die URL umzuschreiben, wenn in der externen URL für das gewünschte Teil kein Hashzeichen vorhanden ist. Eine Apache-Umschreiberegel würde sich darum kümmern:

RewriteCond %{HTTP_Host}   !^exemple\.oursite\.com [NC]
RewriteCond %{HTTP_Host}   !^$
RewriteRule ^/(.*)         http://www.oursite.com/exemple/$1 [L,R]

Wenn Sie Apache nicht verwenden, müssen Sie in den Serverdokumenten nach ähnlichen Informationen suchen.

2
zombat

Da der Server den # nie sehen wird (301 Redirects ausschließen) und Google sein AJAX Crawling-Schema veraltet hat , scheint es, dass eine Front-End-Lösung der einzige Weg ist!

Wie ich es gemacht habe:

 (function() {

    var redirects = [
        ['#!/about',         '/about'],
        ['#!/contact',       '/contact'],
        ['#!/page-x',        '/pageX']
    ]

    for (var i=0; i<redirects.length; i++) {
        if (window.location.hash == redirects[i][0]) {
           window.location.replace(redirects[i][1]);
        }
    }

 })();

Ich gehe davon aus, dass die neuen Seiten ordnungsgemäß indexiert werden, da Google-Crawler tatsächlich Javascript ausführen.

Ich habe es in ein <script> -Tag direkt unter dem <title> -Tag eingefügt, damit es vor jedem anderen JS/CSS ausgeführt wird. Beachten Sie, dass dieses Skript nur für Ihre Indexdatei erforderlich sein sollte.

1
AlexKempton

Sie können eine Seite mit der alten Adresse erstellen, die alle Anforderungen auffängt und mit der richtigen Adresse und dem richtigen Code zur neuen Site weiterleitet.

Ich habe so etwas gemacht, aber es war in asp.net, was vermutlich nicht die Sprache ist, die Sie verwenden. Auf jeden Fall sollte es einen Weg geben, dies in jeder Sprache zu tun.

1
rslite

Wenn Sie den Status 301 zurückgeben, soll Ihr Server den Header 'Location:' zurückgeben, der auf den neuen Standort verweist. In der Praxis ist die Art und Weise, wie dies umgesetzt wird, unterschiedlich. Einige Server geben die vollständige URL (NetLoc und Pfad) an, andere geben nur den neuen Pfad an und erwarten, dass der Browser diesen Pfad im ursprünglichen NetLoc sucht. Es hört sich so an, als würde Ihre Umschreiberegel den Pfad abschneiden.

Eine einfache Möglichkeit, den zurückgegebenen Location-Header in der Python-Shell zu sehen:

>>> import httplib
>>> conn = httplib.HTTPConnection('exemple.oursite.com')
>>> conn.request('HEAD', '/')
>>> res = conn.getresponse()
>>> print res.getheader('location')

Ich fürchte, ich weiß nicht genug über mod_rewrite, um Ihnen zu sagen, wie Sie die Umschreiberegel korrekt ausführen, aber dies sollte Ihnen eine Vorstellung davon geben, was Ihr Server den Clients tatsächlich sagt.

Ich habe mein Konto registriert, damit ich es nicht bearbeiten kann.

zombat: Es tut mir leid, dass ich in meinem Kommentar einen Fehler gemacht habe. Der Link zu unserem Video lautet exemple.oursite.com/#video_id=233. In diesem Fall funktioniert meine Umschreiberegel in Apache nicht.

Nick Berardi: Wir haben die Art und Weise geändert, wie unsere Links funktionieren. Wir verwenden # nicht mehr, nur aus Gründen der Abwärtskompatibilität

0
Mike

Die Such-Bots interessieren sich nicht für Hash-Tags. Und wenn Sie sie für eine Art von Flash oder AJAX -Anrufen verwenden, treten schwerwiegendere Probleme auf, als wenn Ihre 301-Weiterleitungen nicht funktionieren. Denn wenn Sie den Inhalt nicht in einer anderen Form haben, indizieren die Suchmaschinen Ihre Website nicht und Sie leiden definitiv unter SEO.

0
Nick Berardi