Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Länderauswahl Meta-Refresh umgehen

Mehrere Domains, Domain-Umzug, neue Dateinamen, 301/302
Neues Thema Antworten
Chh1
PostRank 6
PostRank 6
Beiträge: 448
Registriert: 25.01.2012, 17:53
Wohnort: Würzburg

Beitrag von Chh1 » 19.12.2012, 10:21

Folgender Code ist aktuell auf der index.php (der Übersichtlichkeit halber gekürzt).

Code: Alles auswählen

<?PHP
//Automatische Sprachauswahl
if &#40;$_GET&#91;"site"&#93;==''&#41;&#123;

if&#40;$sprachauswahl=="de"&#41; &#123;  ?>
<meta http-equiv="refresh" content="0; URL=home.html">
<?PHP 
&#125;  
else if&#40;&#40;$sprachauswahl=="de-de"&#41;||&#40;$sprachauswahl=="de-DE"&#41;&#41; &#123;  ?>
<meta http-equiv="refresh" content="0; URL=home.html" />
<?PHP 
&#125;  
else if&#40;&#40;$sprachauswahl=="de-at"&#41;||&#40;$sprachauswahl=="de-AT"&#41;&#41; &#123;  ?>
<meta http-equiv="refresh" content="0; URL=home.html" />
<?PHP
&#125; 
else if&#40;$sprachauswahl=="fr"&#41; &#123;  ?>
<meta http-equiv="refresh" content="0; URL=fr_home.html" />
<?PHP
&#125; 

.
.
.

else&#123; ?>
<meta http-equiv="refresh" content="0; URL=en_home.html" />
<?PHP
&#125; &#125;
?>
Ich möchte die Meta-Refresh durch 301 ersetzen.

Funktioniert das so:

Code: Alles auswählen

<?PHP
//Automatische Sprachauswahl
if &#40;$_GET&#91;"site"&#93;==''&#41;&#123;

if&#40;$sprachauswahl=="de"&#41; &#123;  
header&#40;"HTTP/1.1 301 Moved Permanently"&#41;; 
header&#40;"Location&#58; http&#58;//www.domain.de/home.html"&#41;; 
&#125;  
else if&#40;&#40;$sprachauswahl=="de-de"&#41;||&#40;$sprachauswahl=="de-DE"&#41;&#41; &#123; 
header&#40;"HTTP/1.1 301 Moved Permanently"&#41;; 
header&#40;"Location&#58; http&#58;//www.domain.de/home.html"&#41;; 
&#125;  
else if&#40;$sprachauswahl=="fr"&#41; &#123;  
header&#40;"HTTP/1.1 301 Moved Permanently"&#41;; 
header&#40;"Location&#58; http&#58;//www.domain.de/fr_home.html"&#41;; 
&#125; 
.
.
.
else&#123; 
header&#40;"HTTP/1.1 301 Moved Permanently"&#41;; 
header&#40;"Location&#58; http&#58;//www.domain.de/en_home.html"&#41;; 
&#125; &#125;
?>
Oder wie würdet ihr das machen?

Habe irgendwie Bedenken ein 301 in eine if zu packen. Checkt das die Suchmaschine?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 19.12.2012, 14:20

In welchem Parameter ist denn die $sprachauswahl gespeichert? Die muss doch irgendwoher kommen?
Mir tut immer die Sicherheit etwas weh. Kenne zwar längst nicht alle Möglichkeiten für Angriffe, doch ein wenig filtern kann ja nie verkehrt sein.

Variante 1:

Code: Alles auswählen

if &#40;isset&#40;$_GET&#91;"sprachauswahl"&#93;&#41;&#41; and !empty&#40;$_GET&#91;"sprachauswahl"&#93;&#41;&#41; &#123;

	$sprachauswahl = $_GET&#91;"sprachauswahl"&#93;;
	$sprachauswahl = strtolower&#40;$sprachauswahl&#41;;
	$sprachauswahl = preg_replace&#40;"/&#91;a-z-&#93;/", "", $sprachauswahl&#41;;

	if&#40;$sprachauswahl == "de"&#41; &#123; 
	header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
	header&#40;"Location&#58; http&#58;//www.domain.de/home.html"&#41;;
	&#125; 
	/* ||&#40;$sprachauswahl=="de-DE"&#41; entfällt, da alles in Kleinbuchstaben umgewandelt wurde */
	elseif&#40;$sprachauswahl == "de-de"&#41; &#123;          
	header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
	header&#40;"Location&#58; http&#58;//www.domain.de/home.html"&#41;;
	&#125; 
	elseif&#40;$sprachauswahl == "fr"&#41; &#123; 
	header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
	header&#40;"Location&#58; http&#58;//www.domain.de/fr_home.html"&#41;;
	&#125;
	.
	.
	.
	else&#123;
	header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
	header&#40;"Location&#58; http&#58;//www.domain.de/en_home.html"&#41;;
   &#125; 
&#125; 
Sind bei einer Sprache mehr als zwei Buchstaben erforderlich?
Falls nicht, dann kürzen.

Variante 2:

Code: Alles auswählen

if &#40;isset&#40;$_GET&#91;"sprachauswahl"&#93;&#41;&#41; and !empty&#40;$_GET&#91;"sprachauswahl"&#93;&#41;&#41; &#123;

	$sprachauswahl = $_GET&#91;"sprachauswahl"&#93;;
	$sprachauswahl = strtolower&#40;$sprachauswahl&#41;;
	$sprachauswahl = preg_replace&#40;"/&#91;a-z-&#93;/", "", $sprachauswahl&#41;;
	$sprachauswahl = substr&#40;$sprachauswahl, 0, 2&#41;;	

	if&#40;$sprachauswahl == "de"&#41; &#123; 
	header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
	header&#40;"Location&#58; http&#58;//www.domain.de/home.html"&#41;;
	&#125;  
	else&#123;
	header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
	header&#40;"Location&#58; http&#58;//www.domain.de/".$sprachauswahl."_home.html"&#41;;
   &#125; 
&#125;

Chh1
PostRank 6
PostRank 6
Beiträge: 448
Registriert: 25.01.2012, 17:53
Wohnort: Würzburg

Beitrag von Chh1 » 09.01.2013, 14:10

Meine Frage zielte eher darauf ab, ob allgemein hier 301 die richtige Methode ist, oder ob ihr so etwas anders lösen würdet.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 09.01.2013, 22:29

Kommt ja darauf an zwischen wie vielen Sprachen Du wechseln möchtest. Bei zwei Sprachen genügt bereits die jeweils andere Sprache innerhalb des Form-Tags als Zielseite beim Attribut action anzugeben. Bei drei Sprachen könntest Du Länderflaggen mit einem direkten Link nehmen. Bei wesentlich mehr Sprachen kommt dann eine Weiterleitung ins Spiel.

Ob 301 oder 302 sollte eigentlich weniger eine Rolle spielen, die Weiterleitung ist ja für den User und nicht für den Bot. Ein Bot wird wohl nicht das Formular wiederholt mit allen Auswahlmöglichkeiten absenden, um zu sehen, was bei jeder Option passiert und für den User ist nur der Wechsel entscheidend.

Es sei denn, Du möchtest kein Formular für die Auswahl benutzen, doch da eine Übergabe per GET erfolgt, nehme ich nur mal an, das ein Formular benutzt wird. Hatte ja gefragt, in welchem Parameter die $sprachauswahl gespeichert wird und woher die kommt.

Chh1
PostRank 6
PostRank 6
Beiträge: 448
Registriert: 25.01.2012, 17:53
Wohnort: Würzburg

Beitrag von Chh1 » 22.01.2013, 10:33

Sorry, stand auf dem Schlauch. Der aktuelle Code ist nicht von mir, außerdem ist mir eine automatische Sprachauswahl bis jetzt nicht untergekommen.

Es wird kein Formular benutzt. Die Sprache wird automatisch (wohl aus dem Browser) ausgelesen.
Sieht folgendermaßen aus:

$sprache = @getenv('HTTP_ACCEPT_LANGUAGE');
$sprachauswahl = substr($sprache, 0, 5);

Das heißt also, dass je nachdem mit welcher Sprache man kommt eine andere Version der Seite angezeigt bekommt. So soll das auch sein, aber wie reagiert darauf der Googlebot?
Und das ist auch das, was mich vorsichtig macht und worauf meine Frage abzielt.
Ist das nicht eine Art Cloaking?

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 23.01.2013, 08:34

Da bin ich augenblicklich überfragt, nicht das der Bot mal weitergeleitet wird und mal nicht. Ein Browser wird ja auf eine bevorzugte Sprache eingestellt und wenn sich Browser und Server unterhalten, so wird im HTTP-Header Accept-Language ausgetauscht.

https://www.w3.org/International/questi ... les.de.php

Aber wie ist das nun bei einer Anfrage von einem Bot?
Was wird da ausgetauscht?
Ein Bot wird doch wohl neutral kommen?

Um völlig sicher zu sein, so sollte eine Auswahl nur erfolgen, wenn die Anfrage von einem Browser kommt. Somit müsste wohl zuerst der User Agent abgefragt werden, ob es sich um einen bekannten Browser handelt?

Chh1
PostRank 6
PostRank 6
Beiträge: 448
Registriert: 25.01.2012, 17:53
Wohnort: Würzburg

Beitrag von Chh1 » 23.01.2013, 09:07

Vielen Dank für deine Antworten Melegrian. Ich glaube du hast verstanden was ich meine.

Melegrian hat geschrieben: Um völlig sicher zu sein, so sollte eine Auswahl nur erfolgen, wenn die Anfrage von einem Browser kommt. Somit müsste wohl zuerst der User Agent abgefragt werden, ob es sich um einen bekannten Browser handelt?
Kann ich dann auch nicht gleich den meta-refresh lassen und verzichte lieber ganz auf 301?
Kann mir da vielleicht noch jemand anderes helfen?

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 23.01.2013, 18:43

Problem bei der Beantwortung, in den Logs sehe ich nur IP, Datum/Uhrzeit, Methode, besuchte Seite, Protokoll, Statuscode, User Agent und Referrer. Ich sehe aber nicht, was der komplette HTTP-Header enthalten hat. Wenn Du das erfahren möchtest, so müsstest Du die HTTP-Header tracken, doch das werden wohl nur wenige machen. Aber nur dann wäre die Frage richtig zu beantworten. Einige im Forum hier sollten sich damit jedoch auskennen.

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag