Technical ecommerce SEO · 2026
Google can render JavaScript. That sentence is true, but it has become an excuse for far too many ecommerce indexing problems.
A browser can show a polished collection page while Google initially receives an empty app shell. A shopper can reveal more products by scrolling while Googlebot never triggers the interaction. A product can return a friendly “not found” component with a 200 status, leaving Search to interpret a soft 404.
The right question is not “Does Google run JavaScript?” It is “Can Google discover, render and understand every page that matters without depending on fragile client-side behaviour?”
How Google Processes JavaScript
Google says pages returning 200 are generally sent to the rendering queue unless a robots directive prevents indexing. The wait can be seconds or longer. Non-200 pages may not be rendered. Server-side rendering or prerendering remains useful because it improves speed and gives crawlers—and bots that do not execute JavaScript—a complete response sooner.
What Googlebot Sees on an Ecommerce Page
Review two versions of each template:
- Raw response: the HTML returned by the server before scripts run.
- Rendered DOM: the page after Google’s renderer executes available resources.
On a product page, check the title, main heading, price, currency, availability, variant information, primary image, description, reviews summary, canonical and Product structured data. On a collection, check the collection copy, product links, pagination and canonical signals.
The Biggest JavaScript SEO Risks for Ecommerce
| Risk | What goes wrong | Better implementation |
|---|---|---|
| Client-only product content | The initial response contains a shell; an API failure leaves price, copy or stock absent. | Render critical product data on the server and hydrate it for interaction. |
| Button-based discovery | Products or categories appear only after clicking a button. | Expose crawlable <a href> links to persistent URLs. |
| Infinite scroll only | Google does not scroll to trigger later product batches. | Support paginated URLs with stable content and link them. |
| Blocked JS or API calls | The renderer cannot build the page seen by users. | Allow essential resources and test the rendered result. |
| Soft 404 routing | A missing product displays an error but returns 200. | Return a real 404 or 410, or redirect only when there is a true replacement. |
| Conflicting canonical | JavaScript changes the canonical to a different value from the source. | Set one consistent canonical in the server HTML. |
Crawlable Links, Filters and Faceted Navigation
Google discovers URLs most reliably in the href attribute of anchor elements. A card that routes through onclick, a button or a JavaScript event is not an equivalent substitute.
Ecommerce stores need two different rules at the same time:
- Important products, collections and paginated pages need crawlable links.
- Near-infinite filter combinations should not create an uncontrolled crawl space.
Decide which facets deserve indexable landing pages based on search demand, inventory and distinct value. Keep the rest out of discovery or canonicalize and control them consistently. Our guides to URL normalization and crawl budget management go deeper into that governance.
Lazy Loading Images and Product Content
Lazy loading is not inherently bad for SEO. The problem is tying content to user actions. Google explicitly says it does not interact with the page by scrolling or clicking.
- Use native image and iframe lazy loading or
IntersectionObserver. - Do not lazy-load the primary product image or immediately visible content.
- Keep meaningful image alt text in the rendered markup.
- Test slow networks, blocked scripts and empty API responses.
- Confirm that the rendered page contains the real image URL—not a placeholder only.
See our practical guide to image alt text and lazy-loading SEO for template-level checks.
Infinite Scroll and “Load More”
Infinite scroll can be excellent for browsing and poor for discovery if it has no paginated foundation. Give each chunk a persistent URL, keep the content stable on that URL and provide crawlable links between pages. JavaScript may enhance the experience by appending results and updating browser history, but it should not be the only route.
#page=2 as the only pagination state. The server needs a URL it can request directly and return consistently.For a deeper comparison of UX and indexability, read pagination vs infinite scroll.
Status Codes, Canonicals and Structured Data
Return honest status codes
Out-of-stock is not the same as gone. A temporarily unavailable product can remain 200 with accurate availability. A permanently removed product should return 404 or 410 unless a close replacement justifies a redirect.
Keep canonicals stable
Google can process a canonical inserted by JavaScript, but its documentation recommends HTML. Never serve one canonical in the source and replace it with another after rendering.
Match structured data to visible content
JavaScript-generated structured data can work. It still needs to describe the visible product accurately. Price, availability, currency and variant details should agree across the page, JSON-LD and Merchant Center feed.
How to Audit a JavaScript Store
Do You Need Server-Side Rendering?
Not every store needs a full rebuild. If critical content and links are consistently rendered, indexation is healthy and performance is strong, client-side JavaScript may be fine.
Server-side rendering, static generation or a hybrid approach becomes more attractive when product content is missing from the initial response, rendering failures are common, discovery is slow, or the same front end must work for many crawlers and shopping agents. Treat dynamic rendering as a workaround, not the preferred long-term architecture.
Frequently Asked Questions
Does Googlebot run JavaScript?
Yes. Google uses an evergreen version of Chromium, but rendering is a separate processing phase and can fail when resources, code or interactions are inaccessible.
Does Googlebot scroll or click?
Do not rely on it. Google’s lazy-loading and pagination guidance says crawlers generally do not trigger interactions such as scrolling or clicking buttons.
Is JavaScript bad for Shopify SEO?
No. Fragile implementation is the problem. Test the actual theme and apps for rendered content, links, canonicals, status handling and performance.