Search engine optimisation for a storefront is split between the platform and the theme. Know which part you own before you add anything.
| Concern | Owner | Your action |
|---|---|---|
| Structured data (JSON-LD) | Platform | Nothing. The engine injects it. Do not duplicate it. |
| Sitemap files | Platform | Nothing. The engine serves them. |
| Page tags from merchant settings | Platform | Nothing. The engine injects them. |
| Meta title, description and canonical per page | Theme | Set them with Helmet |
| Open Graph and Twitter tags | Theme | Set them with Helmet |
| Heading structure, alt text, link text | Theme | Write correct markup |
| Content present in server HTML | Theme | Keep it server-rendered |
The most common mistake is a theme that adds its own JSON-LD block. The engine already emits one for the page type, so the page ends with two conflicting graphs.
Crawlers receive the whole page
The engine renders every section for a crawler. When the request comes from a bot it ignores
ssrSectionCount and server-renders all sections, so deferred hydration never hides content from a
search engine.
Read Deferred Hydration and Lazy Sections.
This does not make every pattern safe. Content that a crawler cannot see is content the theme fetches in the browser. A section that renders an empty placeholder on the server and fills it after mount is invisible to a crawler, deferred or not. If content must be indexed, resolve it on the server.
Structured data the engine emits
The engine picks a default schema from the page type and merges it with the templates configured on the platform.
| Page type | Default schema |
|---|---|
| Home | WebSite with a SearchAction |
| Product | Product, with Offer, Brand, AggregateRating, DeliveryChargeSpecification |
| Category | Category default |
| Collection | ProductCollection |
| Brands | Brands default |
| Blog | Blog default |
| Custom page | Page default |
| Section page | Section default |
The engine reads the values from the store, so the schema reflects the same data the page renders.
To change what appears in the structured data, change the platform SEO markup configuration. Do not add a competing script tag in the theme.
Sitemaps
The engine serves the sitemap files. A theme does not generate them.
/root.sitemap.xml
/products/:pageNo/page.sitemap.xml
/category_l1.sitemap.xml
/category_l2.sitemap.xml
/category_l3.sitemap.xml
/brand.sitemap.xml
/collections.sitemap.xml
/pages.sitemap.xml
/sections.sitemap.xml
/blogs.sitemap.xml
/faqs.sitemap.xml
Products are paginated across numbered files. root.sitemap.xml is the index that links the rest.
Page tags
A merchant can add head and body tags from platform settings, such as an analytics snippet or a verification meta tag. The engine injects these. The theme does not need to render them, and it must not hardcode them.
Read next
| Page | Use it when |
|---|---|
| Page Metadata | You set the title, description or canonical for a page |
| SEO in Pages | You want the original Helmet example |