A theme refresh is not a relaunch
A theme refresh reworks the markup your Shopware theme delivers — headings, HTML structure, structured data, images, fonts, scripts — and leaves everything else as it is. Products, categories, customers and orders are untouched, the addresses stay the same, and the design changes only where a change in the markup requires it. The reason for this scope is simple: a crawler does not see design. It sees what is in the HTML, in what order and how fast. That is exactly where the refresh starts.
The refresh also covers what other extensions write into the storefront. Every plugin that displays something — reviews, trust badges, cross-selling, cookie notice, chat — brings its own markup, scripts and styles, and the theme is where all of it comes together as one page. We therefore do not review the theme in isolation but the delivered page for each page type. And we say so when the cause lies elsewhere: a server that needs two seconds to the first byte will not be made fast by any theme, and thin product copy does not get longer through clean markup.
A refresh also tidies up the inheritance, because it decides whether the improvements survive the next update. A healthy Shopware theme is a custom theme that inherits from the default theme and overrides only the Twig blocks it needs to change — with sw_extends, block by block. A theme that has copied whole templates keeps their old state, whatever Shopware changes. Shopware 6.7 made this concrete: the accessibility overhaul changed markup, ARIA attributes and block structure in the storefront, pagination now runs on links instead of radio inputs, and header and footer load via ESI. A copy notices none of this. That is why the refresh rebuilds copied templates as targeted block overrides.
Markup that machines can read
The H1 of a page names what that page is about: the category on a category page, the product on a product page, the shop on the homepage. The logo is a link to the homepage, not a heading; slider titles and teaser lines are design, not structure. Below that, H2 and H3 follow the structure of the content, not the desired font size — that is what CSS is for. Screen readers need the same order, and for most online shops selling to consumers in Germany it has been part of the requirements of the Accessibility Strengthening Act (BFSG) since 28 June 2025. We fix the hierarchy for each page type in the theme so that it is not renegotiated in every Shopping Experience.
Whatever is meant to be cited has to be in the delivered HTML. Text in tabs is no problem as long as it is in the source when the page loads and is merely collapsed visually. The trouble is content that is loaded via JavaScript only after a click or in an off-canvas panel: Google renders JavaScript but does not click, and not every AI crawler runs JavaScript at all. For each page type we therefore compare the raw source with the rendered page and move the content that matters — product description, properties, delivery information, the key internal links — into what the server delivers.
Structured data translates the page for machines, and in a shop five types matter most: Product with name, SKU, GTIN, brand and image; Offer with price, currency, availability and, where it fits, shipping and returns details; BreadcrumbList matching the visible breadcrumb; Organization once for the company facts; FAQPage only where questions and answers actually appear on the page. What your theme outputs today — microdata in the template, JSON-LD from a plugin, or both with contradicting values — we check in the delivered source, not in the plugin description. The rule behind it is strict and simple: the markup describes what is visible on the page. A B2B shop that shows prices only after login does not hand them to anonymous visitors in the markup either.
Core Web Vitals: where the theme loses time
Google measures user experience with three metrics, each with a threshold for “good”: Largest Contentful Paint (LCP), the time until the largest visible element is in place, at most 2.5 seconds; Interaction to Next Paint (INP), how quickly the page responds to input, at most 200 milliseconds; Cumulative Layout Shift (CLS), how much the layout jumps while loading, at most 0.1. INP replaced the former First Input Delay metric in March 2024. The measurement comes from real visits and is assessed at the 75th percentile — three quarters of page views have to meet the threshold, not the test run on the office computer.
The typical brakes sit in the theme. For LCP it is usually the image at the top of the page: a slider that only loads after its script, a hero image with lazy loading that of all images should not be deferred, a file in print resolution. For CLS it is images without fixed dimensions, web fonts that arrive late and reflow the lines, and banners that push into the content after the fact. For INP it is scripts: tracking, chat, review widgets, consent tool and plugin code that runs on every page although it is needed on one. Each cause on its own is small; in the theme you see all of them at once.
We measure before and after, with the same tools. Field data from the Chrome User Experience Report and the Core Web Vitals report in Search Console show what real visitors experience — provided there are enough visits — but they lag behind over a rolling 28-day window. Lab values from Lighthouse show immediately whether a change works, but they are a simulation. We document both for each page type before we change anything, and again once the field data reflect the new state. If the server is losing the time — development mode, HTTP cache switched off, too many plugins in the request path — that goes into the findings, and then the theme is not the first job.
Categories, filters, languages: addresses without duplicates
Each category page should rank under exactly one address, and its filtered and sorted versions point to it with a canonical. The exceptions are combinations people actually search for — category and brand, for example — which deserve their own indexable page with their own copy instead of a filter state. The order of the tools matters: an address blocked in robots.txt cannot be fetched by Google, so its canonical cannot be read either. Anyone who wants to keep filter pages out of the index therefore does not block them wholesale but decides per parameter between canonical, noindex and no link at all.
With pagination, every page gets its own canonical; pointing page 2 to page 1 hides the products behind it. Since Shopware 6.7 the default pagination runs on links instead of radio inputs — a crawler does not follow a form field, but it does follow a link. A theme that overrode the old block brings the old construction back. With several languages or sales channels, hreflang comes in: every language version names all the others and itself, reciprocally and with addresses that can actually be reached. If the return link is missing, Google ignores the annotation. We check the output per channel and language rather than relying on a setting in the administration.
Citable for ChatGPT, Perplexity and AI Overviews
For visibility in AI answers we work in five steps — access, technology, text, data, measurement — and three of them are decided in the theme. Access usually lies outside it, and it fails more often than the markup does: because of robots.txt, a firewall rule at the host or Cloudflare, where bot protection and a dedicated setting against AI crawlers can block across the board what robots.txt allows. The distinction has to be precise. OAI-SearchBot, PerplexityBot and Bingbot fetch content for answers; GPTBot and ClaudeBot mainly collect training data. Google-Extended is not a crawler of its own but a token that only controls use in the Gemini applications — it has no influence on the AI Overviews in Google Search, which draw on the normal search index. Anyone who wants to exclude training and still be cited sets each token separately.
After that, the theme decides what a model gets to read. Language models cite paragraphs, not pages; a paragraph that opens with the answer can be cited, one that opens with “Welcome to our shop” cannot. In the theme that means: the product description sits high up in the source and not behind three banners, properties are a table in the HTML and not an image, company name, location and contact details are plain text and in the Organization markup rather than only a graphic in the footer. The copy itself is written by your editorial team or in our content concept; the theme makes sure its structure reaches the crawler. An llms.txt can add a curated entry point. It is a proposed format, not a binding standard, and it replaces none of the steps before it.
Measurement is honest, which means approximate. Server logs show whether and how often the AI services’ crawlers actually fetch pages, and which ones. Web analytics can break out visits arriving from ChatGPT or Perplexity. And fixed test questions to ChatGPT, Perplexity and Google’s AI Overviews let you record, by sample, which sources are named — before and after, with the same questions. There is no ranking as in classic search, because answers vary with wording and timing. Nobody can promise a place in AI answers, and neither can Sharpness in Oldenburg. We show what changes.