Guide Infinite Scroll SEO
Comment implement infinite scroll sans losing votre indexation — pourquoi Googlebot ne fait pas scroll, le tall-viewport rendre trick que flattens deux pages dans un, le paginated-URL + History API corriger, et le ecommerce category-page cas.
«Infinite scroll loads more content as you scroll, instead of via numbered pages — and Googlebot never scrolls or clicks, so anything gated behind that action is invisible by default. Google renders in a very tall viewport (about 411×12,140px mobile, 1024×9,307px desktop) as a workaround, but that same tall viewport can trigger the scroll loader during rendering and fold two logical pages into one indexed URL — a failure mode where a 'not indexed' page is actually indexed as part of another. The fix is architectural: give every chunk a real, persistent, absolute URL (like ?page=2), link them with crawlable anchors, and update the address bar with the History API as the user scrolls. rel=next/prev is legacy (Google dropped it in 2019; Bing still supports it). On ecommerce category pages, back it all with sitemaps or a Merchant Center feed and verify in the URL Inspection Tool's rendered HTML. A production build also needs a real popstate/back-forward contract, distinct loading/error/end states, and deliberate accessibility — none of that comes for free just because the indexing fix is in place.» _(Traduction)_ (Résumé en français du champ tldr : le texte source est conservé pour relecture francophone.)
Preuve à l’appui de cette affirmation Google Search does not generally interact with scrolling controls, so infinite-scroll content needs crawlable paginated URLs. Portée : Current official or standards documentation. Niveau de confiance : élevé · Vérifié : Google: Lazy-loaded content Preuve à l’appui de cette affirmation The History API can update URLs for loaded page chunks without a full navigation. Portée : Current official or standards documentation. Niveau de confiance : élevé · Vérifié : MDN: History APITL;DR — Infinite scroll charge plus contenu as vous scroll bas, au lieu de making vous click à page 2, page 3, et donc on. Le catch: Googlebot ne fait pas scroll et ne fait pas click. Donc si votre produits or articles seulement apparaître une fois a visitor scrolls, Google peut jamais voir les. Le corriger est à donner chaque “page” de contenu a réel URL de son propre, donc moteur de recherches ont quelque chose à explorer même though ils jamais touch votre scroll.
Ce que infinite scroll is
vous avez utilisé il a hundred times sans naming il. On a social feed, a shopping category, or a long article, vous garder scrolling et plus stuff garde appearing — aucun “Suivant page” button, aucun page numbers. c’est infinite scroll: JavaScript watches comment far vous avez scrolled et, as vous near le bottom, quietly récupère et ajoute le suivant batch de contenu.
It feels seamless pour personnes. The problem is que moteur de recherches aren’t personnes.
Pourquoi it’s risky pour le SEO
Google trouve et lit votre pages avec an automated program appelé Googlebot. Googlebot charge votre page, mais il fait pas behave comme a human visitor:
- It doesn’t scroll bas lune page.
- It doesn’t click buttons.
«So any content that only loads after someone scrolls (or clicks “Load more”) simply isn’t there as far as Googlebot is concerned. If your category page shows 24 products up front and loads the rest on scroll, Google may only ever see those first 24. » (Traduction) (Résumé en français de la section onze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## The one rule that keeps it safe » (Traduction) (Résumé en français de la section douze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Here’s the whole trick in one sentence: every chunk of content needs its own real web address. » (Traduction) (Résumé en français de la section treize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Instead of relying only on scrolling, a search-friendly setup also has plain,
crawlable pages behind the scenes — example.com/shoes?page=2,
?page=3, and so on — linked together with normal links Google can follow. The
infinite scroll is the nice experience for humans; the numbered URLs are the
safety net for search engines. Modern implementations even swap the address in
your browser bar as you scroll, so if you copy the URL you land back in the exact
same spot.
» (Traduction) (Résumé en français de la section quatorze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Ce que la plupart personnes obtenir incorrect
- “Google peut rendre JavaScript maintenant, donc il’ll figure il out.” Google peut exécuter votre JavaScript — mais il encore ne va pas scroll or click à trigger le loader. Étant able à rendre n’est pas le même as taking action.
- “A ‘Load more’ button is safer than auto-scroll.” Seulement si que button est a réel lien à a réel page. A button que simplement exécute a click handler est invisible à Google aussi.
- “Si a page n’est pas indexé, Google est ignoring il.” Avec infinite scroll, “pas indexé” parfois signifie le contenu obtenu merged dans un autre page par accident — qui est a différent problème avec a différent corriger.
Infinite scroll n’est pas banned or penalized. Fait correct — avec réel URLs underneath — c’est complètement fine. Vouloir le mechanics de pourquoi deux pages parfois obtenir indexé as un, plus le réel code modèle à implement il? Switch à le Avancé tab.
«> TL;DR — Googlebot never scrolls and never clicks, so scroll-gated content is
Preuve à l’appui de cette affirmation Google Search does not generally interact with scrolling controls, so infinite-scroll content needs crawlable paginated URLs. Portée : Current official or standards documentation. Niveau de confiance : élevé · Vérifié : Google: Lazy-loaded content Preuve à l’appui de cette affirmation The History API can update URLs for loaded page chunks without a full navigation. Portée : Current official or standards documentation. Niveau de confiance : élevé · Vérifié : MDN: History APIinvisible by default. Google’s workaround is to render in a very tall viewport (roughly 411×12,140px mobile, 1024×9,307px desktop) — but that same height can trigger the scroll loader during rendering, folding the next logical page into the current one so two pages get indexed as a single URL. The durable fix is architectural: persistent, absolute, per-chunk URLs (e.g.
?page=12), linked with crawlable anchors, with the History API updating the address bar as each chunk becomes primary.rel=next/rel=previs legacy for Google (dropped 2019) but still respected by Bing. On ecommerce PLPs, sitemaps or a Merchant Center feed are a discovery backstop. Verify everything in the URL Inspection Tool’s rendered HTML. » (Traduction) (Résumé en français de la section vingt, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Premier, a disambiguation
Si vous recherche “Google infinite scroll” vous’ll hit résultats à propos de Google’s propre continuous scroll on son résultats de recherche pages — a SERP fonctionnalité Google turned on et alors discontinued dans mid-2024. c’est a Google-produit UX décision et a rien à faire avec comment Googlebot explore votre site. Ce article est à propos de le latter: infinite scroll as a chargement modèle on votre propre pages, et si Google peut indexer ce que il charge.
Le core constraint: Google ne fait pas interact avec votre page
«Everything here follows from one fact. Google’s own lazy-loading docs say the recommended patterns “don’t rely on user actions, such as scrolling or clicking, to load content, which is important as Google Search does not interact with your page.” The pagination doc says it even more plainly: “Google’s crawlers don’t ‘click’ buttons and generally don’t trigger JavaScript functions that require user actions to update the current page contents.” » (Traduction) (Résumé en français de la section vingt-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
As Je put il dans mon propre JavaScript SEO guide: “Googlebot ne fait pas prendre action on webpages. c’est pas going à click choses or scroll, mais que ne fait pas signifier il ne fait pas ont workarounds. Tant que contenu est chargé dans le DOM sans a nécessaire action, Google va voir il. Si c’est pas chargé dans le DOM jusqu’à après a click, alors le contenu ne va pas être trouvé.”
So infinite scroll que seulement triggers on a réel scroll event is a content-discovery problem avant it’s anything sinon.
«## Google’s workaround: a very tall viewport » (Traduction) (Résumé en français de la section vingt-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Google doesn’t simulate scrolling. Instead it renders your page in an unusually tall viewport, so content a few screens down is already inside the rendered area without anyone scrolling. The earliest on-record hint of this was John Mueller’s 2017 note that “Googlebot renders with a very tall viewport, which skews some CSS (often images). Try in Chrome dev-tools, eg 9000px high viewport.” » (Traduction) (Résumé en français de la section vingt-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Le spécifique numbers j’ai documented: pour mobile, Google charge lune page à a screen size de 411×731 pixels et resizes le length à 12 140 pixels — “essentially, il becomes a vraiment long phone avec a screen size de 411×12140 pixels. Pour desktop, il fait le même et goes depuis 1024×768 pixels à 1024×9307 pixels.” (Je haven’t vu recent re-tests de ceux exact figures, et ils peut vary avec page length; le original dimensions trace back à independent testing par SEO researcher JR Oakes.) Le point n’est pas le exact pixel count — c’est que Google fakes “seeing far bas le page” avec height, pas avec movement.
Treat les deux le exact pixel dimensions et le deux-pages-merged behavior ci-dessous as dated, implementation-spécifique observations plutôt que a stable plateforme contract — Google ne fait pas publish an official spec pour soit number, et rendu behavior peut modifier. ne pas assume votre site behaves le même façon; confirmer actuel behavior pour votre propre URLs avec le rendu-HTML tester dans le suivant section au lieu de taking ces figures as a guarantee.
The échec mode nobody explique: two pages indexé as un
A normal navigateur viewport arrête après page un. Google's rendre viewport expands beaucoup taller, reaches le infinite-scroll trigger sans a réel utilisateur scroll, et appends page deux dans le même DOM. Le merged DOM est alors indexé as un URL au lieu de deux séparé pages.
© Patrick Stox LLC · CC BY 4.0 ·
Ici’s où le tall viewport bites back. Parce que le rendre viewport est donc tall,
le scroll-triggered loader peut fire during rendu même though rien
“scrolled” dans le human sense — le sheer DOM height peut être suffisant à satisfy an
IntersectionObserver or a scroll-position vérifier. Quand que se produit, le loader
appends le suivant logical page’s contenu dans le actuel page’s rendre, et
Google indexes le merged résultat as a unique URL.
I’ve diagnosed ce several times. From my JavaScript SEO guide:
“Un autre problème j’ai vu avec ce setup est, occasionally, deux pages obtenir indexé as un. j’ai vu ce a quelques times quand personnes said ils ne pouvait pas obtenir leur page indexé. Mais j’ai trouvé leur contenu indexé as partie de un autre page c’est généralement le previous post depuis les.”
“Mon theory est que quand Google resized le viewport à être plus long, il triggered le infinite scroll et chargé un autre article dans quand il était rendu. Dans ce cas, ce que Je recommend est à bloquer le JavaScript fichier que handles le infinite scrolling donc le functionality ne peut pas trigger.”
John Mueller décrit le même mechanic depuis Google’s side dans a 2022 office-hours session: Google renders avec a élevé viewport, que “voudrait trigger some amount de infinite scrolling,” et “nous pourrait ont deux or three de ces pages chargé on un page avec infinite scroll, mais pas tout.” (Que office-hours citation est relayed via Moteur de recherche Journal’s écrire-up, pas confirmed contre le principal recording.)
Two consequences fall out of ce:
- il y a aucun guarantee de comment beaucoup obtient pulled dans. Pourrait être rien supplémentaire, pourrait être deux or three pages, jamais reliably tout. Infinite scroll alone n’est pas a dependable façon à obtenir deep contenu indexé.
- “Pas indexé” peut être a misdiagnosis. Le manquant page peut pas être manquant à tout — il peut être indexé as partie de an précédent URL. Que nécessite a différent corriger que a normal indexation bug.
How to diagnose it
Utiliser Search Console’s Inspection d’URL Outil et lire le rendu HTML, pas le raw source. Google’s docs sont explicit: “Vous pouvez utiliser le Inspection d’URL Outil dans Search Console à voir si tout contenu était chargé. Vérifier le rendu HTML à assurez-vous votre contenu est dans le rendu HTML par looking pour il dans Inspection d’URL Outil.” Recherche le rendu HTML pour contenu vous expect à être sur la page 1 seulement. Si vous trouver contenu depuis page 2 (or le suivant article) sitting à l’intérieur page 1’s rendre, vous avez reproduced le merge bug.
Vous pouvez aussi replicate le tall viewport locally: ouvrir Chrome DevTools, définir a very tall custom viewport (Mueller’s suggestion était ~9000px), et charger lune page à voir si votre loader fires avec aucun scrolling.
Le corriger: paginated URLs + le History API
Le durable corriger est architectural, straight depuis Google’s actuel lazy-loading doc. À faire infinite scroll indexable, “assurez-vous votre site web prend en charge paginated chargement de ces chunks”:
- “Donner chaque chunk son propre persistent, unique URL.”
- “Garantir que le contenu affiché on chaque URL remains le même chaque temps c’est
chargé dans a navigateur” — Google suggests absolute page numbers comme
?page=12. - “Avoid en utilisant relative elements like
?date=yesterdaydans ces URLs” — an adresse que renvoie différent contenu chaque charger est unusable as a canonical. - “Lien sequentially à le individual URLs donc que moteur de recherches peut découvrir le
URLs dans a paginated définir” — réel
<a href>liens, pas click handlers. - “Quand a nouveau page chunk est chargé dans réponse à le utilisateur scrolling, et il becomes le principal visible element pour le utilisateur, mettre à jour le affiché URL en utilisant le History API.”
Que dernier point est le elegant partie. history.pushState() / replaceState() swaps
l’URL dans le adresse bar as le utilisateur scrolls past chaque boundary — donc le visible
URL toujours matches le principal contenu, et le utilisateur peut refresh, share, et lien à
exactly où ils sont. Meanwhile le crawlable ?page=N URLs exist independently, donc
Google peut reach chaque chunk directement si or pas le renderer ever triggers le
scroll.
Two implementation notes que matter:
- Utiliser
IntersectionObserver(or native navigateur lazy-loading), pas a rawscrolllistener. Il performs far meilleur (aucun scroll-thrash) et c’est le “charger quand visible” mechanism Google endorses pour deferred contenu. - Garder le paginated définir discoverable independently de le JS. Réel anchors dans le
DOM, et/or le
?page=NURLs listed dans votre XML sitemap. Whatever le renderer captures, le sitemap-et-liens couche est votre backstop.
Si a actif site est déjà exhibiting le merge bug et vous devez arrêter le bleeding
avant vous pouvez rebuild, mon blunt emergency corriger est à bloquer le JavaScript fichier que
triggers infinite scroll dans robots.txt donc il physically ne peut pas fire during
rendu — buying temps à ship le proper paginated-URL architecture.
Navigation state: back, forward, refresh, et share ont à reconstruct le même view
Le History API point ci-dessus covers half le contract — updating le adresse bar as a chunk becomes principal. Le autre half est making certain chaque entry chemin back dans que URL en réalité reconstructs le correct contenu, pas simplement le correct scroll position:
- Utiliser
pushState()quand a chunk becomes le principal visible contenu pour le premier temps — c’est a réel navigation étape, et c’est ce que rend le back button meaningful. - Utiliser
replaceState()pour corrections que ne devrait pas créer leur propre back-button arrêter, comme syncing l’URL après a rapide scroll past plusieurs chunks à une fois. - Listen pour
popstateet re-rendre (or re-récupérer) le chunk que matches l’URL dans le event. Le navigateur’s par défaut back/forward behavior restores scroll position, pas le dynamic liste state votre JavaScript construit — si a utilisateur hits back après votre loader appended 40 plus éléments, vous devez reconstruct qui éléments belong on que page, pas simplement scroll les là. - ne pas lean on automatic scroll restoration alone à solve ce. Il contrôle où le viewport lands, pas ce que contenu est présent — si le underlying liste peut modifier entre visits (nouveau produits ajouté, éléments out de stock), scroll position sans contenu reconstruction peut strand le utilisateur dans le incorrect context.
Ce est le même discipline le paginated-URL corriger déjà dépend on: a chunk’s URL a à retourner le contenu il promised on a fresh charger, a refresh, et a Recherche-Console actif tester — pas simplement le premier temps c’est récupéré mid-scroll.
Chargement, error, and end-of-results states
A production implementation nécessite plus states que “loading” and “loaded”:
- Initial charger — le premier chunk devrait déjà être dans le raw HTML le serveur sends, pas assembled entirely par JS après le fact.
- Suivant-chunk chargement — a visible dans-progress indicator donc utilisateurs (et anyone testing avec assistive tech) know a récupérer est underway.
- Vide — a distinct state pour zero résultats, pas a blank space que semble broken.
- Erreur / retry — a failed récupérer ne devrait pas silently strand lune page avec aucun façon à essayer à nouveau, et a retry ne devrait pas duplicate or reorder éléments déjà on lune page.
- Fin de résultats — a clair signal, pas an infinite spinner, une fois il y a rien left à charger.
None de ce est Google-spécifique, mais c’est le même reliability le paginated-URL corriger dépend on: si le loader peut silently break mid-récupérer, vous pouvez’t confiance que quelconque donné explorer or utilisateur session en réalité captured le chunk il devrait ont.
Accessibility and performances: two choses infinite scroll doesn’t give vous pour free
Infinite scroll a aucun inherent Core Web Vitals résultat, bon or mauvais — c’est determined entirely par comment vous construire il. Chaque appended chunk grows le DOM, et a grand suffisant DOM raises layout et style-recalculation coût, donc watch append coût, image chargement, layout shift depuis contenu sans reserved space, et long tasks as le liste grows. On very long pages, considérer virtualizing chunks que ont scrolled far out de view (removing leur DOM nodes) au lieu de letting le DOM grow unbounded.
Accessibility nécessite its propre deliberate design, pas an assumption que “it renders, so it’s fine”:
- Keyboard utilisateurs besoin à être able à reach nouveau contenu — et le footer or end-de-page navigation — sans lune page silently growing out depuis sous leur tab order.
- Screen lecteur utilisateurs besoin nouveau contenu announced sans interrupting ce que ils sont doing — a polite status region, pas a disruptive alert, est le usual modèle.
- Le WAI-ARIA feed design modèle est construit pour exactly ce cas: article-level regions à l’intérieur a feed container, avec défini keyboard behavior pour moving entre éléments et pour reaching contenu avant et après le feed.
- Focus ne devrait pas silently jump or obtenir lost quand a nouveau chunk charge.
None de ce est optional cleanup. c’est le difference entre infinite scroll que fonctionne pour everyone et un que seulement fonctionne pour a mouse utilisateur avec JavaScript qui jamais strays depuis le happy chemin.
The historical context: rel=suivant/prev is legacy
«If you learned pagination years ago, you learned rel="next" / rel="prev". Google
introduced them in 2011 and paired them with its original 2014 “infinite scroll
search-friendly recommendations” (paginate the content, provide component pages).
Then in 2019 Google announced it hadn’t been using those tags for years and formally
dropped them. The pagination doc confirms it today: “In the past, Google used
<link rel="next" href="..."> and <link rel="prev" href="..."> to identify next page
and previous page relationships. Google no longer uses these tags, although these links
may still be used by other search engines.”
» (Traduction) (Résumé en français de la section soixante-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Donc le actuel Google recipe est unique URLs + crawlable liens + le History API — aucun
rel=next/rel=prev requis. Mais “other search engines” inclut Bing, qui
encore respects les, donc il y a aucun harm dans keeping les dans votre markup pour cross-moteur
avantage et accessibility. Bing itself ne fait pas publish infinite-scroll-spécifique
guidance; son stance reduces à le general JS-rendu caution son team laid out —
bingbot peut rendre JavaScript mais “il est difficult pour bingbot à traiter JavaScript à
scale,” donc a crawlable paginated fallback aide Bing pour exactly le même raison il
aide Google.
Ecommerce category pages: le highest-stakes cas
Le la plupart courant real-world infinite scroll est on ecommerce category / produit listing pages (PLPs), et c’est où le risque coûts réel money. Si deep-catalog produits past le premier screenful jamais obtenir indexé, ils ne peut pas classer, et vous lose le long tail de produit-level trafic organique. Ce est le même territory covered dans depth dans le category-page material — infinite scroll est un plus raison ceux pages besoin a crawlable structure underneath le UX.
Two backstops matter ici:
- XML sitemaps listing chaque canonical produit et paginated category URL, donc discovery ne fait pas depend on le renderer.
- A Merchant Center produit feed, qui feeds Google produit données independently de whatever le category page’s renderer captures.
Lumar’s analysis de top UK fashion retailers trouvé infinite scroll à être, dans leur words, “le biggest loser quand il comes à indexability et SEO friendliness” parmi le pagination patterns — a utile reminder que ce n’est pas a theoretical edge cas, c’est le par défaut échec mode de a very popular PLP UX. (Lumar’s spécifique percentage figures devrait être lire depuis leur actif rapport avant citing an exact number.)
Infinite scroll vs. pagination vs. charger plus
«Google’s pagination doc frames three UX patterns and is honest about the tradeoffs. Infinite scroll “uses a single page for all content” and is “intuitive — the user just keeps scrolling,” but it “can lead to ‘scrolling fatigue’ because of unclear result size” and “can’t handle very large numbers of results.” Classic numbered pagination is the most robust for SEO because every page is inherently a real URL. “Load more” sits in between — fine if the button is (or wraps) a real link to a paginated URL, useless for SEO if it’s a pure click handler. » (Traduction) (Résumé en français de la section soixante-treize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Le décision n’est pas “which is allowed” — tout three sont allowed. c’est “qui UX faire vous vouloir, et a fait vous construire le crawlable URL couche underneath il.” Mueller’s 2023 summary est le entier chose dans un line: “si chaque piece or virtual page est aussi accessible et findable via a unique URL, généralement il devrait être fine à ont infinite scroll.”
AI summary
A condensed prendre on the Avancé version:
«- Root constraint: Googlebot doesn’t scroll or click. Content gated behind a
scroll or click event is invisible to it by default (“Google Search does not
interact with your page”).
» (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Google’s workaround: it renders in a very tall viewport (~411×12,140px mobile,
~1024×9,307px desktop) instead of scrolling.
» (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- The failure mode: that tall viewport can trigger the scroll loader during
rendering, folding the next logical page into the current one — so two pages get
indexed as a single URL. A “not indexed” page may actually be indexed as part of
another URL.
» (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- No guarantee: per Mueller, Google might load “two or three of these pages … but
not everything.” Infinite scroll alone is not a reliable deep-indexing method.
» (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- The fix (architectural): persistent, unique, absolute per-chunk URLs (e.g.
?page=12), linked with crawlable <a href>, with the History API
(pushState/replaceState) updating the address bar as each chunk becomes primary.
» (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Trigger mechanism: IntersectionObserver / native lazy-load, not a raw scroll
listener.
» (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Legacy note: rel=next/rel=prev dropped by Google in 2019; Bing still supports
it, so keep it for cross-engine benefit.
» (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie sept : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Ecommerce: PLPs are the highest-stakes case; back them with sitemaps and a
Merchant Center feed. Verify in the URL Inspection Tool’s rendered HTML.
» (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie huit : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Emergency fix on a live merge bug: block the infinite-scroll JS file so it can’t
fire during rendering while you rebuild.
» (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie neuf : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Navigation state: pushState for a real navigation step, replaceState for
in-place corrections, and a popstate handler that reconstructs the chunk’s content
— not just its scroll position — on back/forward.
» (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie dix : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Loading/error/end states: distinct initial-load, next-chunk-loading, empty,
error/retry, and end-of-results states; a broken loader is a reliability problem
before it’s an SEO one.
» (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie onze : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Accessibility and performance: infinite scroll has no inherent Core Web Vitals
outcome (it’s what you build); keyboard reachability, non-disruptive announcements,
and the WAI-ARIA feed pattern are separate design work from the indexing fix.
» (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie douze : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Dated observations: treat the exact viewport pixel dimensions and the
merge-bug mechanics as implementation-specific, not a stable spec — verify per URL.
» (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie treize : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Official documentation » (Traduction) (Résumé en français de la section quatre-vingt-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Primary-source documentation on infinite scroll, pagination, and JS rendering. » (Traduction) (Résumé en français de la section quatre-vingt-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Google
» (Traduction) (Résumé en français de la section quatre-vingt-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Fix lazy-loaded content — includes the “Support paginated loading for infinite scroll” section (unique per-chunk URLs, absolute page numbers, History API) and the URL Inspection testing step. Last updated 2025-12-10.
» (Traduction) (Résumé en français de la section quatre-vingt-quatre, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Pagination, incremental page loading, and their impact on Google Search — the three UX patterns (pagination / load more / infinite scroll), their pros/cons, the crawler-interaction note, and the rel=next/rel=prev deprecation.
» (Traduction) (Résumé en français de la section quatre-vingt-quatre, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Infinite scroll search-friendly recommendations — the original 2014 blog post (historical; the rel=next/rel=prev pairing it described is now superseded).
» (Traduction) (Résumé en français de la section quatre-vingt-quatre, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- September 2023 SEO Office Hours Transcript — Mueller’s on-the-record restatement of the unique-URL rule.
» (Traduction) (Résumé en français de la section quatre-vingt-quatre, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Understand the JavaScript SEO basics — the broader rendering context infinite scroll sits inside.
» (Traduction) (Résumé en français de la section quatre-vingt-quatre, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)
«Bing / Microsoft
» (Traduction) (Résumé en français de la section quatre-vingt-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- bingbot Series: JavaScript, Dynamic Rendering, and Cloaking. Oh My! — Bing’s general JS-rendering guidance (no infinite-scroll-specific page exists; Bing still respects rel=next/rel=prev).
» (Traduction) (Résumé en français de la section quatre-vingt-cinq, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Quotes from the source » (Traduction) (Résumé en français de la section quatre-vingt-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
On-le-record statements depuis Google et Bing. Chaque lien est a deep lien que jumps à le quoted passage on le page source.
Google — infinite scroll & le paginated-loading règle
«- “To implement infinite scroll in an indexable way, make sure your website supports paginated loading of these chunks.” … “Give each chunk its own persistent, unique URL.” — Google Search Central, “Fix lazy-loaded content.” Jump to quote » (Traduction) (Résumé en français de la section quatre-vingt-onze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- “When a new page chunk is loaded in response to the user scrolling, and it becomes the primary visible element for the user, update the displayed URL using the History API.” Jump to quote » (Traduction) (Résumé en français de la section quatre-vingt-onze, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- “The methods mentioned don’t rely on user actions, such as scrolling or clicking, to load content, which is important as Google Search does not interact with your page.” Jump to quote » (Traduction) (Résumé en français de la section quatre-vingt-onze, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- “You can use the URL Inspection Tool in Search Console to see if all content was loaded. Check the rendered HTML to make sure your content is in the rendered HTML by looking for it in URL Inspection Tool.” Jump to quote » (Traduction) (Résumé en français de la section quatre-vingt-onze, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
Google — pagination doc: robot d’exploration behavior & rel=suivant/prev
«- “Google’s crawlers don’t ‘click’ buttons and generally don’t trigger JavaScript functions that require user actions to update the current page contents.”
Jump to quote
» (Traduction) (Résumé en français de la section quatre-vingt-treize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “In the past, Google used <link rel="next" href="..."> and <link rel="prev" href="..."> to identify next page and previous page relationships. Google no longer uses these tags, although these links may still be used by other search engines.”
Jump to quote
» (Traduction) (Résumé en français de la section quatre-vingt-treize, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«John Mueller, Google — September 2023 office hours » (Traduction) (Résumé en français de la section quatre-vingt-quatorze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “It depends how you implement infinite scrolling. if each piece or virtual page is also accessible and findable through a unique URL, generally it should be fine to have infinite scroll.” Jump to quote » (Traduction) (Résumé en français de la section quatre-vingt-quinze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
John Mueller, Google — le “9000px viewport” tweet (Nov 2017)
- “Googlebot renders avec a very tall viewport, qui skews some CSS (souvent images). Try dans Chrome dev-outils, eg 9000px élevé viewport.” — reproduced par Moteur de recherche Roundtable. Lire le coverage
Bing — general JS rendering (aucun infinite-scroll-specific page)
«- “As we shared last week at SMX East, bingbot is generally able to render JavaScript. However, bingbot does not necessarily support all the same JavaScript frameworks that are supported in the latest version of your favorite modern browser.” — Fabrice Canel & Frédéric Dubut, Microsoft Bing. Jump to quote » (Traduction) (Résumé en français de la section quatre-vingt-dix-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Remarque: John Mueller’s February 2022 office-hours remarks on “two or three of these pages loaded on one page,” et Martin Splitt’s April 2020 “Googlebot ne fait pas scroll” conference comments, sont relayed via Moteur de recherche Journal’s écrire-ups plutôt que confirmed contre le principal recordings — treat les as élevé-confidence mais re-vérifier le actif source avant quoting verbatim.Qui pagination pattern devrait vous utiliser?
Fonctionner top to bottom.
1. Fait le contenu past le premier screen besoin à classer dans recherche?
- Aucun (e.g. an internal-seulement feed, a logged-dans dashboard) → quelconque modèle est fine; optimize purely pour UX.
- Oui → garder going.
«2. Do you already have (or can you build) a real per-chunk URL for every batch? » (Traduction) (Résumé en français de la section cent six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- No, and you can’t → use classic numbered pagination. Every page is a real URL by default, so it’s the lowest-risk pattern for SEO. » (Traduction) (Résumé en français de la section cent six, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- Yes → infinite scroll or “load more” are both fine, continue. » (Traduction) (Résumé en français de la section cent six, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
3. Comment grand est le définir?
- Very grand (thousands de éléments, deep catalog) → préférer numbered pagination or infinite-scroll-over-real-URLs; pure infinite scroll “ne peut pas handle very grand numbers de résultats.” Ajouter sitemaps as a discovery backstop.
- Moderate → infinite scroll or charger plus, backed par paginated URLs, est fine.
4. Building infinite scroll — est il wired à réel URLs + History API?
- Aucun (scroll event seulement, aucun URLs) → ne faites pas ship. Ce est le setup que obtient deep contenu merged/unindexed.
- Oui (
?page=NURLs + crawlable anchors +pushState) → ship il, alors vérifier dans le Inspection d’URL Outil’s rendu HTML.
5. Déjà actif et a deep page “isn’t indexed”?
- Vérifier le Inspection d’URL Outil’s rendu HTML de le previous page/post premier — le “manquant” contenu peut être merged là.
- Si il est → emergency corriger: bloquer le infinite-scroll JS fichier donc il ne peut pas fire during rendu, alors rebuild on paginated URLs.
Search-friendly infinite scroll checklist
«- [ ] Every content chunk has its own persistent, unique, absolute URL (e.g.
?page=2, not ?date=yesterday).
» (Traduction) (Résumé en français de la section cent treize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- [ ] Each URL returns the same content every time it loads (stable, not
session-dependent).
» (Traduction) (Résumé en français de la section cent treize, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- [ ] Chunks are linked with real <a href> links, discoverable without running JS.
» (Traduction) (Résumé en français de la section cent treize, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- [ ] The visible URL updates via the History API (pushState/replaceState) as
each chunk becomes the primary content.
» (Traduction) (Résumé en français de la section cent treize, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- [ ] The scroll loader uses IntersectionObserver (or native lazy-loading), not a
raw scroll event listener.
» (Traduction) (Résumé en français de la section cent treize, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«- [ ] Paginated URLs are listed in the XML sitemap (and, for ecommerce, backed by a
Merchant Center feed).
» (Traduction) (Résumé en français de la section cent treize, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)
«- [ ] rel=next/rel=prev optionally present for Bing (harmless for Google, which
ignores it).
» (Traduction) (Résumé en français de la section cent treize, sous-partie sept : le texte source est conservé pour vérification lors de la relecture francophone.)
«- [ ] URL Inspection Tool → rendered HTML confirms deep content is present and not
merged from an adjacent page.
» (Traduction) (Résumé en français de la section cent treize, sous-partie huit : le texte source est conservé pour vérification lors de la relecture francophone.)
«- [ ] Locally reproduced with a tall DevTools viewport (~9000px) to confirm the loader
doesn’t over-fire during render.
» (Traduction) (Résumé en français de la section cent treize, sous-partie neuf : le texte source est conservé pour vérification lors de la relecture francophone.)
«- [ ] A popstate handler reconstructs chunk content on back/forward, not just
scroll position.
» (Traduction) (Résumé en français de la section cent treize, sous-partie dix : le texte source est conservé pour vérification lors de la relecture francophone.)
«- [ ] Distinct loading, error/retry, empty, and end-of-results states exist — a
failed fetch doesn’t silently strand the page.
» (Traduction) (Résumé en français de la section cent treize, sous-partie onze : le texte source est conservé pour vérification lors de la relecture francophone.)
«- [ ] Keyboard users can reach new content and the page footer; new content is
announced via a polite status region, not a disruptive alert.
» (Traduction) (Résumé en français de la section cent treize, sous-partie douze : le texte source est conservé pour vérification lors de la relecture francophone.)
Ce que breaks infinite scroll pour le SEO
Scroll-event-seulement chargement avec aucun réel URLs. Le classic mistake. Contenu lives seulement dans le DOM après a scroll fires — Googlebot jamais scrolls, donc c’est invisible. il y a rien à explorer et rien à fall back on.
A “Charger plus” button c’est a pure click handler.
Feels safer que auto-scroll, n’est pas. Google ne fait pas click buttons soit. Il seulement aide
si le button est (or wraps) a réel <a href> à a paginated URL.
Fragment/hash URLs pour pagination (#page=2).
Fragments don’t créer distinct crawlable URLs. Utiliser réel query-parameter or path-based
URLs à la place.
Relative or unstable URLs (?date=yesterday, session-scoped content).
Si the même URL renvoie différent content on différent loads, it can’t serve as a stable,
indexable page. Utiliser absolute page numbers.
Ignoring le tall-viewport merge bug. Assuming “pas indexé” signifie Google est ignoring lune page. Dans infinite scroll il souvent signifie le contenu obtenu folded dans an adjacent URL par le rendre-time trigger — a différent problème needing a différent corriger.
Blocking votre JS/CSS globally as a “corriger.” Blocking le spécifique infinite-scroll trigger fichier est a deliberate emergency mesurer. Blocking tout JS/CSS n’est pas — il wrecks rendu à travers le entier page.
«## Infinite scroll SEO — cheat sheet » (Traduction) (Résumé en français de la section cent vingt-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
The three UX patterns
| Pattern | Inherently crawlable? | SEO risk | Meilleur pour |
|---|---|---|---|
| Numbered pagination | Yes (réel URLs) | Lowest | Grand sets, deep catalogs |
| Charger plus (button) | Seulement si button = réel lien | Medium | Moderate sets |
| Infinite scroll | Aucun — nécessite URL couche ajouté | Highest sans URLs | Feeds, browsing UX |
Le non-negotiables pour infinite scroll
- Persistent, unique, absolute URL per chunk (
?page=12). - Même contenu on chaque charger (aucun
?date=yesterday). - Crawlable
<a href>liens entre chunks. - History API (
pushState/replaceState) à sync le adresse bar. IntersectionObserver, pas a rawscrolllistener.
Rapide facts
- Googlebot: ne fait pas scroll, ne fait pas click.
- Rendre viewport (reported): ~411×12,140px mobile, ~1024×9,307px desktop.
- Merge bug: tall viewport peut fire le loader mid-rendre → deux pages indexé as un.
rel=next/rel=prev: Google dropped il dans 2019; Bing encore utilise il.- Vérifier: Inspection d’URL Outil → rendu HTML.
- Emergency corriger on a actif merge bug: bloquer le infinite-scroll JS fichier.
Ce que bon and bad implementations regarder comme
«Bad — scroll-only, invisible to Google » (Traduction) (Résumé en français de la section cent trente-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«The category page ships 24 products in the HTML. A scroll listener fetches the next
24 and appends them. There are no ?page=N URLs anywhere, no anchors, no History API.
Googlebot loads the page, never scrolls, and indexes 24 products. The other 300 in the
catalog are undiscoverable through this page.
» (Traduction) (Résumé en français de la section cent trente-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Bad — the merge bug in the wild » (Traduction) (Résumé en français de la section cent trente-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«A publisher’s blog uses infinite scroll to append the next post below the current one. A writer complains their new article “won’t index.” It’s actually indexed — as part of the previous post’s URL, because Google’s tall render viewport triggered the loader and folded the next article into the current page’s render. Fix: paginate properly, and in the meantime block the infinite-scroll trigger script. » (Traduction) (Résumé en français de la section cent trente-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Good — infinite scroll over real URLs » (Traduction) (Résumé en français de la section cent trente-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«The same category exists at /shoes?page=1, /shoes?page=2, … each a real URL returning
stable content, all listed in the XML sitemap and linked with <a href> at the foot of the
listing. For humans, IntersectionObserver loads the next chunk as they approach the bottom
and history.pushState() updates the address bar to ?page=2 when that batch becomes the
primary content. Google reaches every page directly via the links and sitemap; the scroll UX
is pure enhancement on top.
» (Traduction) (Résumé en français de la section cent trente-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Implementation and diagnostic snippets » (Traduction) (Résumé en français de la section cent quarante et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Le History API modèle (client-side)
Charger chaque chunk quand c’est à propos de à enter view avec IntersectionObserver, alors swap le
visible URL quand que chunk becomes principal. Le clé est que le ?page=N URLs sont réel
pages que exist serveur-side regardless de ce script.
// A sentinel element sits at the bottom of the current chunk.
const sentinel = document.querySelector('#load-more-sentinel');
let nextPage = 2;
const io = new IntersectionObserver(async (entries) => {
if (!entries[0].isIntersecting) return;
const res = await fetch(`/shoes?page=${nextPage}&partial=1`);
const html = await res.text();
document.querySelector('#product-grid').insertAdjacentHTML('beforeend', html);
// Update the address bar so refresh/share/link land on this chunk.
// pushState adds a history entry; replaceState if you don't want back-button steps.
history.pushState({ page: nextPage }, '', `/shoes?page=${nextPage}`);
nextPage++;
}, { rootMargin: '600px' }); // start loading before the user hits the very bottom
io.observe(sentinel);«And crucially, the crawlable fallback still lives in the DOM — this is what Google follows: » (Traduction) (Résumé en français de la section cent quarante-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
<nav aria-label="Pagination">
<a href="/shoes?page=2" rel="next">Next</a>
<!-- rel="next"/"prev" is ignored by Google since 2019 but still used by Bing -->
</nav>«### DevTools console: does your loader fire without a real scroll? » (Traduction) (Résumé en français de la section cent quarante-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Simulate Google’s tall viewport locally, then check whether extra chunks loaded on their own. In Chrome DevTools, set a very tall custom device viewport (~1024×9000), reload, and run this in the Console to count how many chunks are present with no manual scrolling: » (Traduction) (Résumé en français de la section cent quarante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
// Count rendered product cards (adjust the selector to your markup)
console.log('cards rendered without scrolling:', document.querySelectorAll('#product-grid .product-card').length);
// If this is much higher than your per-page count, the loader is over-firing on height alone.«### DevTools console: confirm the paginated URLs actually exist » (Traduction) (Résumé en français de la section cent cinquante, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Before trusting the fallback, verify each ?page=N returns real, distinct content
server-side (not a JS-only route):
» (Traduction) (Résumé en français de la section cent cinquante et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
// Run in the console; a real paginated URL should return HTML containing products.
for (const n of [2, 3, 4]) {
const html = await (await fetch(`/shoes?page=${n}`)).text();
console.log(`page ${n}: ${html.includes('product-card') ? 'has products ✅' : 'EMPTY — JS-only? ❌'}`);
}«### Bookmarklet: jump straight to a page’s rendered-HTML check » (Traduction) (Résumé en français de la section cent cinquante-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Drag ce à votre bookmarks bar à ouvrir le actuel URL dans Search Console’s Inspection d’URL Outil, où vous alors lire le rendu HTML (pas le source) à voir comment far bas Google captured contenu:
javascript:(()=>{const u=encodeURIComponent(location.href);open('https://search.google.com/search-console/inspect?resource_id=&id='+u,'_blank');})();Vous’ll encore pick votre verified property à l’intérieur Search Console; le bookmarklet simplement
saves le copy-paste de le actuel URL. Prove infinite scroll is indexable après launch
Tester a lazy-loaded product grid sans conflating navigateur states
A unique screenshot depuis a tall navigateur window n’est pas suffisant. Exécuter le même category URL via ce matrix et commencer chaque fresh-navigation cas avec an vide page cache or a documented, consistent cache state:
| Run | Viewport | Entry méthode | Interaction |
|---|---|---|---|
| A | Standard mobile or desktop height | Fresh navigation | None |
| B | Very tall height | Fresh navigation at que height | None |
| C | Standard height, alors resized tall | Navigation premier, resize second | None |
| D | Standard height | Fresh navigation | Incremental scrolling to the fin |
Fresh navigation et resizing sont différent tests. A component peut register son observer, calculate thresholds, or récupérer son premier batch seulement during initialization; resizing an déjà-running page peut therefore réussir quand a robot-style navigation à le final dimensions fails, or vice versa. Incremental scrolling est a utilisateur-path contrôler, pas a substitute pour le aucun-interaction exécute.
Pour every run, record:
- la requêteed URL et final address-bar URL;
- viewport dimensions et si lune page était chargé or resized à ceux dimensions;
- produit cards rendu après chaque charger;
- unique produit URLs dans réel
<a href>attributs; - duplicate, manquant, or cross-page produit URLs;
- network requêtes et le trigger que initiated chaque additional batch;
- si page/chunk boundaries mettre à jour l’URL et survive refresh;
- le pertinent accessibility-tree nodes, noms, roles, et lien destinations.
Reconcile ceux counts contre le attendu catalog or paginated-chunk inventory. Visible card count et unique lien count sont séparé assertions: a grid peut paint 48 cards pendant que exposing fewer crawlable produit liens, duplicated destinations, or contrôle que sont absent depuis le accessibility tree. Garder a distinctive premier et dernier SKU pour chaque chunk donc vous pouvez detect a tall viewport silently merging page 2 dans page 1.
Tester every chunk as a standalone URL
Tester à exécuter: Requête le premier, middle, et dernier paginated URLs directement avec JavaScript disabled. Attendu résultat: Chaque renvoie stable, unique contenu et a successful réponse sans requiring a scroll. Échec interpretation: L’URL couche est cosmetic or encore dépend on client interaction. Monitoring window: Immediate après deployment. Rollback trigger: Quelconque listed chunk redirections à le premier page, renvoie le shared shell, or changements contenu entre requêtes.
Tester robot d’exploration discovery sans interaction
Tester à exécuter: Inspect le rendu DOM avant scrolling et extract le pagination
liens. Attendu résultat: Sequential chunks sont lié via réel absolute or
root-relative href valeurs. Échec interpretation: Le robot d’exploration a aucun chemin au-delà
le premier chargé définir. Monitoring window: Immediate. Rollback trigger: Le suivant
chunk exists seulement behind a button handler or scroll event.
Tester pour the tall-viewport merge bug
Tester à exécuter: Rendre le premier chunk dans a very tall Chrome viewport, alors recherche le DOM pour a distinctive élément depuis le suivant chunk. Attendu résultat: Le premier URL ne fait pas absorb le suivant URL’s principal contenu. Échec interpretation: Le loader fires during rendu même sans utilisateur interaction. Monitoring window: Immediate locally, alors recheck Inspection d’URL après Google recrawls. Rollback trigger: Deux logical chunks apparaître as un document or le adresse bar ne fait pas track le principal visible chunk.
Testez vos connaissances: Infinite Scroll SEO
Five rapide questions on making infinite scroll indexable. Pick an réponse pour chaque, alors vérifier.
Ressources utiles
Mon connexe writing
- JavaScript SEO Problèmes & Meilleur Practices — mon complet écrire-up, notamment le “Infinite scroll issues” section (deux pages indexé as un) et le “Ce que Googlebot voit” viewport figures.
- Le Beginner’s Guide à SEO technique — où rendu et crawlability fit dans le bigger picture.
«My speaking » (Traduction) (Résumé en français de la section cent quatre-vingt-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- How Search Works (SlideShare) — my walkthrough of crawling, rendering, indexing, and ranking, which is the backdrop to every infinite-scroll decision. (My standing disclaimer applies: “This is my understanding of systems… not going to be 100% complete or accurate.”) » (Traduction) (Résumé en français de la section cent quatre-vingt-deux, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«From around the industry
» (Traduction) (Résumé en français de la section cent quatre-vingt-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Google Search Central, Fix lazy-loaded content — the current, authoritative “Support paginated loading for infinite scroll” guidance.
» (Traduction) (Résumé en français de la section cent quatre-vingt-trois, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Google Search Central, Pagination, incremental page loading, and their impact on Google Search — the three UX patterns and the rel=next/rel=prev deprecation.
» (Traduction) (Résumé en français de la section cent quatre-vingt-trois, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Matt G. Southern, How Google Crawls Pages With Infinite Scrolling (Search Engine Journal) — the Mueller “two or three pages loaded on one page” explanation of the merge risk.
» (Traduction) (Résumé en français de la section cent quatre-vingt-trois, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Matt G. Southern, Google’s Martin Splitt Explains Why Infinite Scroll Causes SEO Problems (Search Engine Journal) — “Googlebot doesn’t scroll,” IntersectionObserver vs. scroll, and “test your implementations.”
» (Traduction) (Résumé en français de la section cent quatre-vingt-trois, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Barry Schwartz, GoogleBot Crawls & Renders Tall, With 9000px High Viewport? (Search Engine Roundtable) — the origin of the tall-viewport explanation.
» (Traduction) (Résumé en français de la section cent quatre-vingt-trois, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Matthew Edgar, SEO Friendly Infinite Scroll — the “component pages” framing (chunks that work independently, even with JS off).
» (Traduction) (Résumé en français de la section cent quatre-vingt-trois, sous-partie sept : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Go Fish Digital, How To Implement Infinite Scroll For SEO — an implementation-oriented walkthrough.
» (Traduction) (Résumé en français de la section cent quatre-vingt-trois, sous-partie huit : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Lumar, State of Pagination in eCommerce — the top-UK-fashion-retailer indexability analysis that rated infinite scroll the worst-performing pattern.
» (Traduction) (Résumé en français de la section cent quatre-vingt-trois, sous-partie neuf : le texte source est conservé pour vérification lors de la relecture francophone.)
Journal des modifications
Mis à jour le 29 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.
Mis à jour le 18 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.