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.
Pas bête :)
Merci pour l’astuce !! J’essaierai ça un de ces jours (même si le PHP est pas trop mon truc).
Attention par contre :
»
Le code 304 est un code retour Apache qui signifie « Not Modified ».
»
Le code 304 n’est pas spécifique à Apache, c’est un code HTTP standard (preuve en est, Cherokee ou même des framework tel que django pour le python peuvent délivrer des 304).
Bonne journée !
C’est tout à fait exact, merci pour la correction. Je fais la modification.
Merci pour l’astuce.
Par contre, je suis sceptique. J’avais déjà vu ça pour des images ou des fichiers externes mais jamais pour des pages web. As tu un exemple à donner de sites qui utilisent ce système ? Et par rapport au netlinking, si Googlebot trouve de nouveaux liens, il va réagir de la même façon ?
– Pour les images et fichiers externes, c’est géré automatiquement par ton serveur : ce sont des fichiers statiques, il connaît leur date de dernière modification.
– Lorsque tu renvois une 304, tu ne retournes pas le contenu de la page, Googlebot ne peut donc pas trouver de nouveaux liens.
– Je connais des sites qui utilisent ce système, mais je ne peux pas te les donner ;-)
Merci pour ta réponse, je parlais plus de l’effet que cela pouvait avoir sur le transfert de jus de lien externe.
Je me suis un peu renseigné, il paraîtrait que cette technique bien connu des hackers marche bien. C’est pour ça que, de temps à autres, Googlebot enverrai de fausses informations pour obtenir un code 200.
Je vais tester ça, merci pour l’astuce ;)
Par ailleurs, très sympa ce blog, je comprends pourquoi il monte autant :)
Merci pour le compliment :-)
Par contre, j’insiste sur le fait que ce n’est pas une technique de hackers ou de black hat.
C’est Google lui même qui nous demande de retourner des 304 :
« Vous devez configurer votre serveur afin qu’il renvoie cette réponse (appelée en-tête HTTP If-Modified-Since) lorsqu’une page n’a pas été modifiée depuis la dernière fois que le demandeur l’a appelée. Cette fonctionnalité permet de limiter la consommation en bande passante et les ressources exploitées puisque votre serveur prévient le robot Googlebot lorsqu’une page n’a pas été modifiée depuis la dernière exploration. ».
Source : http://www.google.com/support/webmasters/bin/answer.py?hl=fr&answer=40132
Concernant le transfert du jus, Googlebot n’ajoute pas systématiquement l’instruction if-modified-since. C’est lui qui se débrouille en fonction de ce qu’il cherche.
Bonne idée en tout cas, qui s’applique plutôt aux sites statiques avec un volume de pages assez conséquent.
Mais en tout cas bravo pour avoir trouver ça.