SEO: setTimeout (la vendetta)

Google: come vede il setTimeoutQualche mese fa avevo fatto dei test in merito alla costruzione dei contenuti di una pagina in modo asincrono usando il setTimeout. I risultati erano stati chiari: tutto ciò che era sincrono veniva indicizzato, tutto ciò che era asincrono non veniva indicizzato.

Dopo quel post feci un’azione di protesta in questo blog, creando asincronicamente (setTimeout) un popover nero semi trasparenze, per dichiarare pubblicamente un lutto in merito all’infame situazione politica di questo paese. La soluzione tecnica era semplice: con un setTimeout mostravo un DIV in overlay e cambiavo il titolo con document.title. Al click su “chiudi” veniva rimosso il DIV in sovraimpressione e ripristinato il titolo originale.

Dopo qualche giorno mi accorsi di un calo di accessi al sito, imputabili ad un netto calo degli accessi dal motore di ricerca. Preoccupato la prima cosa che feci fu controllare la SERP con un site:blog.merlinox.com. Il risultato? Aberrante e ameno allo stesso tempo: Google aveva iniziato a inserire il TITLE modificato asincronicamente in javascript a tutti i  miei post.

Le conseguenze erano sicuramente pessime: acontestualità del titolo rispetto ai contenuti e titoli duplicati. Ahi ahi ahi. Rimossi immediatamente la “protesta” e decisi di effettuare un nuovo test.

setTimeout test 2

Ho creato una serie di pagine che aggiornano il  TITLE via javascript nelle seguenti modalità:

– direttamente
– dopo 5 millisecondi
– dopo 1 secondo
– dopo 1 minuto
– dopo 10 minuti

Questo il sorgente della paginetta:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Merlinox esperimento 0</title>
</head>

<body>
<p>Pagina di test per verificare il comportamento del setTimeout: <?= $tit ?>
<span id="testoDopo"></span></p>
<script>
function tit(s){
	document.title += " | " + s;
	document.getElementById('testoDopo').innerHTML = '**' + s + '**';
}
</script>
<?php
if (!isset($_GET['tipo'])){
	$tipo = 0;
}else{
	$tipo = $_GET['tipo'];
}
switch (intval($tipo)){
	//millisecondi
	case 0:
		?>
		<script>tit('Aggiornamento diretto');</script>
		<?
		$timer = 0;
		$tit = 'aggiornamento diretto';
		$frase = 'asòldjfalksfj';
		break;
	case 1:
		$timer = 5;
		$tit = 'timeout 5 millisecondi';
		$frase = 'sjdfjsdojfosdjifa';
		break;
	case 2:
		$timer = 1000;
		$tit = 'timeout 1 secondo';
		$frase = 'm,cvmx.,vmx';
		break;
	case 3:
		$timer = 60000;
		$tit = 'timeout 1 minuto';
		$frase = 'òskdfaksopoisdopfopsdi';
		break;
	case 4:
		$timer = 600000;
		$tit = 'timeout 10 minuti';
		$frase = 'òsdlfòkasòldfaskdf';
		break;
}
if ($timer > 0){
	?>
	<script>
	setTimeout("tit('<?= $tit ?>');", <?= $timer ?>);
	</script>
	<?
}
?>
<p><?= $frase ?></p>
</body>
</html>

Dopo qualche giorno di tempo per indicizzare tali pagine il risultato ha confermato la “protesta”: i TITLE venivano indicizzati nella forma modificata tramite la chiamata asincrona, a prescindere dai tempi di delay (screenshot).

Non contento ho voluto in separata sede verificare se anche i contenuti, modificati tramite un innerHTML, venissero indicizzati o trascurati. Nel mentre del test (tra la modifica e la reindicizzazione delle pagine) è uscita la notizia di Google che ha iniziato a indicizzare i “commenti di facebook” (31/10/2011): titolo un po’ riduttivo forse per una modifica forte al comportamento degli spider.

Ancora qualche giorno di attesa e puff… i contenuti caricati asincronicamente vengono completamente indicizzati e riconosciuti da Google a prescindere dal timeout. Quindi a tutti coloro che usano il setTimeout o richiamano contenuti esterni tramite script sincroni o asincroni consiglio di fare molta attenzione: da Moutain View vedono tutti, oggi.

Loading Facebook Comments ...

6 pensieri su “SEO: setTimeout (la vendetta)

  1. zanna86

    Ok, Google ha imparato a eseguire del javascript. Ma lo esegue nel modo giusto? Secondo me se ne frega del setTimeout ed esegue subito quello che sta dentro al setTimeout…non ci credo che rimane 10 minuti sulla tua pagina..no??!

    Sarebbe interessante fare delle chiamate al server appena prima di eseguire il settimeout e appena prima che venga eseguito il contenuto del settimeout in modo da vedere se effettivamente è trascorso il tempo impostato!

    Ciao

    Rispondi
  2. Benito Lopez

    Questo test è interessantissimo. Ma fammi capire una cosa: la pagina te l’ha indicizzata 5 volte?
    Poi dici che lo skippa direttamente: cioè, se mettiamo un timer di un anno (tanto per esagerare), ignora il tempo e te lo indicizza subito?

    Rispondi
  3. Merlinox Autore articolo

    @benito: certo, è indicizzata 5 volte perchè sono 5 pagine diverse chiaramente. Come uno shop in cui ha catalogo.php?id=…
    Si… prende il metodo e va!

    Rispondi

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *