Türkçe çeviri: Infinite Scroll SEO

nasıl -e implement infinite scroll olmadan losing sizin dizine ekleme — neden Googlebot yapmaz scroll, tall-viewport render trick şu flattens two sayfalar -e bir, paginated-URL + History API düzelt, ve ecommerce category-sayfa durum.

İlk yayın tarihi: 3 Tem 2026 · Son güncelleme: 8 Ağu 2026 · Advanced
Diller

Infinite scroll loads daha bençerik olarak siz scroll, yerine via numbered sayfalar — ve Googlebot never scrolls veya tıklamalar, bu nedenle anything gated behind şu action dır invisible tarafından default. Google renders in bir çok tall viewport (hakkında 411×12 140px mobile, 1024×9 307px desktop) olarak bir workaround, ama şu aynı tall viewport -ebilir trigger scroll loader during rendering ve fold two logical sayfalar -e bir dizine eklenmiş URL — bir başarısızlık mode nerede bir 'değil dizine eklenmiş' sayfa dır aslında dizine eklenmiş olarak part of başka bir. düzelt dır architectural: ver her chunk bir gerçek, persistent, absolute URL (like ?sayfa=2), bağlantı them ile crawlable anchors, ve update adres bar ile History API olarak kullanıcı scrolls. rel=sonraki/prev dır legacy (Google dropped o in 2019; Bing hâlâ supports o). On ecommerce category sayfalar, back o tümü ile sitemaps veya bir Merchant Center feed ve verify in URL Inspection araç's rendered HTML. bir production oluştur ayrıca gerektirir bir gerçek popstate/back-forward contract, distinct loading/error/end states, ve deliberate accessibility — none of şu comes bençin free sadece çünkü dizine ekleme düzelt dır in place.

TL;DR — Googlebot never scrolls ve never tıklamalar, bu nedenle scroll-gated bençerik dır invisible tarafından default. Google’s workaround dır -e render in bir çok tall viewport (kabaca 411×12 140px mobile, 1024×9 307px desktop) — ama şu aynı height -ebilir trigger scroll loader during rendering, folding sonraki logical sayfa -e güncel bir bu nedenle two sayfalar al dizine eklenmiş olarak bir tek URL. durable düzelt dır architectural: persistent, absolute, per-chunk URLs (e.g. ?page=12), linked ile crawlable anchors, ile History API updating adres bar olarak her chunk olur birincil. rel=next/rel=prev dır legacy bençin Google (dropped 2019) ama hâlâ respected tarafından Bing. On ecommerce PLPs, sitemaps veya bir Merchant Center feed dır bir discovery backstop. Verify everything in URL Inspection araç’s rendered HTML.

Evidence for this claim Google Search does not generally interact with scrolling controls, so infinite-scroll content needs crawlable paginated URLs. Scope: Current official or standards documentation. Confidence: high · Verified: Google: Lazy-loaded content Evidence for this claim The History API can update URLs for loaded page chunks without a full navigation. Scope: Current official or standards documentation. Confidence: high · Verified: MDN: History API

ilk, bir disambiguation

-erseniz arama “Google infinite scroll” siz’ll hit sonuçlar hakkında Google’ın kendi continuous scroll on onun arama sonuçları sayfalar — bir SERP feature Google turned on ve o hâlde discontinued in mid-2024. şu’s bir Google-product UX decision ve sahiptir nothing -e yap ile nasıl Googlebot tarar sizin site. bu article dır hakkında latter: infinite scroll olarak bir loading pattern on sizin kendi sayfalar, ve whether Google -ebilir dizin ne o loads.

temel constraint: Google yapmaz interact ile sizin sayfa

Everything burada follows -den bir fact. Google’ın kendi lazy-loading docs söyle recommended patterns “yapmayın rely on kullanıcı actions, such olarak scrolling veya clicking, -e load bençerik, bu da önemli olarak Google arama yapmaz interact ile sizin sayfa.” sayfalama doc söyler o hatta daha plainly: “Google’s crawlers yapmayın ‘click’ buttons ve generally yapmayın trigger JavaScript functions şu require kullanıcı actions -e update güncel sayfa contents.”

olarak ben put o in benim kendi JavaScript SEO rehberi: “Googlebot yapmaz take action on webpages. o’s değil going -e click things veya scroll, ama şu yapmaz anlamına gel o yapmaz sahip workarounds. olarak uzun olarak bençerik dır loaded in DOM olmadan bir gerekli action, Google -ecek see o. eğer o’s değil loaded -e DOM until sonra bir click, o hâlde bençerik won’t olmak found.”

bu nedenle infinite scroll şu yalnızca triggers on bir gerçek scroll event dır bir bençerik-discovery sorun önce o’s anything else.

Google’s workaround: bir çok tall viewport

Google yapmaz simulate scrolling. Instead o renders sizin sayfa in bir unusually tall viewport, bu nedenle bençerik bir few screens down dır zaten bençinde rendered area olmadan anyone scrolling. earliest on-record hint of bu idi John Mueller’s 2017 note şu “Googlebot renders ile bir çok tall viewport, hangi skews bazı CSS (çoğu zaman images). Try in Chrome dev-araçlar, eg 9000px high viewport.”

specific numbers ben’ve documented: bençin mobile, Google loads sayfa at bir screen size of 411×731 pixels ve resizes length -e 12 140 pixels — “essentially, o olur bir gerçekten uzun phone ile bir screen size of 411×12140 pixels. bençin desktop, o yapar aynı ve goes -den 1024×768 pixels -e 1024×9307 pixels.” (ben haven’t seen recent re-testler of şunlar exact figures, ve onlar -ebilir vary ile sayfa length; özgün dimensions trace back -e independent testing tarafından SEO researcher JR Oakes.) benşaret et değildir exact pixel count — o’s şu Google fakes “seeing far down sayfa” ile height, değil ile movement.

ele al her ikisi exact pixel dimensions ve two-sayfalar-merged behavior below olarak dated, implementation-specific observations yerine bir stable platform contract — Google yapmaz publish bir resmî spec bençin either number, ve rendering behavior -ebilir change. yapmayın assume sizin site behaves aynı way; yapğrula güncel behavior bençin sizin kendi URLs ile rendered-HTML test et in sonraki section yerine taking bunlar figures olarak bir guarantee.

başarısızlık mode nobody explains: two sayfalar dizine eklenmiş olarak bir

A height-triggered loader can fire during rendering and merge two logical pages under one indexed URL. Kaynak: /technical-seo/javascript-seo/

A normal browser viewport stops after page one. Google's render viewport expands much taller, reaches the infinite-scroll trigger without a real user scroll, and appends page two into the same DOM. The merged DOM is then indexed as one URL instead of two separate pages.

© Patrick Stox LLC · CC BY 4.0 ·

burada’s nerede tall viewport bites back. çünkü render viewport dır bu nedenle tall, scroll-triggered loader -ebilir fire during rendering hatta gerçben nothing “scrolled” in human sense — sheer DOM height -ebilir olmak enough -e satisfy bir IntersectionObserver veya bir scroll-position kontrol et. ne zaman şu olur, loader appends sonraki logical sayfa’s bençerik -e güncel sayfa’s render, ve Google indexes merged sonuç olarak bir tek URL.

ben’ve diagnosed bu several times. -den benim JavaScript SEO rehberi:

“başka bir sorun ben’ve seen ile bu setup dır, occasionally, two sayfalar al dizine eklenmiş olarak bir. ben’ve seen bu bir few times ne zaman kişiler said onlar couldn’t al onların sayfa dizine eklenmiş. ama ben’ve found onların bençerik dizine eklenmiş olarak part of başka bir sayfa şu’s genellikle previous post -den them.”

“benim theory dır şu ne zaman Google resized viewport -e olmak longer, o triggered infinite scroll ve loaded başka bir article in ne zaman o idi rendering. In bu durum, ne ben recommend dır -e block JavaScript file şu handles infinite scrolling bu nedenle functionality -ebilir’t trigger.”

John Mueller described aynı mechanic -den Google’s side in bir 2022 office-hours session: Google renders ile bir high viewport, şu “-irdi trigger bazı amount of infinite scrolling,” and “biz -ebilir sahip two veya three of bunlar sayfalar loaded on bir sayfa ile infinite scroll, ama değil everything.” (şu office-hours quote dır relayed via arama motoru Journal’s yaz-up, değil yapğrulanmış karşı birincil recording.)

Two consequences fall out of bu:

  1. orada’s no guarantee of nasıl much alır pulled in. -ebilir olmak nothing extra, -ebilir olmak two veya three sayfalar, never reliably everything. Infinite scroll alone değildir bir dependable way -e al deep bençerik dizine eklenmiş.
  2. “Not indexed” -ebilir olmak bir misdiagnosis. missing sayfa -ebilir değil olmak missing at tümü — o -ebilir olmak dizine eklenmiş olarak part of bir earlier URL. şu gerektirir bir farklı düzelt -den bir olağbir dizine ekleme bug.

nasıl -e diagnose o

kullan arama Console’s URL Inspection araç ve okuyun rendered HTML, değil raw kaynak. Google’s docs dır explicit: “-ebilirsiniz kullan URL Inspection araç in arama Console -e see eğer tümü bençerik idi loaded. kontrol et rendered HTML -e emin olun sizin bençerik dır in rendered HTML tarafından looking bençin o in URL Inspection araç.” arama rendered HTML bençin bençerik siz expect -e olmak on sayfa 1 yalnızca. -erseniz bul bençerik -den sayfa 2 (veya sonraki article) sitting bençinde sayfa 1’s render, siz’ve reproduced merge bug.

-ebilirsiniz ayrıca replicate tall viewport locally: open Chrome DevTools, ayarla bir çok tall custom viewport (Mueller’s suggestion idi ~9000px), ve load sayfa -e see whether sizin loader fires ile no scrolling.

düzelt: paginated URLs + History API

durable düzelt dır architectural, straight -den Google’s güncel lazy-loading doc. -e yap infinite scroll indexable, “emin olun sizin web sitesi supports paginated loading of bunlar chunks”:

  • “Give each chunk its own persistent, unique URL.”
  • “Ensure şu bençerik gösterilen on her URL kalır aynı her time o’s loaded in bir browser” — Google suggests absolute sayfa numbers like ?page=12.
  • “Avoid using relative elements like ?date=yesterday in these URLs” — bir adres şu döndürür farklı bençerik her load dır unusable olarak bir canonical.
  • “bağlantı sequentially -e individual URLs bu nedenle şu arama motorları -ebilir discover URLs in bir paginated ayarla” — gerçek <a href> bağlantılar, değil click handlers.
  • “ne zaman bir yeni sayfa chunk dır loaded in response -e kullanıcı scrolling, ve o olur birincil visible element bençin kullanıcı, update displayed URL kullanarak History API.”

şu son benşaret et dır elegant part. history.pushState() / replaceState() swaps URL in adres bar olarak kullanıcı scrolls past her boundary — bu nedenle visible URL her zaman matches birincil bençerik, ve kullanıcı -ebilir refresh, share, ve bağlantı -e tam olarak nerede onlar dır. Meanwhile crawlable ?page=N URLs var ol independently, bu nedenle Google -ebilir ulaş her chunk yapğrudan whether veya değil renderer ever triggers scroll.

Two implementation notes şu önem taşır:

  • kullan IntersectionObserver (veya native browser lazy-loading), değil bir raw scroll listener. o performs far daha iyi (no scroll-thrash) ve o’s “load ne zaman visible” mechanism Google endorses bençin deferred bençerik.
  • koru paginated ayarla discoverable independently of JS. gerçek anchors in DOM, ve/veya ?page=N URLs listed in sizin XML sitemap. Whatever renderer captures, sitemap-ve-bağlantılar layer dır sizin backstop.

eğer bir live site dır zaten exhibiting merge bug ve -meniz gerekir durdur bleeding önce -ebilirsiniz rebuild, benim blunt emergency düzelt dır -e block JavaScript file şu triggers infinite scroll in robots.txt bu nedenle o physically -ebilir’t fire during rendering — buying time -e ship proper paginated-URL architecture.

History API benşaret et above kapsar half contract — updating adres bar olarak bir chunk olur birincil. diğer half dır making sure her entry path back -e şu URL aslında reconstructs yapğru bençerik, değil sadece yapğru scroll position:

  • kullan pushState() ne zaman bir chunk olur birincil visible bençerik bençin ilk time — şu’s bir gerçek navigation adım, ve o’s ne yapar back button meaningful.
  • kullan replaceState() bençin corrections şu shouldn’t oluştur onların kendi back-button durdur, like syncing URL sonra bir fast scroll past several chunks at once.
  • Listen bençin popstate ve re-render (veya re-fetch) chunk şu matches URL in event. browser’s default back/forward behavior restores scroll position, değil dynamic liste state sizin JavaScript oluşturulmuş — eğer bir kullanıcı hits back sonra sizin loader appended 40 daha items, -meniz gerekir reconstruct hangi items belong on şu sayfa, değil sadece scroll them orada.
  • yapmayın lean on automatic scroll restoration alone -e solve bu. o controls nerede viewport lands, değil ne bençerik dır present — eğer underlying liste -ebilir change arasında visits (yeni products eklendi, items out of stock), scroll position olmadan bençerik reconstruction -ebilir strand kullanıcı in yanlış context.

bu aynı discipline paginated-URL düzelt zaten depends on: bir chunk’s URL sahiptir -e döndür bençerik o promised on bir fresh load, bir refresh, ve bir arama-Console live test et — değil sadece ilk time o’s fetched mid-scroll.

Loading, error, ve end-of-sonuçlar states

bir production implementation gerektirir daha states -den “loading” ve “loaded”:

  • Initial load — ilk chunk -meli zaten olmak in raw HTML server sends, değil assembled entirely tarafından JS sonra fact.
  • sonraki-chunk loading — bir visible in-progress indicator bu nedenle kullanıcılar (ve anyone testing ile assistive tech) know bir fetch dır underway.
  • Empty — bir distinct state bençin zero sonuçlar, değil bir blank space şu görünür broken.
  • Error / retry — bir failed fetch shouldn’t silently strand sayfa ile no way -e try yeniden, ve bir retry shouldn’t yinelenen veya reorder items zaten on sayfa.
  • End of sonuçlar — bir clear sinyal, değil bir infinite spinner, once orada’s nothing left -e load.

None of bu Google-specific, ama o’s aynı reliability paginated-URL düzelt depends on: eğer loader -ebilir silently break mid-fetch, -ebilirsiniz’t trust şu herhangi bir given tarama veya kullanıcı session aslında captured chunk o -meli sahip.

Accessibility ve performance: two things infinite scroll yapmaz ver siz bençin free

Infinite scroll sahiptir no inherent temel Web Vitals outcome, good veya bad — o’s determined entirely tarafından nasıl siz oluştur o. her appended chunk grows DOM, ve bir büyük enough DOM raises layout ve style-recalculation maliyet, bu nedenle watch append maliyet, image loading, layout shift -den bençerik olmadan reserved space, ve uzun tasks olarak liste grows. On çok uzun sayfalar, düşün virtualizing chunks şu sahip scrolled far out of view (removing onların DOM nodes) yerine letting DOM grow unbounded.

Accessibility gerektirir onun kendi deliberate design, değil bir assumption şu “o renders, bu nedenle o’s fine”:

  • Keyboard kullanıcılar ihtiyaç duy -e olmak able -e ulaş yeni bençerik — ve footer veya end-of-sayfa navigation — olmadan sayfa silently growing out -den altında onların tab sıra.
  • Screen reader kullanıcılar ihtiyaç duy yeni bençerik announced olmadan interrupting ne onlar’re doing — bir polite status region, değil bir disruptive alert, dır usual pattern.
  • WAI-ARIA feed design pattern dır oluşturulmuş bençin tam olarak bu durum: article-level regions bençinde bir feed container, ile defined keyboard behavior bençin moving arasında items ve bençin reaching bençerik önce ve sonra feed.
  • Focus shouldn’t silently jump veya al lost ne zaman bir yeni chunk loads.

None of bu optional cleanup. o’s difference arasında infinite scroll şu çalışır bençin everyone ve bir şu yalnızca çalışır bençin bir mouse kullanıcı ile JavaScript kim never strays -den happy path.

historical context: rel=sonraki/prev dır legacy

-erseniz öğrenilmiş sayfalama years ago, siz öğrenilmiş rel="next" / rel="prev". Google introduced them in 2011 ve paired them ile onun özgün 2014 “infinite scroll arama-friendly recommendations” (paginate bençerik, provide component sayfalar). o hâlde in 2019 Google announced o hadn’t olmuş kullanarak şunlar tags bençin years ve formally dropped them. sayfalama doc confirms o today: “In past, Google kullanılan <link rel="next" href="..."> ve <link rel="prev" href="..."> -e identify sonraki sayfa ve previous sayfa relationships. Google no longer kullanır bunlar tags, her ne kadar bunlar bağlantılar -ebilir hâlâ olmak kullanılan tarafından diğer arama motorları.”

bu nedenle güncel Google recipe dır unique URLs + crawlable bağlantılar + History API — no rel=next/rel=prev required. ama “other search engines” bençerir Bing, hangi hâlâ respects them, bu nedenle orada’s no harm in tutma them in sizin markup bençin cross-motor benefit ve accessibility. Bing itself yapmaz publish infinite-scroll-specific rehberlik; onun stance reduces -e general JS-rendering caution onun ekip laid out — bingbot -ebilir render JavaScript ama “o dır difficult bençin bingbot -e süreç JavaScript at scale,” bu nedenle bir crawlable paginated fallback yardımcı olur Bing bençin tam olarak aynı neden o yardımcı olur Google.

Ecommerce category sayfalar: highest-stakes durum

en çok yaygın gerçek-world infinite scroll dır on ecommerce category / product listing sayfalar (PLPs), ve o’s nerede risk maliyetler gerçek money. eğer deep-catalog products past ilk screenful never al dizine eklenmiş, onlar -ebilir’t rank, ve siz lose uzun tail of product-level organic trafik. bu aynı territory covered in depth in category-sayfa material — infinite scroll dır bir daha neden şunlar sayfalar ihtiyaç duy bir crawlable structure underneath UX.

Two backstops önem taşır burada:

  • XML sitemaps listing her canonical product ve paginated category URL, bu nedenle discovery yapmaz depend on renderer.
  • bir Merchant Center product feed, hangi feeds Google product data independently of whatever category sayfa’s renderer captures.

Lumar’s analysis of top UK fashion retailers found infinite scroll -e olmak, in onların words, “the biggest loser when it comes to indexability and SEO friendliness” among sayfalama patterns — bir yararlı reminder şu bu değildir bir theoretical edge durum, o’s default başarısızlık mode of bir çok popular PLP UX. (Lumar’s specific percentage figures -meli olmak okuyun -den onların live rapor önce alıntılanmaya değer bir exact number.)

Infinite scroll vs. sayfalama vs. load daha

Google’s sayfalama doc frames three UX patterns ve dır honest hakkında tradeoffs. Infinite scroll “uses a single page for all content” ve dır “intuitive — kullanıcı sadece keeps scrolling,” but it “-ebilir lead -e ‘scrolling fatigue’ çünkü of unclear sonuç size” and “-ebilir’t ele al çok büyük numbers of sonuçlar.” Classic numbered sayfalama dır en çok robust bençin SEO çünkü her sayfa dır inherently bir gerçek URL. “Load more” sits in arasında — fine eğer button dır (veya wraps) bir gerçek bağlantı -e bir paginated URL, useless bençin SEO eğer o’s bir pure click handler.

decision değildir “which is allowed” — tümü three dır allowed. o’s “hangi UX yap siz iste, ve yaptı siz oluştur crawlable URL layer underneath o.” Mueller’s 2023 özet dır whole thing in bir line: “eğer her piece veya virtual sayfa dır ayrıca accessible ve findable aracılığıyla bir unique URL, generally o -meli olmak fine -e sahip infinite scroll.”

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.