Skip to main content

What not to do

Do not fetch the fragment from the browser. Loading it with fetch() client-side defeats the entire purpose — the crawler never sees it. The request must come from your server.

Do not use the standalone client mode for SEO. Dropping <shopadvizor-rating ean="..."> plus client.js into the page works visually and is invisible to crawlers. It is there for cases where SEO is not the goal. It never shows reviews either: it always draws the compact rating.

And it stops working entirely where credentials are enforced

That mode calls /v1/data from the browser, which would mean putting your credential in the page's source for anyone to copy. There is no way around that, and no plan to add one: if you need the numbers in the browser, fetch them from your server and pass them down.

Do not put the credential anywhere the browser can reach it. Not in a <script> tag, not in a data attribute, not in a URL. It goes in your server's environment and travels in a request header your server makes.

Do not emit two Product nodes. If your page already has one, use schema=rating-only. This is the single most common integration mistake.

Do not write the reviews yourself (reviews carousel). The fragment prints them and marks them up. A second set of Review items for the same cards, in your own markup, is duplicated structured data.

Do not enable breakdown. The per-star breakdown is a Phase-2 preview, outside the current scope.

Do not copy the fragment's HTML into your templates. Its internals are an implementation detail and will change. Always request it live.

Do not self-host hydrate.js or client.js. Load them from the service itself (https://saz-ssr-server.public.shopadvizor.com/v1/hydrate.js and https://saz-ssr-server.public.shopadvizor.com/v1/client.js). A copy on your own CDN drifts out of step with what the service renders, silently.