Les Web Workers sont-ils compatibles avec un bon SEO ?

En théorie, c’est toujours une bonne idée d’essayer de tirer partie des fonctionnalités avancées des navigateurs modernes pour améliorer les performances de votre site.

Parmi ces fonctionnalités, les Web Workers sont encore assez méconnus. Mais certains commencent à les utiliser.

Mais est-ce que Googlebot peut crawler et indexer normalement une page qui exploite les Web Workers ? C’est une question qui a été posée récemment à Google et à Martin Splitt en particulier. Et sa réponse est tout à fait intéressante.

Les « Web Workers » : qu’est-ce que c’est ?

Depuis de très nombreuses années, les scripts javascripts sont frappés d’une tare congénitale qui nuit beaucoup aux performances. Ils ne s’exécutent que dans un seul thread (un seul « fil d’exécution » pour parler français).

Donc en pratique, on ne peut pas lancer l’exécution de plusieurs scripts qui vont s’exécuter en même temps. Les scripts s’exécutent dans le fil principal, les uns après les autres. Si un script prend du temps à achever sa tâche, les autres scripts vont devoir attendre sagement leur tour. Ce goulet d’étranglement nuit grandement aux performances.

Il y’a des scripts dits « asynchrones » me direz-vous. Pour contourner cette ENORME limitation, on écrit des scripts qui lancent des actions dont on récupérera les résultats plus tard. Pendant ce temps là, on peut lancer d’autres instructions et d’autres scripts. Cela améliore un peu la situation, car cela évite d’attendre par exemple qu’une API réponde pour exécuter la suite du code javascript.

Mais avec un thread unique, on ne peut pas exécuter plusieurs scripts en parallèle.

Et quelqu’un eut l’idée en 2009 de permettre aux navigateurs de supporter les web workers, qui permettent de lancer des scripts sur des threads supplémentaires qui fonctionnent en tâche de fond. Et c’est magique !

Si un script Javascript a une tâche lente ou complexe à gérer, avec les web workers il est possible de lancer un script sur un autre fil qui va effectuer le travail en tâche de fond.

C’est formidable, mais assez peu connu et utilisé.

Certains navigateurs ont mis du temps avant de supporter correctement la fonctionnalité, ce qui obligeait à créer des scripts qui détectaient si les web workers étaient supportés. Cela a freiné l’adoption

Aujourd’hui, tous les navigateurs supportent les web workers « dédiés » sauf Opéra Mini. Pour les web workers partagés, il y’a encore du chemin à faire, mais leur périmètre d’utilisation est beaucoup plus rare.

Les web workers aujourd’hui sont incomplètement supportés par Googlebot.

Les web workers sont de plus en plus utilisés par les développeurs front qui veulent accélérer l’exécution de leurs scripts Javascript. Mais si on utilise cette fonctionnalité, est-ce que cela peut poser des problèmes pour le référencement ?

La réponse, hélas, est OUI.

Googlebot, même dans sa version Evergreen, qui utilise maintenant la dernière version de Chromium, ne supporte pas complètement les web workers.

Voici ce que Martin Splitt révélait à ce sujet dans un récent podcast :

https://search-off-the-record.libsyn.com/cheese-web-workers-universal-search-and-more-0

En 2018, lorsque j’ai rejoint l’entreprise, j’ai fait un tas de tests autour de nos capacités JavaScript. Et l’une des choses que j’ai testées était les web workers. Et les web workers sont essentiellement juste un moyen d’avoir comme du code multithread sur le web et de décharger certaines choses du thread principal. […]
Et j’ai remarqué qu’en ce qui concerne la rendition, les web workers ne fonctionnent pas vraiment comme on pourrait s’y attendre. Et c’est parce que très peu de gens les utilisent. Et encore moins de personnes les utilisent pour des choses liées au contenu. […]

Martin Splitt, Google

Le problème est subtil : pour gagner en efficacité, Google a fixé des limites très basses sur les temps d’exécution. Pour les timeouts, le problème concerne aussi la génération de contenu par des scripts asynchrones. Si l’exécution est différée, avec un Set Timeout ou un autre mode, le Web Rendering Service de Google va ignorer le contenu généré via les web workers.

Cette limitation a été expliquée en 2019 par Martin Splitt.

Bref, si vous vous voulez utiliser les web workers pour générer du contenu indexable, il y’a un risque que ce contenu ne soit pas découvert par Google. C’est donc une méthode à éviter en règle générale.

Mais si le script qui tourne en tâche de fond est exécuté immédiatement, sans que setTimeout ou une autre méthode d’exécution différée soit employée, alors il y’a des chances que cela fonctionne. Mais il faudra tester le résultat systématiquement, car on touche là aux limites extrêmes de ce que sait faire Googlebot aujourd’hui.

Laisser un commentaire