15 вересня 2026 року ми виміряли ззовні 43 живі інтернет-магазини на трьох платформах: 22 на Хорошопі, 9 на Prom із власним доменом і 12 на OpenCart. Хотіли отримати просте порівняння: скільки думає сервер, чи є canonical, чи розмічений товар, що лежить у карті сайту.
Порівняння ми отримали, але спершу довелося розібратися з двома помилками самого виміру. Через першу Prom вийшов би найшвидшою платформою. Через другу вийшло б, що майже на всіх магазинах Хорошопу немає ні аналітики, ні canonical. Обидва висновки були б неправдою, і обидві пастки чекають на кожного, хто перевіряє сайт автоматичним інструментом.
Кого міряли і як
Вибірка не випадкова, і це треба сказати одразу. Хорошоп — це 22 магазини, відібрані здебільшого з публічного списку клієнтів платформи, які 15 вересня відповіли кодом 200. Два домени ми відкинули: один віддав порожню відповідь, другий не мав ознак платформи. Prom — 9 магазинів на власних доменах, знайдених як приклади в статті іншої агенції та пошуком. OpenCart — 12 магазинів із нашої серпневої вибірки, портфоліо однієї студії та пошуку. Жоден із 43 не є нашим клієнтом.
Платформу підтверджували за кодом сторінки, а не за назвою. У Prom це ресурси та шапка з доменів самої платформи. У Хорошопу — шаблон robots.txt і карта сайту в каталозі платформи. В OpenCart — шляхи до теми й скриптів движка.
Усе міряли з однієї точки мережі за один вечір, і тільки головну сторінку плюс одну товарну там, де її вдалося відкрити. Тому далі йдеться саме про цю вибірку, а не про платформу загалом.
Пастка перша: інструмент міряв відмову, а не сторінку
Наш скрипт зовнішнього аудиту знімає час першої відповіді запитом HEAD. Такий запит просить у сервера лише заголовки, без тіла сторінки. Для Prom скрипт видав медіану 138,7 мс. Це виглядало б як найкращий результат вибірки.
Насправді Prom на HEAD відповідає кодом 405, тобто «метод не дозволено». Сервер швидко відмовляє, і скрипт міряв саме цю відмову. Коли ми перейшли на звичайний GET кінцевої адреси (п'ять замірів на сайт, від кожного береться медіана), картина розвернулась: медіана по дев'яти магазинах Prom склала 713,8 мс.
16 вересня ми повторили перевірку на трьох магазинах Prom. HEAD повернув 405 за 0,16–0,32 с, а GET тієї самої адреси повернув 200 за 0,78–1,09 с.
Таку помилку легко пропустити, бо цифра виглядала правдоподібно: швидкий сервер великої платформи нікого не дивує. Видно її стало лише тоді, коли ми подивились на код відповіді, а не тільки на час.
Пастка друга: Хорошоп віддає не-браузеру сторінку перевірки
Друга проблема більша. На 21 із 22 магазинів Хорошопу запит без браузера отримує замість магазину крихітну сторінку з одним скриптом. Так 15 вересня відповідали і curl, і наш аудит. Розмір відповіді — від 295 до 778 байтів.
Скрипт на цій сторінці крутить порожній цикл 800 мс плюс випадкову добавку до 500 мс. Потім він ставить cookie challenge_passed строком на 30 хвилин і перезавантажує сторінку. Браузер проходить це сам і показує магазин. Клієнт, який не виконує JavaScript, бачить тільки скрипт.
Що наш інструмент «побачив» на 22 головних Хорошопу:
- canonical на головній — у 1 магазину з 22;
- лічильників аналітики немає — у 21 з 22;
- розмітка Product на товарній сторінці — у 0 з 19, де вдалося відкрити товар.
Усі ці цифри описують сторінку перевірки, а не магазини. Ми визнали їх недійсними й не публікуємо як характеристику платформи.
16 вересня повторний прохід дав те саме: 21 із 22, розмір від 295 до 777 байтів. Того ж дня ми відкрили один із цих магазинів у Chrome через Playwright. Сторінка завантажилась одразу, cookie перевірки не з'явилась, canonical і hreflang на місці, а сама головна передалась розміром понад 50 КБ.
Що віддається без перевірки: robots.txt 16 вересня відкрився на всіх 22 магазинах. У 21 із них є рядок Content-signal: search=yes, ai-input=yes, ai-train=no. У магазинах Prom і OpenCart із вибірки такого рядка немає ні в одному.
Чого ми не знаємо. Чи отримують цю сторінку пошукові роботи й AI-асистенти, ми не перевіряли. Для цього довелося б підробити User-Agent робота, а цього ми не робимо. Чесна перевірка є лише у власника магазину, у Search Console (про неї нижче). Не знаємо ми й того, чи ввімкнена ця перевірка постійно: у нас є тільки два дні спостереження. Тому ми не стверджуємо, що Google бачить порожню сторінку. Ми стверджуємо лише одне: зовнішні аудити, сервіси моніторингу цін і будь-який інший клієнт без JavaScript у ці два дні отримували скрипт замість магазину.
Що вдалося виміряти
Prom у цій вибірці повільніший за OpenCart приблизно вдвічі за медіаною, зате рівний. Жоден не перейшов секунду за медіаною, але у трьох із дев'яти медіана вища за 800 мс. Canonical і hreflang є всюди, розмітка товару — на семи з восьми відкритих товарних сторінок. Сервер на орендованій платформі налаштовує платформа, а не власник магазину. Ще одна деталь: на всіх 9 головних стоїть той самий ідентифікатор Google Analytics 4, окремо від власного ідентифікатора магазину. Отже, цей тег додає платформа, а не власник. Які дані він збирає, ми не досліджували.
OpenCart дає найбільший розкид в обидва боки: від 97 мс до 1,3 с, canonical лише на двох головних із дванадцяти. На одному магазині карта сайту відповідає кодом 200 з порожнім тілом, і так було 15 і 16 вересня. Ще один показує в заголовках PHP 7.3. Вісім із дванадцяти магазинів OpenCart узяті з нашого серпневого виміру, тож розклад по нішах ми тут не повторюємо, він є в технічній базі ринку по 39 магазинах.
Хорошоп виміряний лише частково. robots.txt і карта сайту є на всіх 22, і карта оголошена в robots.txt у кожного. Усе, що читається з HTML, для 21 магазину ззовні недоступне.
І ще одне спостереження: медіанний каталог в OpenCart у цій вибірці в кілька разів більший, ніж у Prom, а сервер відповідав швидше. Тож розміром каталогу різницю в часі тут не пояснити.
Як перевірити свій магазин за 10 хвилин
1. Чи не міряє ваш інструмент відмову. Порівняйте код відповіді на HEAD і на GET:
curl -s -I -o /dev/null -w 'HEAD: %{http_code} %{time_starttransfer} с\n' https://ваш-магазин.ua/
curl -s -o /dev/null -w 'GET: %{http_code} %{time_starttransfer} с\n' https://ваш-магазин.ua/
Якщо HEAD дає 405 або 403, а GET дає 200, то сервіси, які міряють через HEAD, показують вам неправдивий час. Для GET зніміть п'ять замірів і беріть медіану. Що означає сама цифра, ми розбирали в статті про швидкість сайту.
2. Що бачить клієнт без браузера.
curl -sL https://ваш-магазин.ua/ -o home.html
wc -c home.html
grep -c '<title' home.html
Кілька сотень байтів без <title> означають, що замість магазину віддається сторінка перевірки або захисту. Тоді кожен зовнішній аудит вашого сайту описує саме її.
3. Що написано в robots.txt.
curl -s https://ваш-магазин.ua/robots.txt | head -20
Подивіться, чи є там Content-signal і які сигнали він оголошує.
4. Що отримує Google. У Search Console відкрийте перевірку URL, запустіть перевірку опублікованої адреси й перегляньте HTML, який отримав робот. Якщо там магазин, пошук бачить магазин, хоч би що показував curl. Цей крок може зробити тільки власник ресурсу, і це найпряміший спосіб дізнатися відповідь.
Що ми змінили і чого це не виправило
У зведенні вимірів ми замінили час першої відповіді для Prom і OpenCart на заміри через GET. Цифри скрипта для Prom позначили як недійсні. Для 21 магазину Хорошопу позначили недійсними всі поля, які читаються з HTML: час відповіді, canonical, лічильники, hreflang і розмітку. Правило, яке ми застосували: відповідь на кілька сотень байтів без заголовка сторінки — це «не виміряно», а не нуль.
Головної прогалини це не закрило. Порівняти HTML Хорошопу з двома іншими платформами ззовні ми досі не можемо, а обходити перевірку не будемо. Вибірки малі й не випадкові. Час відповіді знятий з однієї точки мережі за один вечір і тільки для головної, тобто це час сервера, а не швидкість, яку відчуває покупець.
Якщо ви думаєте про переїзд, перший крок — ваші власні заміри, а не наша таблиця. Для магазинів на Хорошопі ми описали, з чого починаємо, на сторінці про переїзд із Хорошопу. Повну перевірку всіх сторінок, а не лише головної, ми робимо в технічному аудиті.