Un blog qui contient beaucoup d'informations intéressantes... L'en-tête Last-Modified accélère considérablement l'indexation des nouvelles pages. Eh bien, nous avons réglé le CMS, mais comment fonctionne Yandex lui-même ?

L'en-tête HTTP Last-Modified indique au client l'heure à laquelle la page (objet) a été modifiée pour la dernière fois. Si le client (navigateur, robot de recherche) a reçu l'en-tête Last-Modified, alors lors du prochain accès à l'adresse, à condition que la page (objet) soit dans le cache local, il ajoutera une question If-Modified-Since (si la page a changé depuis la date de réception dans Last-Modified). À son tour, le serveur, ayant reçu la requête If-Modified-Since, doit vérifier l'horodatage reçu avec l'heure à laquelle la page a été modifiée pour la dernière fois et, si la page n'a pas changé, répondre par 304 Not Modified.

Économie de trafic

Si la page n'a pas changé, le serveur cessera de transmettre les données après l'envoi des en-têtes avec le code 304 Not Modified ; le corps de la page, les images et autres objets ne seront pas transmis.

Réduire la charge du serveur

La mise en œuvre correcte de la vérification de l'heure de modification de la dernière page peut réduire considérablement (jusqu'à 30 % ou plus) la charge sur le serveur. Une mise en œuvre correcte signifie vérifier le délai avant la génération de la page sur un site dynamique. Dans ce cas, toutes les actions pour générer la page (interroger le contenu de la base de données, analyser les modèles, recevoir des commentaires, etc.) ne seront pas effectuées. Cela est particulièrement vrai pour les sites à fort trafic et à longue visite d'utilisateur. Exemple : Un utilisateur est sur un site d'actualité sportive et actualise constamment la page d'accueil en prévision de la publication du résultat du match. En quelques minutes, une page peut être demandée et reçue des dizaines de fois. Si l'en-tête Last-Modified est envoyé et que la requête If-Modified-Since est traitée correctement, alors la page sera effectivement soumise une fois et toutes les requêtes ultérieures recevront une réponse 304 Not Modified.

Accélérer l'indexation par les moteurs de recherche

Les moteurs de recherche, via leurs directives aux webmasters, recommandent d'envoyer l'en-tête Last-Modified et de gérer correctement If-Modified-Since .


Assurez-vous que votre serveur Web prend en charge l'en-tête HTTP If-Modified-Since. Cet en-tête permettra au serveur Web d'indiquer à Google si le contenu du site a changé depuis la dernière fois qu'il a été exploré. La prise en charge de cette fonctionnalité réduira l’utilisation de la bande passante et les coûts.

Assurez-vous que vos en-têtes http sont corrects. En particulier, ce qui est important est le contenu de la réponse que le serveur donne à la requête if-modified-since. L’en-tête Last-Modified doit indiquer la date correcte à laquelle le document a été modifié pour la dernière fois. Si le serveur n'affiche pas la date de dernière modification du document, votre site sera indexé, mais :
- les résultats de recherche n'afficheront pas la date à côté des pages de votre site ;
- lors du tri par date, le site ne sera pas visible par la plupart des utilisateurs ;
- le robot ne pourra pas obtenir d'informations indiquant si la page du site a été mise à jour depuis la dernière indexation. Et comme le nombre de pages que le robot reçoit du site en une seule visite est limité, les pages modifiées seront réindexées moins souvent.

Il existe de nombreux mythes différents qui circulent dans le domaine de l’optimisation des moteurs de recherche (SEO) des sites Web. Certains d’entre eux ont une base, d’autres sont venus de nulle part. Dans cette note, nous examinerons l'un d'entre eux - en utilisant l'en-tête de réponse last-Modified.

Il y a quelque temps, nous avons reçu un document intitulé « Recommandations Ingate pour les studios Web sur les sites sponsorisés ». Et l’une des « recommandations » était la suivante :

Après une refonte ou sur un nouveau site en développement, la date de la dernière modification des pages du site (Last Modified) doit être indiquée.

Pour ajouter des informations sur la date de la dernière modification des pages d'un site PHP, vous devez insérer un script au tout début du code source de chaque page.


header("Last-Modified: " . date("D, d M Y H:i:s", time()) . " GMT");
?>

C’est cette absurdité sauvage, cette absurdité totale et ce code franchement fou qui m’a poussé à écrire cette note. Ici, je vais essayer d'expliquer ce qu'est Last-Modified, pourquoi il est nécessaire et comment les navigateurs et les moteurs de recherche l'utilisent.

Qu'est-ce qui est modifié en dernier lieu

Lors de la transmission d'informations au client (navigateurs ou robot de recherche), le serveur Web rapporte un grand nombre de données supplémentaires. Ils peuvent être visualisés dans la console du navigateur, par exemple :

configurer le serveur pour émettre des en-têtes de réponse corrects (par exemple, si la page n'existe pas, émettre une erreur 404, et si une requête If-Modified-Since est reçue, émettre un code 304 si la page n'a pas été modifiée depuis le date précisée dans la demande).

Vous pouvez également voir que si le serveur ne répond en aucune façon à une requête GET conditionnelle, alors ce n'est pas différent d'une requête normale. C'est-à-dire que l'en-tête Last-Modified avec l'heure actuelle, qui est également mal formée (bonjour Integgate !), n'est pas du tout nécessaire !

Alors, Last-Modified est-il nécessaire ou non ?

Généralement nécessaire. Mais il est important de comprendre que ce n'est pas l'en-tête lui-même qui joue un rôle, mais l'ensemble du scénario de demande conditionnelle, qui doit être entièrement mis en œuvre par le site. C'est dans ce cas que l'on obtiendra une grande vitesse d'indexation du site.

Mais il est souvent très difficile de mettre cela en œuvre dans un CMS prêt à l’emploi. Cela peut nécessiter des modifications assez importantes du code du CMS lui-même.

Bien que pour un certain nombre de CMS, cela puisse être réalisé en activant la mise en cache des pages. Si le CMS met en cache les pages, créant et servant des fichiers essentiellement statiques, alors le serveur Web lui-même répondra correctement aux requêtes conditionnelles. Par exemple, dans WordPress, cela peut être réalisé en utilisant le plugin WP Super Cache :

Vérifions-le en action. J'ai activé ce plugin, ouvert le navigateur en mode anonyme et fait deux requêtes pour la même page. On voit clairement que la deuxième réponse est correcte - 304 Non modifié :

Au lieu d'une conclusion

Ainsi, nous avons traité de l'en-tête Last-Modified. Premièrement, il doit transmettre des informations sur la date et l’heure auxquelles le document a été réellement modifié. Deuxièmement, la réponse du serveur à une requête conditionnelle avec l’en-tête If-Modified-Since est extrêmement importante.

Eh bien, écoutez moins les référenceurs qui ne connaissent pas les bases du fonctionnement d’Internet.

« En particulier, le contenu de la réponse que le serveur donne à la requête « if-modified-since » est important. L'en-tête Last-Modified doit indiquer la date correcte à laquelle le document a été modifié pour la dernière fois."

Vérifions comment les choses fonctionnent avec Last-Modified dans différents CMS.

# telnet www.exemple.com 80

et entrez ce qui suit :

GET /index.html Agent utilisateur HTTP/1.0 : Mozilla/5.0 De : quelque chose.somewhere.net Accepter : text/html,text/plain,application/* Hôte : www.example.com Si-modifié-depuis : mercredi, 19 octobre 2005 10:50:00 GMT

si le serveur renvoie 304 (Non modifié), alors il prend en charge If-Modified-Since, mais la page n'a pas été modifiée. Le code 200 (Ok) signifie que la page a été modifiée.

Vérification If-Modified-Since en C#

Vous pouvez vérifier le fonctionnement de If-Modified-Since à l’aide du code C# suivant :

Private HttpWebResponse GetPage() ( string url = @"http://....."; // Placer la requête Web au serveur en spécifiant l'URL HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); // Pas besoin de requête de connexion persistante.KeepAlive = false; // Le lien qui nous a renvoyé vers l'URL de la requête.Referer = url; // L'agent utilisateur de la requête du navigateur.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1 ; SV1 ; .NET CLR 1.1.4322 ; .NET CLR 2.0.50215)"; //Au lieu de HTTP 1.1, j'utiliserai HTTP 1.0. Lorsqu'une requête indique au serveur qu'il utilise 1.0, //le serveur a gagné" Je ne répondrai pas avec des données fragmentées mais enverra la réponse en une seule fois. request.ProtocolVersion = new Version(1, 1); request.IfModifiedSince = DateTime.Now.AddDays(-5); // Récupère la réponse du serveur ( HttpWebResponse)request.GetResponse(); ) private void TestLastModified(VirtueMartContext db, jos_vm_product product) ( using (réponse HttpWebResponse = GetPage()) ( Debug.Print("Code d'état : (0), Description : (1)\n" , réponse.StatusCode, réponse.StatusDescription); texte de chaîne = WebResponceReader.GetResponceText(response); Debug.Print(text.Substring(0, 100)); ) )

En utilisant cette méthode, vous pouvez vous assurer que Joomla renvoie toujours StatusCode=200 (OK), quelle que soit la valeur de request.IfModifiedSince.

Vérification si-modifié-depuis via le service Yandex

Si dans Yandex Webmaster nous cliquons sur le bouton « Vérifier la réponse du serveur », alors nous arrivons ici :

là encore vous pouvez voir que le site est un site et, par conséquent, WordPress sans le plugin WP Super Cache n'ajoute pas l'en-tête Last-Modified.

Eh bien, nous avons réglé le problème du CMS, mais comment fonctionne Yandex lui-même ?

Ici, nous pouvons donner l'exemple suivant : nous sommes aujourd'hui le 7 juillet 2011, le contenu de Joomla a été mis à jour le 20 juin 2011 et Yandex a une version datée du 11 juin 2011 dans son cache, bien qu'après cette date le robot soit arrivé plus qu'une fois. Dans ce cas, Yandex télécharge les mises à jour avec un retard très important. La question est pourquoi ?

Voici ce que Platon Chtchoukine dit à ce sujet :

Au fur et à mesure que le robot explore le site, il explore également la page spécifiée, après quoi, avec la mise à jour des bases de données de recherche, il sera mis à jour dans les résultats. Nous travaillons pour que cela se produise le plus rapidement possible.

De votre côté, vous pouvez également aider le robot à indexer le site plus rapidement en utilisant les recommandations suivantes :

L'en-tête HTTP Last-Modified indique au client l'heure à laquelle la page (objet) a été modifiée pour la dernière fois. Si le client (navigateur, robot de recherche) a reçu l'en-tête Last-Modified, alors lors du prochain accès à l'adresse, à condition que la page (objet) soit dans le cache local, il ajoutera une question If-Modified-Since (si la page a changé depuis la date de réception dans Last-Modified). À son tour, le serveur, ayant reçu la requête If-Modified-Since, doit vérifier l'horodatage reçu avec l'heure à laquelle la page a été modifiée pour la dernière fois et, si la page n'a pas changé, répondre par 304 Not Modified.

Économie de trafic

Si la page n'a pas changé, le serveur cessera de transmettre les données après l'envoi des en-têtes avec le code 304 Not Modified ; le corps de la page, les images et autres objets ne seront pas transmis.

Réduire la charge du serveur

La mise en œuvre correcte de la vérification de l'heure de modification de la dernière page peut réduire considérablement (jusqu'à 30 % ou plus) la charge sur le serveur. Une mise en œuvre correcte signifie vérifier le délai avant la génération de la page sur un site dynamique. Dans ce cas, toutes les actions pour générer la page (interroger le contenu de la base de données, analyser les modèles, recevoir des commentaires, etc.) ne seront pas effectuées. Cela est particulièrement vrai pour les sites à fort trafic et à longue visite d'utilisateur. Exemple : Un utilisateur est sur un site d'actualité sportive et actualise constamment la page d'accueil en prévision de la publication du résultat du match. En quelques minutes, une page peut être demandée et reçue des dizaines de fois. Si l'en-tête Last-Modified est envoyé et que la requête If-Modified-Since est traitée correctement, alors la page sera effectivement soumise une fois et toutes les requêtes ultérieures recevront une réponse 304 Not Modified.

Accélérer l'indexation par les moteurs de recherche

Les moteurs de recherche, via leurs directives aux webmasters, recommandent d'envoyer l'en-tête Last-Modified et de gérer correctement If-Modified-Since.

L'en-tête HTTP Last-Modified indique au client l'heure à laquelle la page (objet) a été modifiée pour la dernière fois. Si le client (navigateur, robot de recherche) a reçu l'en-tête Last-Modified, alors lors du prochain accès à l'adresse, à condition que la page (objet) soit dans le cache local, il ajoutera une question If-Modified-Since (si la page a changé depuis la date de réception dans Last-Modified). À son tour, le serveur, ayant reçu la requête If-Modified-Since, doit vérifier l'horodatage reçu avec l'heure à laquelle la page a été modifiée pour la dernière fois et, si la page n'a pas changé, répondre par 304 Not Modified.

Économie de trafic

Si la page n'a pas changé, le serveur cessera de transmettre les données après l'envoi des en-têtes avec le code 304 Not Modified ; le corps de la page, les images et autres objets ne seront pas transmis.

Réduire la charge du serveur

La mise en œuvre correcte de la vérification de l'heure de modification de la dernière page peut réduire considérablement (jusqu'à 30 % ou plus) la charge sur le serveur. Une mise en œuvre correcte signifie vérifier le délai avant la génération de la page sur un site dynamique. Dans ce cas, toutes les actions pour générer la page (interroger le contenu de la base de données, analyser les modèles, recevoir des commentaires, etc.) ne seront pas effectuées. Cela est particulièrement vrai pour les sites à fort trafic et à longue visite d'utilisateur. Exemple : Un utilisateur est sur un site d'actualité sportive et actualise constamment la page d'accueil en prévision de la publication du résultat du match. En quelques minutes, une page peut être demandée et reçue des dizaines de fois. Si l'en-tête Last-Modified est envoyé et que la requête If-Modified-Since est traitée correctement, alors la page sera effectivement soumise une fois et toutes les requêtes ultérieures recevront une réponse 304 Not Modified.

Accélérer l'indexation par les moteurs de recherche

Les moteurs de recherche, via leurs directives aux webmasters, recommandent d'envoyer l'en-tête Last-Modified et de gérer correctement If-Modified-Since.

Assurez-vous que votre serveur Web prend en charge l'en-tête HTTP If-Modified-Since. Cet en-tête permettra au serveur Web d'indiquer à Google si le contenu du site a changé depuis la dernière fois qu'il a été exploré. La prise en charge de cette fonctionnalité réduira l’utilisation de la bande passante et les coûts.

Google : Consignes aux webmasters

Assurez-vous que vos en-têtes HTTP sont corrects. En particulier, ce qui est important est le contenu de la réponse que le serveur donne à la requête If-Modified-Since. L’en-tête Last-Modified doit indiquer la date correcte à laquelle le document a été modifié pour la dernière fois. Même si le serveur n'affiche pas la date de la dernière modification du document (Last-Modified), votre site sera indexé. Cependant, dans ce cas, les éléments suivants doivent être pris en compte :

  • les résultats de recherche n'afficheront pas la date à côté des pages de votre site ;
  • lors du tri par date, le site ne sera pas visible par la plupart des utilisateurs ;
  • le robot ne pourra pas obtenir d'informations indiquant si la page du site a été mise à jour depuis la dernière indexation. Et comme le nombre de pages que le robot reçoit du site en une seule visite est limité, les pages modifiées seront réindexées moins souvent.