Platforms

Shoper reviews widget (plus IdoSell and Sky-Shop): where the code goes

23 October 2026 · JustReview

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.

ShopWhere the library loadsWhere the container sitsSourcesWhat rendered
Shoper, shop A<head> with defer; init from the custom JS fileCustom HTML box on the home pageGoogleList, 1180 × 648 px
Shoper, shop BEnd of <body>, inline initEnd of <body>, below the footerEtsy, Google, AllegroRatings bar 196 px, list 802 px, badge
IdoSellInside one CMS text pageSame text pageGoogle, Facebook, AllegroRatings bar 196 px, list 584 px
Sky-Shop, shop AGoogle Tag Manager, behind analytics consentContent area on every pageAllegro0 px before consent, 783 px list after
Sky-Shop, shop BEnd of <body>, inline initFloating badgeAllegroBadge, 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 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

PlatformLibrary and initContainerTrap we measured
ShoperLibrary in footer.tpl; init in Własny Skrypt JS, without <script> tagsPage template or a custom HTML boxPasted at the end of the body, the widgets render below the footer
IdoSellSite-wide code area, or inside one CMS pageSame page, inside the contentNone in our sample; reserve the height as this shop did
Sky-ShopBefore the closing body tag, or a tag managerContent area of the pageA consent-gated tag leaves the container at 0 px
ShoploSite-wide code areaPage contentNo 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.

Real reviews, live from three sources

This slider is not a screenshot. It pulls our own reviews from Facebook, Capterra and G2 through the same widget you would install.