Redirect inbase alla lingua

lucavalentino

Utente Attivo
15 Lug 2006
114
0
16
Mettendo questo codice php
Codice:
$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
if (substr($lang, 0, 2) == 'it') {
header("Location: /it/index.php");
}
if (substr($lang, 0, 2) == 'en') {
header("Location: /en/index.php");
}
come redirect per reindirizzare il sito in base alla lingua del broswer funziona?
Ciò comporta qualche problema per i motori di ricerca ?
 
Non dovrebbero esserci problemi, anche se logicamente sarebbe più corretto fare così:
PHP:
<?php
switch(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2))
{
  case 'it':
    header('Location: /it/index.php');
    break;
  case 'en':
    header('Location: /en/index.php');
    break;
  default:
    header('Location: /en/index.php');
}
?>
In questa maniera, anche se ci dovesse essere qualche problema con i motori di ricerca che inviano una lingua non accetta, oppure in caso di visitatori che non sono italiani o inglesi, si usa la lingua inglese.
 
Sì ci sono, il fatto è che con Google ad esempio, ma anche Bing o Yahoo! se usi un redirect di quel tipo rischi forte di essere bannato.
Oramai anche i muri lo sanno che se un crawler entrando in un sito viene rediretto al volo, questo pensa ad una doorway, cioè ad una pagina creata apposta per attirare traffico e poi ridirezionare ad un altro sito, insomma rischi il bann.
Il metodo corretto è questo:
PHP:
if (!$lingua = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2))
  $lingua = 'it';
header( "HTTP/1.1 301 Moved Permanently" );
header("Location: /$lingua/index.php");
In pratica, oltre a semplificare notevolmente il sistema per trovare la lingua del browser, avvisa il browser che la risorsa è stata spostata permanentemente (301) così da avvisare il motore di ricerca che non stai tentando si truffarlo.
 

Discussioni simili