Platforms
Shoper reviews widget (plus IdoSell and Sky-Shop): where the code goes
To add a reviews widget to a Shoper store you paste three parts: the widget library once, in
footer.tpl; the init call in Shoper’s custom JavaScript field, without <script> tags; and an
empty <div> in the template or custom HTML box where the reviews should appear. There is no app to
install and nothing runs on Shoper’s servers, because the widget loads in the visitor’s browser and
fetches the reviews from our API. IdoSell and Sky-Shop follow the same three-part pattern, only the
places you paste into have different names. What differs between the platforms is which of their
own features quietly gets in the way, and that is what this post is about.
We did not write this from the platforms’ help pages. On 23 October 2026 we took every hostname that called our widget API in the previous 30 days, fetched each home page, fingerprinted the platform, and then loaded every Shoper, IdoSell and Sky-Shop store in a headless browser to see what the code really does once a page is open.
How many shops actually run on Polish platforms
Our widget API saw 1,175 distinct hostnames between 23 September and 23 October 2026. A plain HTTPS request to 494 of them returned a home page; most of the rest are Google Sites embed hosts, Shopify preview addresses and staging copies that answer 404. Those 494 pages belong to 360 of our customer accounts once our own sites are taken out.
The Polish hosted platforms are a small slice of that. Shoper showed up on 2 shops, Sky-Shop on 2, IdoSell on 1, and Shoplo on none, even though its site still takes new sign-ups. That is 5 shops out of 360 accounts, about 1.4%. For scale, the same fingerprinting found WooCommerce markup on 90 accounts’ sites and Shopify on 19.
So read what follows as five case studies, not a survey. They are worth reading anyway, because each of the five did something different and each of them shows a platform-specific trap.
| Shop | Where the library loads | Where the container sits | Sources | What rendered |
|---|---|---|---|---|
| Shoper, shop A | <head> with defer; init from the custom JS file | Custom HTML box on the home page | List, 1180 × 648 px | |
| Shoper, shop B | End of <body>, inline init | End of <body>, below the footer | Etsy, Google, Allegro | Ratings bar 196 px, list 802 px, badge |
| IdoSell | Inside one CMS text page | Same text page | Google, Facebook, Allegro | Ratings bar 196 px, list 584 px |
| Sky-Shop, shop A | Google Tag Manager, behind analytics consent | Content area on every page | Allegro | 0 px before consent, 783 px list after |
| Sky-Shop, shop B | End of <body>, inline init | Floating badge | Allegro | Badge, 130 × 73 px |
Shoper: two places, and one of them is a JavaScript file
Shoper is the only one of the three with its own page in our docs, and the
Shoper install guide splits the snippet on purpose. The init
call goes into Wygląd i Treści → Wygląd Sklepu → Obecny Szablon Graficzny → Własny Skrypt JS,
pasted without the <script> tags, because that field is already a JavaScript file and the tags
break the whole file, not just your widget. The library goes once into footer.tpl, and the
container goes into the template that renders the page you want, for example index.tpl.
Shop A follows that split, with one change: the library sits in <head>, but with defer, so it
does not hold up rendering. The container lives in one of Shoper’s custom HTML boxes on the home
page, and the list renders at 1180 by 648 pixels, starting about 3,800 pixels down a 6,784 pixel
page. What makes this shop instructive is what its source does not show. The served HTML has the
stylesheet, the script and the empty div, and no init call anywhere, because the init arrives in
user.js, the file Shoper serves from the custom JavaScript field. Read the source and you would call the widget broken. Open the page and
it works, with two calls to our API. We hit the same false alarm on a PrestaShop shop in our
PrestaShop measurement, and the lesson carries over.
Shop B took the shortcut and pasted everything, three containers and three inline init calls, into one block at the end of the page body. It works: a ratings bar, a 30-review list and a floating badge, mixing Etsy, Google and Allegro. But a container renders where it sits, not where you would like it, and these sit after the shop’s footer. The footer block ends at 7,529 pixels; the list starts at 8,224 on a page 9,069 pixels tall. If a widget “works but nobody sees it”, this is the first thing to check.
Both Shoper shops also have a technical address of the form sklepNNNNNN.shoparena.pl. Today it
answers ordinary visitors with a 301 redirect to the shop’s own domain, yet our API logged requests
from those addresses on 28 and 18 of the 31 days. Whatever loads them there, it is not regular
shoppers, so do not judge your widget by those numbers.
IdoSell: a dedicated reviews page, with the space reserved
The IdoSell shop does not put the widget on its home page at all. It has a CMS text page about customer reviews, and both the library and the init live inside that page’s content, so the widget costs nothing on every other page. That is the opposite of the failure we keep finding elsewhere, where a global script calls our API on pages that have no container to fill.
Two details here are better than average. The init is wrapped in a small guard that starts each widget only once and only if its container exists, which is exactly the pattern we recommend for pages that rebuild their DOM. And the shop’s CSS reserves a minimum height of 600 pixels for the list on text pages. The list renders at 584 pixels, so the page does not jump when the reviews arrive.
IdoSell has no dedicated guide in our docs yet. The pattern is the one in our guide for platforms without a page: a place for site-wide code, or code inside a single page as this shop did, plus a container in the content.
Sky-Shop: the widget that waits for a cookie banner
Sky-Shop shop A is the case worth the whole post. The container is in the served HTML of every page
we checked: the home page plus 29 product and category pages, 30 out of 30. The library is in none of
them. It arrives through Google Tag Manager, and the tag that loads it carries a consent condition
on analytics_storage.
We measured what that means on a product page, the home page and a category page. Before consent, the container is 0 pixels tall and the browser sends zero requests to our servers. After we granted analytics consent through Google’s consent mode on the page, the same pages showed a 783 pixel review list and a badge, with two API calls. Our headless browser was not shown any banner to click, so a visitor who never answers it, or declines analytics, gets an empty strip where the reviews should be. And because the container holds 0 pixels until then, the page grows by 783 pixels the moment consent does arrive.
Whether a widget needs consent is your decision, but it should rest on what the widget does. Ours sets no cookies, writes nothing to local or session storage, and contacts only our two hosts; we measured that and wrote it up in our GDPR notes on review widgets. Putting it behind analytics consent treats it like a tracker it is not.
Sky-Shop shop B keeps it simple: library and init at the end of the body, one floating badge,
Allegro as the only source. It renders at 130 by 73 pixels. Sky-Shop’s technical address,
*.mysky-shop.pl, serves the full shop with noindex,follow, and the widget runs there as well, which
makes it a safe place to test before you touch the live domain.
What about Allegro reviews?
This is where the Polish platforms really differ from everyone else. Four of the five shops have Allegro connected. Across all accounts with a live widget in the same 30 days, the share is 24 of 463, about 5.2%. Both Sky-Shop shops use Allegro as their only source.
Allegro feedback goes into the same widget with the same snippet as Google; you connect the seller account and choose the sources in the widget settings. Across JustReview, 69 accounts have the Allegro connector and 59 of them have imported reviews, 210,368 Allegro reviews in total. Our Allegro reviews page is in Polish, and the general case is in putting marketplace reviews on your own site.
One warning from the sample. The IdoSell shop’s Allegro source holds 20 reviews, all dated between 9 and 18 April 2023. Nothing newer has arrived in two and a half years, and the ratings bar still counts those 20, while the review list leaves Allegro out. After connecting any source, look at the date of its newest review, not just at the total.
Where each part goes, platform by platform
| Platform | Library and init | Container | Trap we measured |
|---|---|---|---|
| Shoper | Library in footer.tpl; init in Własny Skrypt JS, without <script> tags | Page template or a custom HTML box | Pasted at the end of the body, the widgets render below the footer |
| IdoSell | Site-wide code area, or inside one CMS page | Same page, inside the content | None in our sample; reserve the height as this shop did |
| Sky-Shop | Before the closing body tag, or a tag manager | Content area of the page | A consent-gated tag leaves the container at 0 px |
| Shoplo | Site-wide code area | Page content | No Shoplo shop in our data to measure |
Whatever the platform, the library belongs on the page once, the container id must match the init call, and you check the published shop in a real browser, not the editor preview and not the page source.
Why JustReview on a Polish platform
The reason to use JustReview here is that hosted platforms do not let you run code on their servers, and our widget never needs to. It is a stylesheet, a script and one init call, so it fits into Shoper’s JavaScript field, an IdoSell page or a Sky-Shop content area without an app from anyone’s marketplace. It puts Allegro, Google, Etsy and Facebook in one list, which is exactly what Shoper shop B runs, and it sets no cookies, so it has no reason to wait behind a banner. Everything in this post was measurable from the outside, which is how you can check your own setup in a minute. Embedding it on your own site is the same three parts on every platform.
Two caveats. Only Shoper has a step-by-step page in our docs so far; IdoSell and Sky-Shop use the general guide. And the list widget and the Allegro connector both start on our Plus plan at 9 € a month, after a 7-day trial. The free plan gives you the badge, 100 stored reviews and Google plus Facebook, with no card. The full split is on our pricing page.
The straightforward route is to create a free account, connect your sources and paste the badge first: it needs no container, so it cannot end up below the footer or hidden behind consent. Add the list once you have seen the badge on the live shop. You can see that list running further down this page.
FAQ
How do I add a reviews widget to a Shoper store?
In three parts. The init call goes into Shoper's custom JavaScript field (Wygląd i Treści, Wygląd Sklepu, Obecny Szablon Graficzny, Własny Skrypt JS) without the script tags, because that field is already a JavaScript file. The library goes once into footer.tpl. The empty container div goes into the template, or a custom HTML box, on the page where the reviews should appear. No app or plugin is involved.
Why can't I find the widget's init code in my Shoper page source?
Because on Shoper it usually is not in the HTML at all. The custom JavaScript field is served as a separate file, so view-source shows the library and the container and nothing that starts the widget. On one of the two Shoper shops we rendered on 23 October 2026 that is exactly the picture, and the list still renders at 1180 by 648 pixels. Check the page in a real browser, not the source.
Can I show Allegro reviews on a Shoper, IdoSell or Sky-Shop store?
Yes, with the same snippet you use for Google. Allegro seller feedback goes into the same list, badge or summary widget. In our data it is the norm on these platforms: four of the five shops we found on Polish hosted platforms have Allegro connected, against 24 of 463 accounts with a live widget overall. Allegro is available from the Plus plan.
Why is my Sky-Shop reviews widget empty?
On one Sky-Shop store we measured, the widget library is loaded through Google Tag Manager by a tag that requires analytics consent. Until a visitor grants it, the container stays at 0 pixels and the page never contacts our servers. After we granted analytics consent in the browser, the same page showed a 783 pixel review list and a badge. If you load the widget through a tag manager, check which consent the tag waits for.