Посібник користувача
Версія 0.1.0. CS-Cart 4.18+, перевірено на 4.18.3. PHP 8.1+. Описано лише реалізований функціонал.
Версія продукту: 0.1.0 (CS-Cart 4.18+, перевірено на 4.18.3; PHP 8.1+).
Цей документ описує реально реалізований функціонал P0 MVP.
Ілюстрації екранів доступні на сторінці аддону. Нижче - короткий текстовий опис того, що ви побачите в адмінці.
Формула продукту: Видно. Контрольовано. Виміряно.
1. Що це
RobotsLLM for AI-SEO - аддон CS-Cart, який:
- Керує доступом AI- і SEO-ботів через розумний
robots.txt(пресети, diff, rollback). - Веде реєстр 31 бота і може підтягувати diff з відкритого джерела ai-robots-txt (застосування - лише вручну).
- Генерує
/llms.txtі мовні версії як навігаційну карту для AI-агентів (з курацією). - Публікує
.md-дзеркала категорій, CMS-сторінок і товарів. - Захищає crawl budget (критичні шляхи CS-Cart, sitemap, noindex для дзеркал).
- Показує аналітику AI-ботів і AI-referral замовлень у адмінці.
- Санітизує контент, сканує PII/секрети, запускає self-audit.
Окремий VPS не потрібен. Це звичайний PHP-аддон + таблиці MySQL + панельний cron.
Важливо про видачу. Готові /llms.txt і *.md лежать під var/ (у CS-Cart цей каталог закритий від прямого веб-доступу). Публічні URL віддає PHP-serve (dispatch=robots_llm.serve): ті самі заголовки Content-Type, X-Robots-Tag: noindex, ETag / Last-Modified, відповідь 304 на умовний запит. Повна статика без PHP - оптимізація майбутніх версій, не поведінка 0.1.0.
Аддон нічого не публікує в robots.txt сам по собі після встановлення. Політика застосовується лише кнопкою Опублікувати.
2. Встановлення (zip через адмінку)
- Завантажте пакет
robots_llm-0.1.0.zip(збірка:build/package.ps1абоbuild/package.sh). - У CS-Cart: Адміністрування → Модулі → Завантажити та встановити модуль (або «Manage add-ons» → Upload).
- Оберіть zip і підтвердіть установку.
- Увімкніть модуль RobotsLLM, якщо він не активний.
- Переконайтесь, що мови UK/EN підхопили langvars (перезавантажте кеш мов/шаблонів за потреби).
Структура пакета (корінь магазину):
app/addons/robots_llm/
design/backend/templates/addons/robots_llm/
var/langs/uk/addons/robots_llm.po
var/langs/en/addons/robots_llm.poПісля інсталяції створюються таблиці ?:robots_llm_*, seed реєстру з 31 ботом, каталоги під var/files/{id}/robots_llm/generated і …/previous (корінь задає fn_get_files_dir_path() CS-Cart). Якщо root .htaccess доступний для запису, аддон вставляє ідемпотентну секцію # BEGIN robots_llm - правила ведуть .md / llms.txt на PHP-serve, а не на статичний файл у var/.
На екрані: список модулів CS-Cart; рядок RobotsLLM for AI-SEO зі статусом Active і описом аддону.
Деінсталяція / відкат
- Відкат robots.txt: Веб-сайт → RobotsLLM → Політика краулінгу - rollback до попередньої версії. При першій публікації зберігається бекап поточного вмісту зі штатного сховища CS-Cart.
- Повне видалення: «Модулі» → Uninstall. Таблиці знімаються uninstall-SQL; згенеровані файли і секція
.htaccessприбираються хуком. Перед drop таблиць аддон намагається повернути в штатне сховище CS-Cart бекап першого запуску. Якщо потрібна конкретна пізніша версія - зробіть rollback до uninstall. Фізичнийrobots.txtу корені аддон не створює і не видаляє.
3. Перший запуск: майстер політики (robots.txt)
Меню: Веб-сайт → RobotsLLM → Політика краулінгу.
Майстер ставить кілька простих питань (AI-пошук / навчання / user-агенти / SEO-tools) і обирає пресет (або Custom). Далі:
- Перегляньте live-прев’ю згенерованого robots.txt.
- Перегляньте diff «було → стане».
- За потреби прогоніть симулятор «що бачить бот X для URL Y».
- Натисніть Зберегти, потім Опублікувати (запис у штатний
robots_dataCS-Cart + версія в ledger). Публікація не відбувається при встановленні.
На екрані (майстер): блок питань так/ні, випадаючий список пресету (auto / Growth / Open / Strict / Custom) і підпис поточного пресету.
>
На екрані (diff): два блоки - прев’ю повного тексту robots.txt і уніфікований diff «активна версія → нова».
>
На екрані (симулятор): вибір бота, поле шляху, кнопка прогону і мітка Allowed / Blocked.
3.1. Пресети - чесна таблиця класів ботів
| Клас ботів | Приклади | 🚀 Growth (дефолт) | 🌐 Open | 🛡️ Strict |
|---|---|---|---|---|
| Класичні пошуковики | Googlebot, Bingbot | allow | allow | allow |
| AI Search | OAI-SearchBot, Claude-SearchBot, PerplexityBot, Applebot, Amazonbot, DuckAssistBot | allow | allow | block |
| AI User-triggered | ChatGPT-User, Claude-User, Perplexity-User, Meta-ExternalFetcher, MistralAI-User | allow | allow | block |
| AI Training | GPTBot, ClaudeBot, CCBot, Bytespider, Meta-ExternalAgent, Google-Extended, Applebot-Extended, cohere-ai | block | allow | block |
| SEO-tools | AhrefsBot, SemrushBot… | default (не чіпаємо) | allow | block |
| Інше / невідомі | User-agent: * + критичні Disallow | захист критичних шляхів | ширший allow | жорсткіший block |
Custom - ручні перемикачі по класах (purpose) + overrides по окремих ботах у реєстрі.
Важливо (компілятор, RFC 9309):
- Для бота з власною групою критичні Disallow дублюються в його секцію (власна група ігнорує
*). Google-Extended/Applebot-Extended- control tokens: повнийDisallow: /або відсутність групи.- Існуючі ручні правила мерчанта імпортуються як manual-блок і не видаляються мовчки.
- Наприкінці додається
Sitemap:.
3.2. Фізичний robots.txt у корені
Якщо в корені вітрини лежить фізичний файл robots.txt, CS-Cart віддає саме його - запис у БД (і політика аддону) не стануть публічними. Аддон пише лише в штатне сховище і не перезаписує / не видаляє цей файл. Перед тим як очікувати живу політику на /robots.txt, перейменуйте або приберіть фізичний файл (збережіть копію).
4. Реєстр ботів
Веб-сайт → RobotsLLM → Реєстр ботів.
- Seed 31 бота при інсталяції.
- Колонки: ім’я, провайдер, мета (purpose), рекомендація, рішення мерчанта (allow / block / default) per storefront.
- Синк з
ai-robots-txt(GitHub): diff →pending_review; застосування тільки кнопкою. Фейл синку не ламає магазин.
На екрані (реєстр): селектор вітрини і таблиця ботів (ім’я, провайдер, purpose, рекомендація, ваше рішення, джерело, статус).
>
На екрані (синк): статус
idle/pending_review/error, дата перевірки, лічильники added / changed / removed і кнопки «Перевірити зараз» / «Застосувати».
5. Курація llms.txt (AI Discovery)
Веб-сайт → RobotsLLM → AI Discovery.
Генеруються:
/llms.txt- кореневий мовний індекс;/{lang}/llms.txt- файл на кожну активну мову вітрини.
Структура: заголовок → опис → мета (мова, ринок, валюта, updated, дисклеймер цін) → секції (категорії / допомога / політики / Optional).
Курація в UI:
- pin / unpin / exclude / порядок (вгору-вниз);
- token budget (дефолт 15 000, оцінка ≈ length/4);
- max URLs;
- «Згенерувати зараз» + прев’ю тексту;
- автовиключення: noindex, hidden, disabled; out-of-stock → Optional.
Усі URL - абсолютні canonical. Мови не змішуються в одному файлі.
Чесно: llms.txt - навігаційна карта для AI-агентів, не «кнопка в ChatGPT». Головні важелі видимості - правильні дозволи search/user-ботів + чисті дані.
На екрані (курація): бюджет токенів, max URLs, лічильник черги і таблиці кандидатів із кнопками pin / exclude / ↑ / ↓.
>
На екрані (прев’ю): статус останньої генерації (idle/ok + hash) і згенерований текст llms.txt після «Згенерувати зараз».
6. Markdown-дзеркала і rewrite
6.1. Що генерується
- URL-схема:
{seo_path}.md(наприклад/akumulyatory.md, мовні префікси за схемою магазину). - Файли на диску:
var/files/{id}/robots_llm/generated/{storefront_id}/{lang}/...(не публічний веб-каталог). - Обсяг P0: категорії, CMS-сторінки (політики), товари (назва, бренд, SKU, анонімна ціна + дисклеймер, наявність, характеристики, sanitized-опис, canonical).
Publisher: tmp → валідація безпеки → atomic rename → registry documents → 1 покоління previous/.
Critical-знахідка (секрет / приватний PII / B2B-ціна) блокує публікацію; лишається last-known-good. Телефон/email у публічному описі товару - попередження, не блок (секрети лишаються блокуючими).
6.2. Видача (PHP-serve, не «чиста статика»)
CS-Cart закриває var/ від веб-доступу (Require all denied). Тому rewrite не віддає файл напряму з диска.
- Apache / LiteSpeed (секція
# BEGIN robots_llm):*.md,/llms.txt,/{lang}/llms.txt→index.php?dispatch=robots_llm.serve&rllm_path=…. - Контролер
robots_llm.serveчитає файл із PHP-доступногоvar/files/…, виставляє заголовки і тіло. - Заголовки успішної відповіді:
Content-Type(text/markdown; charset=utf-8для.md,text/plain; charset=utf-8для llms.txt),X-Robots-Tag: noindex,ETag,Last-Modified,Cache-Control: public, max-age=300. - Умовний запит з тим самим
If-None-Match/ свіжимIf-Modified-Since→ 304 (кешування працює). - Промах: якщо документ є в реєстрі - один enqueue у чергу; відповідь 404 без кешу «валідного» порожнього файлу.
Аддон генерує ідемпотентну секцію між маркерами:
# BEGIN robots_llm
# RobotsLLM: .md / llms.txt via PHP serve (do not edit by hand)
… RewriteRule → index.php?dispatch=robots_llm.serve …
# END robots_llmНа екрані: у root
.htaccess- позначена секція# BEGIN robots_llm…# END robots_llmз правилами наrobots_llm.serve(не шлях до файлу вvar/).
Nginx: у коді HtaccessSectionGenerator::nginxSnippet() є фрагмент для vhost (окремо, не в design/). Типовий зміст: location для *.md і llms.txt → rewrite на той самий dispatch=robots_llm.serve. Не використовуйте try_files у var/ - веб-сервер отримає 403.
Після установки перевірте, що секція реально потрапила в root .htaccess / vhost (на shared hosting інколи потрібна ручна вставка).
6.3. Черга змін
Хуки на оновлення/видалення товарів, категорій, сторінок, цін, залишків → dirty_queue.
Cron job=queue (кожні 5 хв): батч 100, ліміт ~55 с.
У коді також є job=reconcile (hash-звірка з диском) - не входить у рекомендований панельний розклад 0.1.0; запускайте лише за потреби.
Full rebuild - кнопка на Дашборді / Discovery або job=rebuild (стрімінгово, checkpoint у job_state).
7. Налаштування cron (панельні команди)
Рекомендований спосіб - панельний cron хостингу, який викликає CLI адмін-скрипта CS-Cart. Точна назва скрипта у кожного магазину своя (часто це перейменований admin.php). Підставте свій шлях до PHP 8.1+ і свій адмін-скрипт.
Формат:
/usr/bin/php8.1 /шлях/до/ВАШ_АДМІН.php --dispatch=robots_llm.cron job=JOBУ режимі консолі пароль cron не потрібен. Якщо запускаєте через HTTP, потрібен пароль Налаштування → Security → Cron password і cron_password= у запиті - для панелі зручніший CLI.
| Інтервал | job= | Призначення |
|---|---|---|
| Кожні 5 хв | queue | Обробити dirty queue (md / llms) |
| Кожні 15 хв | logparse | Інкрементальний парсер access-log (якщо шлях задано в налаштуваннях) |
| Щоночі | aggregate | Сирі bot_requests → daily stats + retention purge (~30 днів) |
| Щоночі | audit | Self-audit (HTTP / content / parity) |
| Щоночі | llms | Нічна регенерація llms (enqueue + queue) |
| Щодня | registry_sync | Diff реєстру з ai-robots-txt → pending_review (не auto-apply) |
Приклад crontab (підставте PHP і адмін-скрипт):
*/5 * * * * /usr/bin/php8.1 /path/to/YOUR_ADMIN.php --dispatch=robots_llm.cron job=queue
*/15 * * * * /usr/bin/php8.1 /path/to/YOUR_ADMIN.php --dispatch=robots_llm.cron job=logparse
30 2 * * * /usr/bin/php8.1 /path/to/YOUR_ADMIN.php --dispatch=robots_llm.cron job=aggregate
45 2 * * * /usr/bin/php8.1 /path/to/YOUR_ADMIN.php --dispatch=robots_llm.cron job=llms
0 3 * * * /usr/bin/php8.1 /path/to/YOUR_ADMIN.php --dispatch=robots_llm.cron job=audit
10 3 * * * /usr/bin/php8.1 /path/to/YOUR_ADMIN.php --dispatch=robots_llm.cron job=registry_syncУ Hosting Ukraine / інших панелях створіть ті самі шість завдань як «команда PHP», не як URL.
За потреби (не в обов’язковому розкладі): job=rebuild - повна перегенерація; job=reconcile - hash-звірка документів.
На екрані (налаштування аддону): інфо-блок «Cron-завдання» з підказкою інтервалів і імен job-ів; поле шляху access.log.
>
На екрані (панель хостингу): список cron-рядків з вашим PHP, вашим адмін-скриптом і
job=queue/logparse/aggregate/audit/llms/registry_sync.
8. Дашборд аналітики
Веб-сайт → RobotsLLM → Дашборд.
Показує (за наявності даних після cron):
- запити ботів по днях (до 30 днів);
- топ ботів (verified / unverified);
- розбивка за purpose;
- топ URL;
- AI-referrals: сесії / замовлення / дохід за джерелами (utm / referrer: ChatGPT, Perplexity, Claude, Gemini, Copilot…).
Джерела даних:
- PHP-логер (UA з реєстру на frontend) - бачить запити, які проходять через PHP, зокрема
/llms.txtі*.mdчерез serve; - Access-log парсер - те, що PHP не бачить (інша статика / пропуски логера); потрібен шлях до логу в налаштуваннях. Якщо лог недоступний, працює лише PHP-логер (чесно показано в UI).
Верифікація: IP у офіційних діапазонах провайдера (кеш) або rDNS для Googlebot/Bingbot; інакше unverified.
GA4: у P0 - поле property id + інструкція звірки (повна API-інтеграція - поза MVP).
На екрані (дашборд): картки «запити за 30 днів», % verified, AI-сесії / замовлення / дохід; SVG-графік запитів; таблиця топ-ботів.
>
На екрані (referrals): таблиця джерел (ChatGPT, Perplexity, Claude, Gemini, Copilot…) із сесіями, замовленнями та сумою.
9. Self-audit і безпека контенту
Веб-сайт → RobotsLLM → Self-audit.
- DOM-санітайзер (не regex): script/style/iframe/form/hidden → чистий текст/markdown.
- PII/secret-сканер: email/телефон (крім офіційних з налаштувань), ключі (AKIA, sk-, …), injection-евристики.
- Critical → не публікувати файл.
- Self-audit: HTTP (200, MIME, charset, ETag, 304, не login-HTML), content (структура, absolute URL), parity (ціна .md vs anonymous на семплі).
На екрані: кнопка «Запустити зараз», фільтр critical/warning/info, таблиця прогонів і список знахідок (код перевірки, об’єкт, повідомлення).
10. Налаштування аддону (коротко)
| Параметр | Навіщо |
|---|---|
| Access log path | Шлях до access.log для job=logparse |
| Revenue order statuses | Статуси замовлень для AI-доходу (дефолт P,C) |
| GA4 property id | Підказка для ручної звірки |
| Token budget | Бюджет llms.txt |
| Official emails / phones | Allowlist для PII-сканера |
| Link allowlist domains | Зовнішні домени, дозволені в sanitizer |
| Cron info | Підказки job-ів |
11. FAQ (факти)
Чи зміниться мій robots.txt одразу після встановлення?
Ні. Аддон нічого не публікує без вашої дії. Політика потрапляє в штатне сховище CS-Cart лише кнопкою Опублікувати, після diff; є rollback. Якщо у корені є фізичний robots.txt - він має пріоритет над БД; приберіть або перейменуйте його, інакше жива вітрина не покаже політику аддону.
Чи потрібен окремий VPS?
Ні. PHP-аддон + MySQL-черга + панельний cron.
Чи зламає SEO?
Не повинно, якщо користуватись diff і rollback. Перед публікацією robots - diff «було → стане»; rollback однією дією; бекап ручного robots при першому запуску. .md / llms.txt йдуть з noindex, щоб не створювати дублі в Google.
Скільки ресурсів?
Орієнтир: ~5-20 МБ диска на ~5000 товарів; генерація при змінах (черга), не на кожен хіт. Публічна видача /llms.txt і *.md іде через PHP-serve (дешеве читання файлу + ETag/304). Повна статика без PHP - не в 0.1.0.
Сумісність
CS-Cart 4.18+, перевірено на 4.18.3. PHP 8.1+.
Як відкотити?
- Політика краулінгу → rollback robots.
- Відновити файл з
var/files/…/robots_llm/previous/…(last-known-good дзеркал). - Або uninstall аддону (спробує повернути бекап першого запуску в штатне сховище).
Чи гарантує llms.txt цитати в ChatGPT?
Ні. Це карта для агентів. Не обіцяємо «+N% видимості» і не стверджуємо, що llms.txt піднімає позиції Google.
Free / Pro
v0.1.0 / v1.0 MVP - один безкоштовний пакет з усім P0. Окрема монетизація - пізніше.
12. Сім модулів (карта для підтримки)
- AI Crawl Policy - пресети, компілятор RFC 9309, diff, rollback, симулятор.
- Bot Registry - seed 31, overrides, sync pending_review з ai-robots-txt.
- AI Discovery - llms.txt + курація + token budget.
- Markdown Mirrors - рендерери, publisher, черга, rewrite на PHP-serve.
- SEO Robots Tweaks - критичні шляхи, sitemap, noindex дзеркал.
- AI Analytics - logger, logparse, verify, referrals, dashboard.
- Security & Self-Audit - DOM-санітайзер, блок секретів, audit runner.
13. Відкриті пункти (чесно)
- Знімки екранів у цьому файлі не вбудовані - дивіться сторінку аддону.
- Окремого UI-блокера «знайдено фізичний robots.txt» у 0.1.0 немає: пріоритет файлу - поведінка CS-Cart; прибрати файл треба вручну.
- Nginx-rewrite зазвичай вставляють у vhost вручну.
- Інфо-блок cron у налаштуваннях аддону може ще згадувати HTTP/
cron_passwordі додаткові job-и; орієнтир для панелі - таблиця в §7.
Документ узгоджено з docs/marketing-foundation.md і фактичною поведінкою коду 0.1.0 (стенд CS-Cart 4.18.3).