Si vous possédez un site de plusieurs centaines de milliers de pages, l’un des enjeux SEO majeur sera de le faire indexer intégralement par Google.

Et pour cela, la première étape, c’est que Google le crawle !

Malheureusement, aussi puissant soit-t-il, Googlebot n’a pas un appétit infini : il existe une limite au potentiel de crawl attribué à votre site, ne serait-ce que pour ne pas faire tomber votre serveur.

L’un des moyens d’augmenter le volume de crawl sera de délivrer plus rapidement les pages en optimisant les performances de votre site. On peut citer la mise en cache, l’optimisation des requêtes SQL, la compression serveur, … Des optimisations techniques pas toujours faciles à mettre en oeuvre.

Il en existe une beaucoup plus simple et diablement efficace : les 304 !

Le code 304 est un code retour HTTP qui signifie « Not Modified ».

Lorsque Googlebot interroge une page de votre site sur lequel il est déjà passé, il lui arrive régulièrement d’insérer une instruction « If-Modified-Since ».

Grossièrement, Googlebot demande à votre serveur : « Peux-tu me donner la page azerty.php si elle a été modifié depuis le 15 avril ? ».

Si c’est le cas : « Bien sûr, là voilà ! ». Le code retour est alors 200.

Si ce n’est pas le cas : « 304 ».

Mais qu’est ce que ça change ?

Ca change tout !

Lorsque vous retournez une page à Google, il faut le temps d’exécution côté serveur (les accès bases de données prennent beaucoup de temps notamment) puis le temps que Google télécharge la page. On est alors sur des temps d’accès de l’ordre de 500 millisecondes (en fonction des sites bien entendu).

Avec la 304, le temps d’exécution et de téléchargement sont réduits à leur strict minimum. Vous économisez en bande passante, en charge serveur. Googlebot crawl beaucoup plus rapidement votre page et peut passer à la suivante. Il dispose alors d’avantage de temps pour partir à la recherche des contrées inexplorées de votre site.

Petit soucis : autant votre serveur Apache sait parfaitement gérer cette instruction pour les contenus statiques, autant il est parfaitement incapable de connaître la date de dernière modification d’une page dynamique. Il faut donc gérer ça au niveau applicatif.

Deux solutions s’offrent à vous :

– Soit vous avez l’info en base et vous l’utilisez (et l’astuce perd un peu de son intérêt, les accès en base sont coûteux).

– Soit vous fixez une règle arbitraire du type : « Si Googlebot est déjà passé dessus lors des 7 derniers jours, je considère que la page n’a pas changée ». A ne pas faire sur les pages mise à jour très régulièrement.

Techniquement, c’est pas bien compliqué.

Quelques lignes PHP font l’affaire, à placer bien entendu au tout début du fichier pour que l’exécution soit la plus rapide possible.

if (!empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
	$ecart = round((strtotime("now") - strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']))/(60*60*24)-1);	 
 
	if($ecart <= 7){
		header('Status: 304 Not Modified', false, 304);
		exit;
	}
}

Attention cependant, si les résultats de cette technique peuvent être significatifs, cela ne fonctionnera que sur des sites à forte volumétrie de pages et qui sont déjà sains (structure optimisée, maillage interne efficace, pas de facteurs bloquants, …).

Pensez ensuite à monitorer votre crawl, analyser vos logs, et faire un tour dans la rubrique « Statistiques sur l’exploration » de Google Webmaster Tools.