Покупець питає в AI, а не гуглить
Агент не рендерить вітрину, він читає структуровані дані. Якщо в картці товару немає Product і Offer, агенту нема чого цитувати, і він радить конкурента з розміткою.
Liquid тема + AI-search SEO
Покупці дедалі частіше питають про товар у ChatGPT і Perplexity, а не в Google. Ми зібрали живий стенд: одна сторінка товару у двох рендерах, з повною JSON-LD розміткою та без неї, плюс скрипт-аудитор, який доводить різницю фактом, а не словами.
Де болить
Агент не рендерить вітрину, він читає структуровані дані. Якщо в картці товару немає Product і Offer, агенту нема чого цитувати, і він радить конкурента з розміткою.
Стандартний head ставить голий title і все. Без schema Google не показує ціну, наявність і зірки у видачі, сніпет виглядає бідно і CTR просідає.
Магазини вішають кілька платних апок, які дублюють одна одну і сповільнюють стор. Та сама розмітка пишеться в темі одним Liquid-сніпетом: без абонплати і без зайвих запитів.
Що зроблено
jsonld-product.liquidProduct, Offer, AggregateRating: назва, ціна, наявність, бренд, рейтингjsonld-faq.liquidFAQPage: готові пари питання і відповідь, які AI цитує напрямуjsonld-breadcrumbs.liquidBreadcrumbList: структура каталогу для пошукуai-meta.liquidtitle-формула, description, canonical, Open Graph product, robotsmain-product.liquidсекція товару: галерея, ціна зі знижкою, акордеони, видимий FAQllms.txtменю магазину для AI-краулерів простим текстомrender.py + audit.pyрендер стенду через python-liquid і аудит обов'язкових полів<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": {{ product.title | json }},
"image": [ {{ image.abs_src | json }} ],
"sku": {{ product.sku | json }},
"brand": { "@type": "Brand",
"name": {{ product.vendor | json }} },
"offers": {
"@type": "Offer",
"price": {{ product.price | money_amount | json }},
"priceCurrency": {{ shop.currency | json }},
"availability": "https://schema.org/InStock"
}
}
</script>
Фрагмент jsonld-product.liquid, повний файл відкривається за посиланням
Живий результат

Людина бачить нормальну картку товару. Пошук і AI бачать тільки title. Ні ціни, ні наявності, ні FAQ.
Відкрити before.html
Той самий вигляд для людини. Для машин: три JSON-LD блоки, canonical, OG product і посилання на llms.txt.
Відкрити optimized.htmlРізниця фактом
| Сигнал | before.html | optimized.html |
|---|---|---|
| Title | голий, без ціни й наявності | формула: товар + ціна + наявність + бренд |
| Meta description | немає | є, 155 символів з опису |
| Canonical | немає | є |
| Open Graph product | немає | og:type, ціна, валюта, наявність |
| JSON-LD Product + Offer | немає | всі обов'язкові поля Rich Results |
| JSON-LD FAQPage | немає | 4 питання з відповідями |
| JSON-LD BreadcrumbList | немає | 3 рівні каталогу |
| llms.txt для AI-краулерів | немає | злінкований у head |
| Ціна повної розмітки | 0 байт і 0 сигналів | +4.7 КБ на сторінку, без жодної апки |
Джерело таблиці: audit.json, згенерований скриптом audit.py по обох рендерах
Як перевірити
У before має бути 0, в optimized рівно 3.
curl -s https://guardlabs.online/demo/shopify-ai-seo/store/before.html | grep -c 'ld+json' # 0 curl -s https://guardlabs.online/demo/shopify-ai-seo/store/optimized.html | grep -c 'ld+json' # 3Вставити адресу optimized.html: тест бачить Product, FAQ і Breadcrumbs. Вставити before.html: порожньо.
https://search.google.com/test/rich-resultsСкрипт audit.py перевіряє обов'язкові поля Product і Offer та пише результат у audit.json. Обидва файли лежать поруч зі стендом.
curl -s https://guardlabs.online/demo/shopify-ai-seo/audit.json | python3 -m json.toolЦе наш власний демо-стенд, а не клієнтський магазин: бренд ARBOR і товар вигадані, рейтинг і відгуки теж демонстраційні. Стенд показує підхід і якість коду, який ми ставимо в реальні Shopify-теми. Комерційні кейси на Shopify ми чесно позначаємо окремо.