Chez Babbar nous crawlons plus de 3 milliards de pages par jour, et il nous arrive parfois de rencontrer des difficultés à récupérer correctement les données de certaines pages. Ces problèmes sont souvent liés à des protections côté serveur ou à l’utilisation de certaines bibliothèques JavaScript, qui rendent la lecture des pages plus ou moins complexe. Pour optimiser notre approche, nous cherchons des solutions simples pour identifier les sites problématiques et les traiter différemment.
Bien entendu, nous respectons les règles de crawl. Toutes nos requêtes utilisent un user-agent clairement identifiable, et nos IP sont inscrites sur liste blanche et classifiées en tant que « robots SEO » sur de nombreux services, tels que Cloudflare. Si un site refuse ce type de robot, nous n’insistons pas. Nous nous assurons également de respecter les règles définies dans le fichier robots.txt pour chaque site.
Nous crawlons ces pages web pour alimenter nos outils SEO, babbar.tech et yourtext.guru. Notre objectif principal est de récupérer un maximum de données, de manière similaire à ce que fait Google avec son googlebot, afin de comprendre et analyser le contenu des pages et de parcourir les liens entre elles. Nous essayons d’extraire le texte visible comme le fait un navigateur web. Cela devient plus complexe lorsque des technologies comme JavaScript sont utilisées, rendant l’extraction depuis le code source HTML plus difficile. En plus du texte, nous récupérons aussi les liens (internes et externes), ainsi que les balises meta, qui sont essentielles pour les analyses SEO et l’indexation par les moteurs de recherche. Ces données nous permettent de mieux comprendre la structure du contenu et d’évaluer la qualité des pages.
Les tests
Pour comprendre l’influence des frameworks JavaScript, nous avons commencé par récupérer le code HTML de 50 000 URL à l’aide de deux méthodes : du code Java utilisant Apache HttpClient, et Playwright. Playwright est une librairie permettant d’automatiser l’utilisation de navigateurs web et d’exécuter le JavaScript, ce qui nous aide à simuler le rendu complet des pages incluant le contenu dynamique. Ensuite, nous avons comparé les tailles des codes obtenus, avec et sans exécution du JavaScript. Pour simplifier l’analyse, nous nous intéresserons uniquement aux url retournant un code HTTP 200.
Première surprise : entre deux crawls utilisant la même méthode, la taille des réponses pouvait varier considérablement. Ces variations étaient parfois dues à des erreurs, mais dans d’autres cas, elles étaient causées par le contenu dynamique de la page qui peut changer à chaque chargement sur le serveur. Nous avons donc lancé plusieurs crawls identiques sur une période relativement courte pour consolider les résultats.
En classant par différence de taille, il est difficile de tirer des conclusions claires.

Par contre, en classant par pourcentage de différence, les résultats deviennent plus intéressants :

Ces résultats montrent que très peu de pages présentent une très grande différence de taille, mais cela nous permet de cibler précisément les sites où l’exécution du JavaScript ajoute beaucoup d’informations.
Regardons les scripts JS que l’on rencontre le plus :
- https://www.google-analytics.com/analytics.js -> présent dans 20% des pages
- https://www.gstatic.com/recaptcha/releases/hfUfsXWZFeg83qqxrK27GB8P/recaptcha__en.js -> présent dans 15% des pages
- https://connect.facebook.net/en_US/fbevents.js -> présent dans 13% des pages
- https://www.google.com/js/bg/Gar3GNXyGuEFKrsdSCNgV3EULqB3zePQrsysOZqpo_s.js -> présent dans 5% des pages
- https://static.axept.io/sdk.js -> présent dans 5% des pages
- https://cdn.shopify.com/shopifycloud/consent-tracking-api/v0.1/consent-tracking-api.js -> présent dans 5% des pages
- https://script.hotjar.com/modules.8da33a8f469c3b5ffcec.js -> présent dans 4% des pages
Parmi les frameworks qui ressortent souvent, on trouve :
- Shopify : Shopify utilise JavaScript pour charger dynamiquement des éléments tels que les produits, les avis clients, et les options de personnalisation, ce qui peut considérablement augmenter la taille de la page.
- Klaviyo : Klaviyo est une plateforme de marketing qui s’intègre aux sites e-commerce, souvent en ajoutant des scripts JavaScript pour le suivi des utilisateurs et l’affichage de pop-ups, ce qui contribue à des différences significatives dans le contenu chargé.
- ReactJS : ReactJS est un framework JavaScript utilisé pour construire des interfaces utilisateur dynamiques. Son exécution génère du contenu côté client, rendant certaines informations accessibles uniquement après le rendu JavaScript.
Nous avons également rencontré plusieurs sites utilisant une bibliothèque AES (Advanced Encryption Standard) pour protéger le contenu de la page. AES est un algorithme de chiffrement qui est utilisé pour sécuriser les données, rendant le contenu inaccessible. Cela pose un problème pour le crawling, car le contenu de la page ne peut être interprété sans exécuter la logique JavaScript de déchiffrement.
Pour les pages avec moins de 50% en plus avec l’exécution de JavaScript, la différence de taille vient principalement de l’affichage des panneaux de consentement pour les cookies. Ces panneaux sont souvent générés dynamiquement à l’aide de JavaScript, ce qui signifie qu’ils peuvent être absents lorsque le JavaScript n’est pas exécuté. Toutefois, ces informations n’ont généralement pas de valeur pour nous, car elles n’apportent pas de contenu pertinent pour nos analyses.
Un autre cas intéressant qui arrive assez souvent, ce sont des pages retournant un code http 200, mais avec juste ce code :
<html><body><script>window.location.href="targetLink";</script></body></html>
Dans ce cas, notre robot essaie de lire la page mais ne trouve pas d’information. C’est juste que cette URL devrait retourner un code 301 ou 302 vers l’URL cible et non un 200.
Que peut-on en conclure ?
Ces tests montrent que, parfois, il est crucial d’exécuter le JavaScript pour récupérer le sens complet du contenu d’une page. Par exemple, de nombreux sites utilisent JavaScript pour charger dynamiquement des sections de contenu essentiel, comme les avis clients ou des informations produits, qui ne sont pas présentes dans le code HTML initial. Cependant, nous avons également observé que certaines bibliothèques peuvent perturber cette compréhension, comme les panneaux de consentement aux cookies. De plus, d’autres scripts, tels que ceux utilisés pour les analytics et les trackers, s’avèrent complètement inutiles pour notre objectif, tout en ajoutant du bruit dans les données récupérées.
Pour assurer une bonne indexation par les moteurs de recherche, il est essentiel de comprendre les défis posés par l’exécution du JavaScript. De notre coté, les techniques de crawl doivent être adaptées pour garantir que le contenu visible par des robots tels que le googlebot soit bien récupéré pour fournir les bonnes informations à nos outils. Un crawler efficace doit être capable de naviguer sur des pages complexes, même lorsque du code JavaScript est impliqué, afin de récupérer les données pertinentes et d’assurer un rendu complet du contenu.
La prochaine étape consistera à étudier les différences de taille après extraction du texte utile, c’est-à-dire le contenu pertinent pour nos analyses SEO, pour mieux identifier ce qui est véritablement nécessaire. Par exemple, des scripts tels que ceux utilisés pour les publicités ou les panneaux de consentement ajoutent du ‘bruit’ et ne contribuent pas aux objectifs d’analyse.
Il ne faut pas oublier que l’exécution du JavaScript par un crawler est très coûteuse en temps et en ressources, car elle nécessite de simuler un comportement de navigateur complet, incluant le rendu des pages web. Cela impacte fortement la performance globale du crawling. Pour optimiser ces éléments, il est essentiel de trouver un moyen d’exécuter le JavaScript uniquement lorsque cela est réellement nécessaire, afin de réduire la consommation des ressources et le temps de traitement. Cela implique d’identifier les pages où le contenu pertinent ne peut être récupéré sans exécution du JavaScript, et de cibler spécifiquement ces cas.
FAQ
1. Pourquoi le crawling des pages avec JavaScript est-il plus complexe ?
L’exécution de JavaScript par un crawler est plus complexe car cela nécessite de simuler le comportement d’un navigateur complet. De nombreuses pages chargent leur contenu dynamiquement à l’aide de JavaScript, ce qui implique qu’un simple accès au code HTML ne suffit pas pour extraire l’intégralité des données. Le coût en ressources et en temps est donc significatif, ce qui nous pousse à optimiser le crawl pour n’exécuter le JavaScript que lorsqu’il est nécessaire.
2. Quel est l’impact des protections côté serveur sur le crawl ?
Les protections côté serveur, telles que les restrictions IP ou les vérifications de type de robot, peuvent limiter l’accès des crawlers. C’est utilisé par certains sites pour éviter le scraping. Pour éviter ces limitations, il est nécessaire de suivre les directives du fichier robots.txt et d’utiliser un user-agent identifiable, ce qui montre la transparence du crawler et évite le blocage.
3. Pourquoi est-il essentiel d’extraire les balises meta et les liens ?
Les balises meta et les liens sont cruciaux pour le SEO, car ils fournissent des informations que les moteurs de recherche utilisent pour comprendre et classer les pages. Les balises meta, comme les descriptions, sont utilisées pour améliorer la visibilité dans les résultats de recherche, tandis que les liens internes et externes permettent de construire une architecture claire et cohérente pour le site, favorisant l’exploration par les crawlers.
4. Pourquoi l’optimisation du crawl est-elle importante pour les pages ayant des scripts inutiles ?
Les pages contenant des scripts inutiles, tels que les trackers publicitaires ou les panneaux de consentement aux cookies, peuvent ajouter beaucoup de bruit, ce qui complique l’extraction des données utiles. Ces scripts peuvent augmenter la taille de la page sans ajouter de valeur au contenu analysé. L’optimisation du crawl consiste à filtrer ou ignorer ces éléments inutiles pour améliorer l’efficacité du crawling et garantir que seules les informations essentielles sont collectées pour les analyses SEO.
5. J’utilise beaucoup de Javascript sur mon site, sera-t-il quand même bien référencé sur Google ?
L’utilisation intensive de JavaScript peut compliquer le processus de crawling pour les moteurs de recherche comme Google. Googlebot est capable d’exécuter du JavaScript, mais cela prend plus de temps et consomme plus de ressources. Si le contenu essentiel de votre site dépend fortement de JavaScript, il est crucial de s’assurer que le JavaScript est bien optimisé et que le contenu important est accessible rapidement. En optimisant le rendu côté serveur ou en utilisant des techniques de rendu dynamique, vous pouvez améliorer le référencement de votre site malgré l’utilisation importante de JavaScript.