E-commerce and businessTechnical SEO

Prom, Horoshop or OpenCart: what 43 stores show from the outside

On 15 September 2026 we externally measured 43 stores on Prom, Horoshop and OpenCart. Along the way we found two measurement traps: a HEAD request that made Prom look the fastest, and a check page that 21 of 22 Horoshop stores serve to a client without a browser.

September 16, 2026
9 min read

On 15 September 2026 we externally measured 43 live online stores on three platforms: 22 on Horoshop, 9 on Prom with their own domain and 12 on OpenCart. We wanted a simple comparison: how long the server thinks, whether there is a canonical, whether the product is marked up, what is in the sitemap.

We got the comparison, but first we had to sort out two errors in the measurement itself. Because of the first, Prom would have come out as the fastest platform. Because of the second, it would have looked as if almost all Horoshop stores had neither analytics nor a canonical. Both conclusions would have been false, and both traps await anyone who checks a site with an automated tool.

Who we measured and how

The sample is not random, and that has to be said right away. Horoshop means 22 stores, selected mostly from the platform’s public client list, that responded with code 200 on 15 September. We discarded two domains: one returned an empty response, the other had no signs of the platform. Prom means 9 stores on their own domains, found as examples in another agency’s article and through search. OpenCart means 12 stores from our August sample, one studio’s portfolio and search. None of the 43 is our client.

We confirmed the platform from the page code, not from the name. For Prom, these are resources and a header from the platform’s own domains. For Horoshop, the robots.txt template and a sitemap in the platform’s directory. For OpenCart, the paths to the engine’s theme and scripts.

Everything was measured from one network location in one evening, and only the homepage plus one product page where we managed to open it. So what follows is about this sample specifically, not about the platform in general.

Trap one: the tool measured a refusal, not the page

Our external audit script takes time to first response with a HEAD request. Such a request asks the server only for headers, without the page body. For Prom, the script produced a median of 138.7 ms. That would have looked like the best result in the sample.

In fact, Prom responds to HEAD with code 405, meaning “method not allowed.” The server refuses quickly, and the script measured exactly that refusal. When we switched to a regular GET of the final address (five runs per site, taking the median of each), the picture reversed: the median across the nine Prom stores came to 713.8 ms.

On 16 September we repeated the check on three Prom stores. HEAD returned 405 in 0.16–0.32 s, while GET of the same address returned 200 in 0.78–1.09 s.

This kind of error is easy to miss because the figure looked plausible: a fast server on a large platform surprises no one. It only became visible when we looked at the response code, not just the time.

Trap two: Horoshop serves a check page to non-browsers

The second problem is bigger. On 21 of 22 Horoshop stores, a request without a browser receives a tiny page with a single script instead of the store. That is how both curl and our audit were answered on 15 September. The response size is from 295 to 778 bytes.

The script on this page runs an empty loop for 800 ms plus a random addition of up to 500 ms. Then it sets a challenge_passed cookie for 30 minutes and reloads the page. A browser passes this on its own and shows the store. A client that does not execute JavaScript sees only the script.

What our tool “saw” on 22 Horoshop homepages:

  • canonical on the homepage — in 1 store of 22;
  • no analytics counters — in 21 of 22;
  • Product markup on the product page — in 0 of 19 where we managed to open a product.

All these figures describe the check page, not the stores. We declared them invalid and do not publish them as a characteristic of the platform.

On 16 September a repeat pass gave the same result: 21 of 22, size from 295 to 777 bytes. The same day we opened one of these stores in Chrome via Playwright. The page loaded immediately, the check cookie did not appear, canonical and hreflang were in place, and the homepage itself was transferred at over 50 KB.

What is served without the check: on 16 September robots.txt opened on all 22 stores. 21 of them have the line Content-signal: search=yes, ai-input=yes, ai-train=no. None of the Prom and OpenCart stores in the sample has such a line.

What we do not know. We did not check whether search crawlers and AI assistants receive this page. To do that we would have had to fake a crawler’s User-Agent, and we do not do that. Only the store owner has an honest check, in Search Console (more on it below). Nor do we know whether this check is enabled permanently: we have only two days of observation. So we do not claim that Google sees an empty page. We claim only one thing: external audits, price monitoring services and any other client without JavaScript received a script instead of the store on those two days.

What we managed to measure

Metric (15.09.2026) Prom, 9 OpenCart, 12 Horoshop, 22
Median first response, GET 713.8 ms 326.0 ms not measured
Fastest / slowest 569.6 / 864.3 ms 97.0 / 1,304.6 ms not measured
Canonical on homepage 9 of 9 2 of 12 not measured
hreflang on homepage 9 of 9 10 of 12 not measured
Product on product page 7 of 8 5 of 9 not measured
robots.txt 9 of 9 12 of 12 22 of 22
Median URLs in sitemap 1,604 (across 8) 9,298 (across 11) 1,472 (across 22)
Unsupported PHP in headers not visible 1 of 12 not visible

In this sample Prom is roughly twice as slow as OpenCart by median, but consistent. None exceeded a second by median, but three of the nine have a median above 800 ms. Canonical and hreflang are present everywhere, product markup on seven of the eight product pages opened. On a rented platform, the server is configured by the platform, not by the store owner. One more detail: all 9 homepages carry the same Google Analytics 4 ID, separate from the store’s own ID. So this tag is added by the platform, not by the owner. We did not investigate what data it collects.

OpenCart shows the widest spread in both directions: from 97 ms to 1.3 s, canonical on only two homepages of twelve. On one store the sitemap responds with code 200 and an empty body, and it was so on 15 and 16 September. Another shows PHP 7.3 in its headers. Eight of the twelve OpenCart stores are taken from our August measurement, so we do not repeat the breakdown by niche here; it is in the technical baseline of the market across 39 stores.

Horoshop is measured only partially. robots.txt and a sitemap exist on all 22, and every one declares the sitemap in robots.txt. Everything read from HTML is unavailable from outside for 21 stores.

And one more observation: the median catalog on OpenCart in this sample is several times larger than on Prom, yet the server responded faster. So catalog size cannot explain the difference in time here.

How to check your store in 10 minutes

1. Is your tool measuring a refusal. Compare the response code for HEAD and for GET:

curl -s -I -o /dev/null -w 'HEAD: %{http_code} %{time_starttransfer} s\n' https://your-store.ua/
curl -s -o /dev/null -w 'GET:  %{http_code} %{time_starttransfer} s\n' https://your-store.ua/

If HEAD gives 405 or 403 while GET gives 200, then services that measure via HEAD show you a false time. For GET, take five runs and use the median. What the figure itself means we covered in the article on website speed.

2. What a client without a browser sees.

curl -sL https://your-store.ua/ -o home.html
wc -c home.html
grep -c '<title' home.html

A few hundred bytes without <title> mean that a check or protection page is served instead of the store. Then every external audit of your site describes exactly that page.

3. What robots.txt says.

curl -s https://your-store.ua/robots.txt | head -20

See whether it contains Content-signal and which signals it declares.

4. What Google receives. In Search Console, open URL inspection, run a test of the live URL and view the HTML the crawler received. If the store is there, search sees the store, whatever curl shows. Only the property owner can take this step, and it is the most direct way to find the answer.

What we changed and what it did not fix

In the measurement summary we replaced the time to first response for Prom and OpenCart with GET measurements. We marked the script’s figures for Prom as invalid. For 21 Horoshop stores we marked as invalid all fields read from HTML: response time, canonical, counters, hreflang and markup. The rule we applied: a response of a few hundred bytes without a page title is “not measured,” not zero.

This did not close the main gap. We still cannot compare Horoshop’s HTML with the two other platforms from outside, and we will not bypass the check. The samples are small and not random. Response time was taken from one network location in one evening and only for the homepage, meaning it is server time, not the speed a shopper feels.

If you are thinking about moving, the first step is your own measurements, not our table. For stores on Horoshop, we described where we start on the page about migrating from Horoshop. A full check of all pages, not just the homepage, is what we do in a technical audit.

Tags

E-commerceSEOPerformance

🤔Did you like the article?

Your opinion helps us create better content

Share with friends

Found something useful? 🚀

Help others learn about it - share the article on social networks

https://lionex.com.ua/blog/prom-horoshop-chy-opencart-43-magazyny

💚 Thank you for helping us grow

Vladyslav Chystiakov

Writes about what he builds himself: online stores on OpenCart, applications on Next.js, integrations and site speed. The articles carry measurements and checks a reader can repeat on their own project, not general advice. Commercial development since 2015.

Frequently asked questions

Answers to common questions on the topic

Only two could be compared. By the median server first response to a GET request for the homepage, OpenCart gave 326.0 ms across 12 stores and Prom 713.8 ms across 9 stores, measured on 15 September 2026. For Horoshop this figure could not be taken from the outside. This is server time on a non-random sample from one network location, not the speed a shopper feels.

If a tool measures time with a HEAD request, it may get a fast refusal with code 405 instead of the page. That is what happened with our own script: for Prom it produced 138.7 ms, while a regular GET gave 713.8 ms. Check which response code sits next to the time figure.

On 15 and 16 September 2026, on 21 of 22 stores checked, a request without a browser received a tiny page with a check script instead of the store. One of these stores, opened in a browser on 16 September, loaded normally. So we did not measure canonical, counters or markup for these stores and marked them as invalid.

We do not know and do not claim it. Checking from the outside would require faking a search crawler’s User-Agent, and we do not do that. The store owner can check it themselves: in Search Console, run a test of the live URL and look at the HTML the crawler received.

Compare the response code and time for HEAD and for GET. Then download the homepage with curl and look at the file size and whether it contains a title tag: a few hundred bytes without a title mean a check or protection page. Next, review robots.txt, and in Search Console, the HTML that Google received.

Get the best articles by email

Subscribe to our newsletter and receive useful tips, insights and news about web development, marketing and business.

We respect your privacy. You can unsubscribe at any time.

Related articles

All articles
Одна літера в адресі: 76 перейменованих сторінок і шість днів 404
Technical SEO

Одна літера в адресі: 76 перейменованих сторінок і шість днів 404

19 серпня 2026 року ми перегенерували 76 російських адрес, бо в межах одного шляху співіснували дві транслітерації, — і майже шість днів старі адреси відповідали 404, бо механізм переїзду шукав сторінку лише за українським slug'ом. Через п'ять тижнів 12 старих адрес досі у видачі, а на юридичній сторінці сума за місяць і тижневі дані кажуть різне. Розповідаємо, чого з цього не випливає і як перевірити свій сайт.

8 min
Sep 24
Read more
Certificates renew themselves: TLS on 116 sites, and one that didn't renew
Web development

Certificates renew themselves: TLS on 116 sites, and one that didn't renew

On 22 September 2026 we checked the HTTPS certificates on 116 sites we had already measured for market studies, and for 104 of them we compared the state with August. All 116 passed verification, 108 run on 89- and 90-day free certificates, and only one site's certificate has still not renewed, even though with typical settings it should have by now. We walk through the measurements and the limits of the method, and show how to check your own site with a single command.

9 min
Sep 22
Read more
154 type errors our build was throwing away: what we found in them
Web development

154 type errors our build was throwing away: what we found in them

On 21 September 2026, a type check on our site reported 154 errors, even though the build had been green every time: the check's result was simply thrown away. Inside, we found zeros in link statistics and in the analytics export, sorting that didn't sort, and tests that never ran. Here is how we worked through them, what we changed, and how to check your own project.

9 min
Sep 22
Read more