Troubleshooting
| What you see | What it means |
|---|---|
| Empty response, HTTP 200 | The rating service got no rating for this EAN from its data source: the data source is unavailable, it did not accept your credential, or it did not accept the EAN — an unknown EAN of any length other than 13 digits (EAN-8, UPC-A, EAN-14) ends up here. The response is empty on purpose so your page never breaks. Check the EAN and the credential first; if both are right, retry later and report it if it persists. |
| Empty response, HTTP 401 | Only where the credential is enforced: your Authorization header is missing, or its value does not start with Basic . Elsewhere the same mistake is still answered for now, so do not rely on the absence of 401 to know your header is right. The body is empty on purpose — nothing broken gets printed inside your page. Check that the header is actually being sent (not just configured) and that its value is Basic followed by the credential exactly as Shopadvizor gave it (it is already encoded — do not encode it again). A credential that is sent correctly but no longer valid shows up as the empty 200 above; ask Shopadvizor whether it is still valid. |
| The widget disappears for a while, then comes back | Your own page cache stored a page built while the service was answering empty (see the first row). Those empty responses carry Cache-Control: no-store: make your cache respect it, or do not cache a page whose fragment came back empty. |
| HTTP 400 | The EAN is not 8–14 digits. Check what your template is sending. |
| Widget renders the "no ratings yet" invite, no JSON-LD block | The product has no ratings yet — or it is an unknown 13-digit EAN, which prints the same invite (unknown EANs of other lengths come back empty, see the first row). Correct behaviour: an empty rating must not be marked up. If you expected ratings, check the EAN. |
| Rich Results Test: "missing field name" | schema=full where Shopadvizor's catalogue has no name for the EAN either. Pass name explicitly. (rating-only is not the fix: it is only for pages that already publish their own Product node — see Before you start.) |
The name in the markup is not your product title | You passed no name, so the catalogue's is being used. Pass yours — it wins. |
| Rich Results Test ignores the rating | Most likely rating-only without productId, so the rating is not attached to anything. |
| The widget does not show, or shows unstyled | The fragment is inserted with JavaScript (innerHTML does not read the <template shadowrootmode> it relies on), your page strips <template> elements, or the HTML is being escaped. Print it from your server, verbatim. If JavaScript inserting it is unavoidable — a Next.js app navigating between pages, for instance — load hydrate.js: see the Next.js note. |
Anything else: send the exact fragment URL you are calling and the response you get. That pair is almost always enough to identify the problem.