Declaration officielle
Autres déclarations de cette vidéo 21 ▾
- 2:06 La vitesse mobile détermine-t-elle vraiment votre classement Google ?
- 2:12 La vitesse mobile est-elle vraiment un critère de classement Google décisif ?
- 4:19 Faut-il vraiment paniquer si votre site charge en plus de 3 secondes ?
- 4:19 Pourquoi perdez-vous la moitié de vos visiteurs avant même qu'ils ne voient votre contenu ?
- 5:37 Le Speed Index sous 5 secondes : suffit-il vraiment à garantir une bonne performance perçue ?
- 5:42 L'indice de vitesse est-il vraiment la métrique clé de Google pour le mobile ?
- 9:56 Pourquoi le CSS et le JavaScript bloquent-ils vraiment le premier affichage de vos pages ?
- 10:11 Faut-il vraiment optimiser le chemin de rendu critique pour gagner en vitesse ?
- 20:21 Faut-il vraiment charger le CSS de manière asynchrone pour améliorer le rendu critique ?
- 25:29 Pourquoi srcset est-il devenu incontournable pour le SEO mobile ?
- 28:48 Jusqu'où peut-on compresser les images sans perdre en SEO ?
- 30:00 Le lazy loading des images améliore-t-il vraiment le temps de chargement et le SEO ?
- 30:50 Faut-il vraiment activer le lazy loading sur toutes vos images pour améliorer le SEO ?
- 41:00 WebPageTest : pourquoi Google insiste-t-il sur la 3G et les tests multiples ?
- 44:25 Les frameworks JavaScript sabotent-ils vraiment vos performances mobiles ?
- 46:18 HTTP/2 server push réduit-il vraiment les requêtes pour améliorer votre SEO ?
- 46:20 HTTP/2 et server push : faut-il vraiment compter sur cette fonctionnalité pour accélérer son site ?
- 48:17 Le cache navigateur améliore-t-il vraiment le classement dans Google ?
- 50:19 Faut-il vraiment supprimer la moitié de vos plugins WordPress pour le SEO ?
- 52:12 AMP améliore-t-il vraiment vos performances SEO ou est-ce un piège technique ?
- 52:43 AMP améliore-t-il vraiment la vitesse de votre site ou est-ce un piège technique ?
Google recommande explicitement les attributs async et defer pour optimiser le chargement JavaScript. Async télécharge et exécute pendant le parsing HTML, réduisant la durée de blocage. Defer exécute après le parsing complet. Pour un SEO, le choix entre les deux impacte directement le temps de rendu initial et la vitesse perçue par Googlebot, donc potentiellement le crawl budget et les Core Web Vitals.
Ce qu'il faut comprendre
Pourquoi Google insiste sur ces deux attributs spécifiques ?
Par défaut, un script JavaScript bloque le parsing HTML. Le navigateur arrête tout, télécharge le fichier, l'exécute, puis reprend. Ce comportement dégrade mécaniquement le First Contentful Paint et le Largest Contentful Paint, deux métriques directement observées par Google.
Les attributs async et defer cassent ce blocage. Async permet au navigateur de continuer le parsing pendant le téléchargement, puis interrompt brièvement pour exécuter. Defer reporte l'exécution jusqu'à ce que le DOM soit entièrement construit. Ces deux mécanismes réduisent le temps où Googlebot ou l'utilisateur voient une page blanche ou incomplète.
Quelle différence concrète entre async et defer pour le rendu ?
Async ne garantit aucun ordre d'exécution. Si trois scripts portent l'attribut async, ils s'exécutent dès qu'ils sont téléchargés, dans un ordre imprévisible. Pratique pour des scripts isolés comme Google Analytics ou un pixel de tracking qui n'ont pas de dépendances.
Defer, lui, respecte l'ordre d'apparition dans le HTML. Les scripts defer s'exécutent séquentiellement après le DOMContentLoaded. Indispensable si ton script B dépend de ton script A, typiquement pour des bibliothèques comme jQuery suivies d'un plugin.
Est-ce que Googlebot interprète vraiment ces attributs différemment ?
Googlebot utilise une version récente de Chrome pour exécuter JavaScript. Il respecte donc nativement async et defer comme n'importe quel navigateur moderne. Un script en defer ne bloquera pas artificiellement le rendu côté bot, ce qui accélère la découverte du contenu principal.
Le problème surgit quand le contenu critique dépend d'un script async qui s'exécute tard ou de manière aléatoire. Googlebot pourrait alors extraire un DOM incomplet lors de sa première passe, surtout si le crawl budget est serré et qu'il ne laisse pas le temps à tous les scripts de s'exécuter. Le timing devient crucial.
- Async : télécharge en parallèle, exécute dès que disponible, bloque brièvement, pas d'ordre garanti.
- Defer : télécharge en parallèle, exécute après parsing complet, ordre préservé, idéal pour scripts dépendants.
- Ni l'un ni l'autre : blocage total du parsing jusqu'à exécution complète, à éviter absolument pour les scripts non critiques.
- Google mesure directement le FCP et LCP : tout script bloquant dégrade ces métriques et peut impacter le classement, notamment sur mobile.
- Le choix entre async et defer dépend de la nature du script et de ses dépendances, pas d'une règle universelle.
Avis d'un expert SEO
Cette recommandation est-elle vraiment appliquée sur le terrain ?
Dans la pratique, beaucoup de CMS et de thèmes WordPress continuent de charger jQuery et autres bibliothèques sans attribut, en fin de body. C'est mieux que dans le head, mais ça reste un blocage. Les plugins tiers injectent souvent du JavaScript inline sans contrôle, annulant tout effort d'optimisation.
Les sites qui appliquent systématiquement defer sur leurs scripts non critiques constatent des gains mesurables sur PageSpeed Insights et Web Vitals. Mais la mise en œuvre demande un audit précis des dépendances : un defer mal placé peut casser des fonctionnalités si un script attend un DOM déjà manipulé par un autre.
Quelles nuances faut-il apporter à la déclaration de Google ?
Google ne précise pas quel attribut privilégier dans quel cas. Async semble séduisant pour sa rapidité, mais génère des bugs imprévisibles si mal utilisé. Defer paraît plus sûr, mais peut retarder l'exécution de scripts légitimement prioritaires comme un système de consentement cookies.
La vraie question : est-ce que le script modifie le contenu visible avant le premier paint ? Si oui, ni async ni defer ne conviennent, il faut le garder bloquant ou le rendre critique inline. [A vérifier] : Google n'a jamais publié de seuil explicite sur le pourcentage de scripts qu'on peut charger en async/defer sans dégrader l'indexabilité.
Dans quels cas cette règle ne s'applique-t-elle pas ?
Les scripts qui manipulent le DOM avant le premier rendu ne peuvent pas être en defer. Typiquement, un script qui insère du contenu éditorial généré côté client doit s'exécuter de manière synchrone pour que Googlebot le voie, sauf si tu passes par du server-side rendering ou du prerendering.
Les Single Page Applications React/Vue/Angular chargent souvent un bundle unique qui construit tout le DOM. Le mettre en defer est inutile, voire contre-productif : le HTML vide ne sert à rien sans le JS. Dans ce contexte, l'optimisation passe par du code splitting, du lazy loading et du prerendering, pas par defer.
Impact pratique et recommandations
Que faut-il faire concrètement pour appliquer cette recommandation ?
Commence par un audit de tous les scripts chargés sur tes pages clés. Chrome DevTools > Network > filtre JS te montre l'ordre et le timing. Identifie les scripts bloquants (sans async ni defer) qui ne sont pas critiques pour le rendu initial.
Ensuite, catégorise : les scripts tiers indépendants (analytics, pixels publicitaires) passent en async. Les bibliothèques avec dépendances (jQuery + plugins, librairies UI) passent en defer. Les scripts qui modifient le contenu éditorial restent bloquants ou inline, ou tu bascules vers du SSR.
Quelles erreurs éviter lors de la migration async/defer ?
L'erreur classique : tout passer en defer par défaut. Si un script B attend une variable globale définie par un script A en async, tu génères une erreur de référence. Teste systématiquement en local, puis en staging, avant de pousser en production.
Autre piège : les scripts qui écrivent directement dans le DOM via document.write() cassent complètement avec async ou defer. Ces scripts obsolètes doivent être réécrits ou chargés de manière synchrone, même si ça dégrade les performances. Googlebot te pénalisera moins pour un script bloquant que pour un contenu invisible.
Comment vérifier que l'optimisation fonctionne réellement ?
Lance PageSpeed Insights et observe la section « Éliminer les ressources qui bloquent le rendu ». Les scripts avec async ou defer ne devraient plus apparaître dans cette alerte. Le FCP et LCP doivent mécaniquement s'améliorer si l'implémentation est correcte.
Utilise aussi le test d'inspection d'URL dans Search Console. Compare le HTML rendu par Googlebot avec et sans tes modifications. Si le contenu principal est identique et que le temps de rendu diminue, tu as gagné. Si des éléments disparaissent, c'est que tu as mis en async/defer un script critique.
- Auditer tous les scripts externes et identifier ceux qui bloquent le rendu initial
- Appliquer async aux scripts indépendants sans dépendances (analytics, tracking)
- Appliquer defer aux scripts avec dépendances ordonnées (bibliothèques + plugins)
- Tester en environnement de staging avec Chrome DevTools et Lighthouse
- Vérifier le HTML rendu par Googlebot via Search Console après déploiement
- Monitorer FCP, LCP et TBT dans les rapports Core Web Vitals pendant 4 semaines
❓ Questions frequentes
Faut-il toujours préférer defer à async pour le SEO ?
Est-ce que Googlebot attend la fin de l'exécution des scripts defer avant d'indexer ?
Peut-on combiner async et defer sur le même script ?
Les scripts inline peuvent-ils bénéficier de defer ou async ?
Un script en async peut-il dégrader l'indexation si le contenu dépend de lui ?
🎥 De la même vidéo 21
Autres enseignements SEO extraits de cette même vidéo Google Search Central · durée 54 min · publiée le 25/01/2018
🎥 Voir la vidéo complète sur YouTube →
💬 Commentaires (0)
Soyez le premier à commenter.