Прогін 16.08.2026. Сторінки завантажені як є, без вашого коду і без доступів. Нижче — усе, що читається з кожної, з типом розмітки, селектором вузла і підтвердженням, що значення справді є у збереженому HTML. Ті самі дані таблицею: harakterystyky-3-storinky.xlsx.
Сам файл теж перевірений окремо: кожен селектор із таблиць нижче застосований заново до збереженого HTML іншим скриптом — усі 130 з 130 знаходять вузол, у якому справді лежить це значення.
| Назва | Значення | Розмітка | Селектор вузла | Стан | |
|---|---|---|---|---|---|
| 1 | Назва товару | Електропростирадло Beurer UB 60 ЄС | JSON-LD | head > script:nth-of-type(10) → $.name | підтверджено джерелом точний збіг підрядка в HTML |
| 2 | Артикул (sku) | VDK00196 | JSON-LD | head > script:nth-of-type(10) → $.sku | підтверджено джерелом точний збіг підрядка в HTML |
| 3 | Виробник (brand) | Beurer | JSON-LD | head > script:nth-of-type(10) → $.brand.name | підтверджено двома розмітками точний збіг підрядка в HTML |
| 4 | Ціна (offers.price) | 3699 | JSON-LD | head > script:nth-of-type(10) → $.offers.price | підтверджено джерелом точний збіг підрядка в HTML службове поле, не характеристика |
| 5 | Валюта (offers) | UAH | JSON-LD | head > script:nth-of-type(10) → $.offers.priceCurrency | підтверджено джерелом точний збіг підрядка в HTML службове поле, не характеристика |
| 6 | Наявність (offers) | http://schema.org/InStock | JSON-LD | head > script:nth-of-type(10) → $.offers.availability | підтверджено джерелом точний збіг підрядка в HTML службове поле, не характеристика |
| 7 | Тип | Електропростирадло | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(1) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 8 | Виробник | Beurer | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(2) > td:nth-of-type(2) | підтверджено двома розмітками точний збіг підрядка в HTML |
| 9 | Модель | UB 60 | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(3) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 10 | Колір | Білий | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(4) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 11 | Безпека | Автоматичне відключення | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(5) > td:nth-of-type(2) → текстовий вузол 1 | підтверджено джерелом точний збіг підрядка в HTML значення 1 з 2 у цій комірці |
| 12 | Безпека | Захист від перегріву | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(5) > td:nth-of-type(2) → текстовий вузол 2 | підтверджено джерелом точний збіг підрядка в HTML значення 2 з 2 у цій комірці |
| 13 | Кількість температурних режимів | 3 | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(6) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 14 | Матеріал покриття | Фліс | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(7) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 15 | Розмір (ковдри, простирадла) | Одинарний | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(8) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 16 | Функції | Швидке нагрівання | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(9) > td:nth-of-type(2) → текстовий вузол 1 | підтверджено джерелом точний збіг підрядка в HTML значення 1 з 4 у цій комірці |
| 17 | Функції | Світловий індикатор нагрівання | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(9) > td:nth-of-type(2) → текстовий вузол 2 | підтверджено джерелом точний збіг підрядка в HTML значення 2 з 4 у цій комірці |
| 18 | Функції | Підходить для прання у пральній машині | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(9) > td:nth-of-type(2) → текстовий вузол 3 | підтверджено джерелом точний збіг підрядка в HTML значення 3 з 4 у цій комірці |
| 19 | Функції | Пульт керування | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(9) > td:nth-of-type(2) → текстовий вузол 4 | підтверджено джерелом точний збіг підрядка в HTML значення 4 з 4 у цій комірці |
| 20 | Розміри | 150 х 80 см | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(10) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 21 | Потужність | 60 Вт | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(11) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 22 | Система живлення | Електромережа | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(12) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 23 | Країна виробник | Німеччина | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(13) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 24 | Гарантія | 12 місяців | таблиця | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(14) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML комерційне поле, не характеристика товару |
Перевірив і повним браузером з цієї ж адреси — та сама стіна, знімок нижче. У вас на комп'ютері сторінка, найпевніше, відкривається: Cloudflare дивиться на репутацію адреси, з якої прийшов запит, а не на саму сторінку.

Що з цим роблю в системі: сторінка отримує статус «джерело недоступне», картка за нею не формується і не заповнюється наполовину. Мовчазної порожньої картки, як зараз, не буде.
| Назва | Значення | Розмітка | Селектор вузла | Стан | |
|---|---|---|---|---|---|
| 1 | Назва товару | Електропростирадло двоспальне Beurer UB 68 XXL | JSON-LD | body > script:nth-of-type(14) → $.name | підтверджено джерелом точний збіг підрядка в HTML |
| 2 | Артикул (sku) | UB 68 XXL | JSON-LD | body > script:nth-of-type(14) → $.sku | підтверджено джерелом точний збіг підрядка в HTML |
| 3 | Модель | 8964 | JSON-LD | body > script:nth-of-type(14) → $.model | підтверджено джерелом точний збіг підрядка в HTML |
| 4 | Виробник (brand) | Beurer | JSON-LD | body > script:nth-of-type(14) → $.brand.name | підтверджено джерелом точний збіг підрядка в HTML |
| 5 | Ціна (offers.price) | 5799.90 | JSON-LD | body > script:nth-of-type(14) → $.offers.price | підтверджено джерелом точний збіг підрядка в HTML службове поле, не характеристика |
| 6 | Валюта (offers) | UAH | JSON-LD | body > script:nth-of-type(14) → $.offers.priceCurrency | підтверджено джерелом точний збіг підрядка в HTML службове поле, не характеристика |
| 7 | Наявність (offers) | https://schema.org/InStock | JSON-LD | body > script:nth-of-type(14) → $.offers.availability | підтверджено джерелом точний збіг підрядка в HTML службове поле, не характеристика |
| 8 | Вихідна потужність у ватах | 2 х 60 | таблиця | #tab-description > table > tbody > tr:nth-of-type(1) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 9 | Можна прати в машині | так | таблиця | #tab-description > table > tbody > tr:nth-of-type(2) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 10 | Матеріал верхньої сторони | М'який фліс | таблиця | #tab-description > table > tbody > tr:nth-of-type(3) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 11 | Матеріал нижньої частини | Фліс | таблиця | #tab-description > table > tbody > tr:nth-of-type(4) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 12 | Сертифіковано згідно OEKO-TEX | так | таблиця | #tab-description > table > tbody > tr:nth-of-type(5) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 13 | Автоматичне перемикання назад | через 3 години від рівня 4/3 до рівня 2 | таблиця | #tab-description > table > tbody > tr:nth-of-type(6) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 14 | Налаштування температури | 2 х 4 | таблиця | #tab-description > table > tbody > tr:nth-of-type(7) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
| 15 | Розміри виробу | 150 х 160 см | таблиця | #tab-description > table > tbody > tr:nth-of-type(8) > td:nth-of-type(2) | підтверджено джерелом точний збіг підрядка в HTML |
На цих трьох сторінках однієї й тієї самої характеристики у двох розмітках
одночасно не трапилось, тому жорсткого конфлікту тут немає. Найближче до нього — поле
model у JSON-LD сторінки electros.com.ua: там стоїть 8964, тобто внутрішній номер
сторінки, а не модель (модель — UB 68 XXL, вона в sku і в заголовку). Якби система звіряла товар
за model, вона зчепила б картку не з тим товаром і не помітила б цього.
І ще одне: ваші три посилання — це не один товар. На першій UB 60, на другій і третій UB 68, який половина магазинів пише як «UB 68», а половина як «UB 68 XXL» (навіть сайт виробника називає його обома способами). Тобто звірка має вміти і зупинити чуже (UB 60 проти UB 68), і не заблокувати своє через різне написання тієї самої моделі.
Щоб показати, що робиться з розбіжністю, я взяв збережену копію першої сторінки і дописав у її JSON-LD характеристику «Потужність: 65 Вт», тоді як у таблиці на тій самій сторінці стоїть 60 Вт. Сама сторінка не змінювалась — правилась локальна копія. Ось що вийшло:
| Розмітка | Значення | Селектор | Конфлікт з |
|---|---|---|---|
| JSON-LD | 65 Вт | head > script:nth-of-type(10) → $.additionalProperty[1] | table: 60 Вт |
| таблиця | 60 Вт | #characteristic_reviews > div > div > div > div:nth-of-type(1) > table > tbody > tr:nth-of-type(11) > td:nth-of-type(2) | json-ld: 65 Вт |
allo.ua закрита перевіркою, але товар від цього нікуди не дівається: він є на інших сайтах, і картку можна зібрати звідти. Прогнав чотири джерела того самого простирадла тим самим кодом. Повні переліки пар з них — у xlsx, тут тільки підсумок.
| Джерело | Що віддало | Пар | Модель / артикул на сторінці |
|---|---|---|---|
| ortoservis.com.ua — Beurer UB 68 | прочитано | 34 | модель: 11019; артикул: 11019 |
| beurer.com.ua, сайт виробника — UB 68 | прочитано | 34 | модель: Матрац з обігрівом UB 68; артикул: 31805 |
| ttt.ua — Beurer UB 68 XXL | прочитано | 23 | артикул: 98513 |
| comfy.ua — Beurer UB 68 | HTTP 200, але характеристик у HTML немає: їх домальовує скрипт уже в браузері | 0 | — |
Це вже не розбіжність усередині сторінки, а зведення картки з кількох джерел. Тут видно, чому не можна просто взяти «перше, що знайшлось»:
| Характеристика | Що каже кожне джерело |
|---|---|
| назва | ortoservis: Електричне простирадло Beurer UB 68 beurer: Матрац з обігрівом UB 68 ttt: Електропростирадло BEURER UB 68 XXL |
| артикул | ortoservis: 11019 beurer: 31805 ttt: 98513 |
| модель | ortoservis: 11019 beurer: Матрац з обігрівом UB 68 |
| виробник | ortoservis: Beurer (Німеччина) ttt: Beurer |
| тип | ortoservis: Електрична грілка ttt: Простирадло з обігрівом |
| потужність | ortoservis: 2 x 60 Вт beurer: 2 x 60 Вт ttt: 100 Вт |
| матеріал | ortoservis: Фліс beurer: Фліс ttt: Мікроволоконний фліс |
| особливості | ortoservis: Два інноваційних світлодіодних кнопкових контролера для двох зон обігріву з індивідуальним регулюванням; Дві зони і чотири температурні режими для кожного користувача; Відображення температури з підсвічуванням ttt: Знімний шнур живлення , Індикатор температурних режимів з підсвіткою |
| гарантія | ortoservis: 12 місяців ttt: Гарантія: 12 місяців від виробника |
| ціна offers price | ortoservis: 10529 beurer: 10529.00 ttt: 9616 |
| кількість температурних режимів | beurer: 2 x 4 ttt: 4 |
Два промахи фільтра я зловив на ваших же сторінках, поки збирав цей файл:
characteristic_reviews — сайт склеїв вкладки «Характеристики» і «Відгуки» в один
блок. Фільтр бачив у назві «reviews» і викидав усі 14 рядків. Тепер контейнер, який сам
оголошує себе характеристиками, шумом не рахується.params.
Тепер рядок береться лише в групі однакових: характеристики завжди йдуть списком, а самотній
такий рядок — це майже завжди фільтр або перемикач.Окремо прогнав electros.com.ua ще й через браузер, з готовим DOM: там скрипт домальовує на
сторінку таблицю відгуків, і в ній рядок «Алла — 22.03.2026» виглядає точно як характеристика.
Пари вийшли ті самі, 15 із 15, а цей рядок відсіявся як відгук (id=review).
Це рівно та причина, через яку такі речі перевіряються на живих сторінках, а не на тестах: обидві помилки були б «зеленими» у будь-якому юніт-тесті.