sterlu: Weiterleitung je nach Serversprache: OK für Suchmaschinen?

Hi alle,

ich möchte gerne für einen Auftritt die Browsersprache der Besucher ermitteln und den Leuten, die "Deutsch" eingestellt haben, die deutsche Version der Seite zeigen, allen anderen die englische.

Ich habe mir auch schon einen Testfall gebaut: Wenn Browsersprache=="de-de", gib einen Meta-Redirect auf das Unterverzeichnis mit den deutschen Inhalten aus. Auf diese Weise verhindere ich, dass unter der gleichen URL mal englische, mal deutsche Inhalte erscheinen.

Meine Frage dazu wäre nun, ob dieses Vorgehen trotzdem problematisch in Hinblick auf die Suchmaschinen ist. Denn letztlich ist es ja doch so, dass manche Leute unter dieser URL einen Meta-Redirect erhalten und andere nicht. Die Suchmaschine könnte also der Meinung sein, dass hier ein Mechanismus am Werk ist, den Bots andere Inhalte zeigen will als menschlichen Besuchern.

Sind meine Bedenken berechtigt oder bin ich zu paranoid? :-)

Falls ersteres: Gibt es bessere Wege, um das zu lösen?

sterlu

    1. Hallo suit,

      interessanter Link, vielen Dank -- aber dort wird meine konkrete Frage nicht wirklich beantwortet, oder? Außer ich soll davon ausgehen, dass die Nichterwähnung der Fragestellung bedeutet, dass sie sich gar nicht stellt. :-)

      sterlu

      1. interessanter Link, vielen Dank -- aber dort wird meine konkrete Frage nicht wirklich beantwortet, oder?

        Richtig, deine Frage wird dort nicht beantwortet, weil Inhaltsvereinbahrung die vernünftigste Lösung ist, auch wenn es andere vernünftige Lösungen gibt. Deine meta-Refresh-Geschichte ist etwas unpraktikabel und wird dort bewusst nicht erwähnt ;)

        Außer ich soll davon ausgehen, dass die Nichterwähnung der Fragestellung bedeutet, dass sie sich gar nicht stellt. :-)

        Nein.

    2. Hallo,

      Falls ersteres: Gibt es bessere Wege, um das zu lösen?

      generisch: http://www.w3.org/International/questions/qa-when-lang-neg
      deutsch: http://www.w3.org/International/questions/qa-when-lang-neg.de.php
      englisch: http://www.w3.org/International/questions/qa-when-lang-neg.en.php

      zu dem Artikel ist anzumerken, dass er unter Schwachstellen der Sprachvereinbarung sehr einseitig ist. Es wir am Beispiel einer Nutzerin nur die Seite des clients beleuchtet. Hierbei dreht sich der Artikel also nur um verschiedene Konstellationen der clientseitigen Konfiguration und dessen Folgen.

      Wer RFC 2616 gelesen hat, wird festgestellt haben, dass HTTP keine Einbahnstraße ist. Es gibt also neben der Konfiguration des Clients auch noch die des Servers. RFC 2616 beleuchtet in Abschnitt 12 content negotiation. Es werden hierbei beide, client- und servergesteuertes Aushandeln berücksichtigt.
       Wer obendrein noch fit in der Konfiguration seines Apachen ist (andere Webserver klammere ich hier bewusst aus, weil es teils ein aussichtsloses Unterfangen darstellen kann, diese diesbezüglich standardkonform zu konfigurieren), auch mod_negotiation nicht nur vom Ignorieren her kennt, wird sicher schon mal den HTTP-Status "300 Multiple Choices" in seinem Browser gesehen haben.

      Der Artikel blendet die Serverseite stumpf aus. Fügt man benannte und ausgeblendete Seite zum Ganzen zusammen, gibt es faktisch keinerlei Nachteile von content negotiation. Auch die übliche Liste aus Links zu den einzelnen Sprachversionen stellt sich mir bei Ausschöpfen aller technischen Möglichkeiten nicht als obligat da.

      Gruß aus Berlin!
      eddi

  1. Hallo Sterlu,

    Ich habe mir auch schon einen Testfall gebaut: Wenn Browsersprache=="de-de", gib einen Meta-Redirect auf das Unterverzeichnis mit den deutschen Inhalten aus. Auf diese Weise verhindere ich, dass unter der gleichen URL mal englische, mal deutsche Inhalte erscheinen.

    was spricht dagegen? Mir ist erstmal kein Grund bekannt, der eine Weiterleitung hier rechtfertigen würde.

    Meine Frage dazu wäre nun, ob dieses Vorgehen trotzdem problematisch in Hinblick auf die Suchmaschinen ist.

    Google sagt in seinem offiziell zentralen Webmasterblog (danke nochmals an Sven Rautenberg für den Verweis zu diesem Blog an dieser Stelle, dort wird mit so einigen SEO-Märchen aufgeräumt) im Artikel Answering more popular picks: meta tags and web search zu <meta http-equiv="refresh" content="…;url=…">

    This meta tag sends the user to a new URL after a certain amount of time,
       sometimes used as a simple form of redirection. This kind of redirect is
       not supported by all browsers and can be confusing to the user. If you
       need to change the URL of a page as it is shown in search engine results,
       we recommended that you use a server-side 301 redirect instead.
       Additionally, W3C's Techniques and Failures for Web Content Accessibility
       Guidelines 2.0 lists it as being deprecated.

    Yahoo macht laut Hilfeartikel How the Yahoo! Web Crawler Handles Redirects wohl nur eine Differenzierung zwischen sofortigen/kurz wartenden gegenüber länger wartenden Weiterleitungen via meta-refresh:

    META Refresh: <meta http-equiv="refresh" content=...> is recognized as a
       301 if it specifies little or no delay or as a 302 if it specifies
       noticeable delay.

    Gruß aus Berlin!
    eddi

  2. hi,

    Ich habe mir auch schon einen Testfall gebaut: Wenn Browsersprache=="de-de", gib einen Meta-Redirect [..]

    Das ist ok, aber ich würde erstens keine Redirection machen und zweitens ist das an der von Dir genannten Stelle schon zu spät für das was ich machen würde (mod_rewrite). Das Engineering muss früher einsetzen, also:

    Der Browser sendet einen Header Accept-Language, z.B.

    Accept-Language=de-de,de;q=0.8,en-us;q=0.5,en;q=0.3

    Dieser Header findet sich serverseitig in der Umgebung als

    HTTP_ACCEPT_LANGUAGE

    $ENV{HTTP_ACCEPT_LANGUAGE} in Perl, $_SERVER[HTTP_ACCEPT_LANGUAGE] in PHP.

    Zum Einsatz der Rewrite Engine (RE) für diesen Zweck muss zum Laden einer HTML-Seite ein CGI-Prozess vorgeschaltet sein, Perl oder PHP o.ä., der wertet die Umgebung aus und kriegt dazu die angeforderte Seite in REQUEST_URI. Die RE hat nun eine Tabelle für jeden REQUEST_URI mit dem Content und der wird je nach HTTP_ACCEPT_LANGUAGE als Response ausgegeben.

    Die RewriteRule könnte so aussehen:

    RewriteRule ^.*.html$              /cgi-bin/load.cgi?q=html

    ist also für alle .html Requests gleich wobei das Script load.cgi der Manager ist und auch mal ne Default-Seite laden kann, wenn die Sprache nicht zur Verfügung steht.

    Ob Du dann noch ein flag [r=301] setzen möchtest, bleibt Dir überlassen, mein Tipp: lass es weg.

    Hotti

    1. $_SERVER[HTTP_ACCEPT_LANGUAGE] in PHP.

      Auch wenn PHP hier hinsichtlich etwas fehlertolerant ist, würde ich dennoch $_SERVER['HTTP_ACCEPT_LANGUAGE'] empfehlen :)

      1. $_SERVER[HTTP_ACCEPT_LANGUAGE] in PHP.

        Auch wenn PHP hier hinsichtlich etwas fehlertolerant ist, würde ich dennoch $_SERVER['HTTP_ACCEPT_LANGUAGE'] empfehlen :)

        Tja, einmal quoten, immer quoten. Aber jetzt guck: Einmal nicht quoten, nie wieder quoten :)

        (spart Toner)

        Viele Grüße,
        Horst Sorglos

        --
        Pfeifenraucher machen mit wenig Tabak viel Rauch. Zu was? Zu Asche!
        1. Tja, einmal quoten, immer quoten. Aber jetzt guck: Einmal nicht quoten, nie wieder quoten :)

          (spart Toner)

          Dir ist also ernshaft zuzutrauen, dass du Quelltexte ausdruckst, mit Tipp-Ex korrigerst und danach wieder mit einer OCR-Software einscannst?

          1. Hi!

            Tja, einmal quoten, immer quoten. Aber jetzt guck: Einmal nicht quoten, nie wieder quoten :)
            (spart Toner)
            Dir ist also ernshaft zuzutrauen, dass du Quelltexte ausdruckst, mit Tipp-Ex korrigerst und danach wieder mit einer OCR-Software einscannst?

            Wenn er einen guten Tag erwischt, erfindet er ein System, mit dem man Quelltexte in den Arbeitsspeicher laden, Textstücke in selbigem umverlagern und das Ganze wieder speichern kann. Außerdem schreibt er noch einen Artikel darüber.

            Lo!

            1. Hallo,

              Wenn er einen guten Tag erwischt, erfindet er ein System, mit dem man Quelltexte in den Arbeitsspeicher laden, Textstücke in selbigem umverlagern und das Ganze wieder speichern kann.

              wow, das wäre mal was Innovatives!

              Außerdem schreibt er noch einen Artikel darüber.

              Yo, das würde er fertigbringen. ;-)

              Ciao,
               Martin

              --
              Der Gast geht solange zum Tresen, bis er bricht.