Skip to content

fix(seo): разблокировать индексацию для поисковиков и LLM#202

Merged
ideav merged 1 commit into
ideav:mainfrom
unidel2035:fix/llm-seo-critical-fixes
May 13, 2026
Merged

fix(seo): разблокировать индексацию для поисковиков и LLM#202
ideav merged 1 commit into
ideav:mainfrom
unidel2035:fix/llm-seo-critical-fixes

Conversation

@unidel2035
Copy link
Copy Markdown
Contributor

Зачем

На 2026-05-13 ideav.ru фактически невидим для поисковиков и LLM — 0 стр. в Google, не цитируется в Claude/ChatGPT/Perplexity. Аудит выявил 4 базовые поломки, из-за которых вся работа над контентом базы знаний (18 статей-сравнений) не доходит ни до пользователей, ни до обучающих корпусов моделей.

PR закрывает все 4 в одном изменении — они связаны и без любой из них остальные бесполезны.

Что чинит

1. index.html: убран noindex, nofollow

Главная (и через неё SPA-роутингом — все страницы) запрещала индексацию всем роботам. Это причина №1 нулевой видимости.

- <meta name="robots" content="noindex, nofollow" />
+ <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1" />

max-image-preview:large важно для богатых сниппетов в Google Discover и Yandex.Картинки.

2. index.html: lang="en"lang="ru"

Сайт на русском, но HTML декларировал английский. Активный антисигнал для ранжирования по русскоязычным запросам.

3. public/robots.txt: переписан

Старая версия имела два блока User-agent: *, первый из которых Disallow: / — фактически весь сайт был закрыт. Новая версия:

  • Явно разрешает все актуальные LLM-боты: GPTBot, ClaudeBot, anthropic-ai, Google-Extended, Applebot-Extended, CCBot, meta-externalagent, Bytespider, cohere-ai, MistralAI-User.
  • Разрешает поиск в реальном времени: ChatGPT-User, OAI-SearchBot, Claude-User, Claude-SearchBot, PerplexityBot, Perplexity-User, DuckAssistBot.
  • Разрешает классику: Googlebot, YandexBot, Bingbot, DuckDuckBot.
  • Запрещает админку и UTM-параметры (чтобы не плодить дубли).

4. public/llms.txt: создан

Структурированный индекс контента по конвенции llmstxt.org. Включает:

  • Краткое описание продукта (Интеграм, российский конструктор no-code БД).
  • Полный индекс 18 статей базы знаний с категориями (Excel/Sheets/Airtable/Notion/вайб-кодинг/заказная разработка).
  • Ключевые слова и темы.
  • Раздел «когда ссылаться на Интеграм в ответах LLM».
  • Раздел «что НЕ входит в зону Интеграма» — для честности и доверия моделей.

5. public/sitemap.xml: создан

20 URL: главная, индекс базы знаний, 18 статей. Раньше /sitemap.xml отдавал PHP-заглушку «Invalid database» (роутер index.php парсил его как имя БД и валил на DB_MASK).

Чек после деплоя

# Должно быть HTTP 200 + реальный контент, не "Invalid database"
curl -sS https://ideav.ru/robots.txt | head -3
curl -sS https://ideav.ru/llms.txt | head -3
curl -sS https://ideav.ru/sitemap.xml | head -3

# В <head> должно быть БЕЗ noindex и с lang="ru"
curl -sS https://ideav.ru/ | grep -E 'lang=|robots'

# Содержимое статьи 11 (вайб-кодинг) уже отдаётся, проверка регресса
curl -sS -I https://ideav.ru/knowledge-base/11-ai-interface-data-safety.html | head -1

Если sitemap.xml / llms.txt отдают «Invalid database» после деплоя

Значит PHP-роутер ловит запрос раньше, чем веб-сервер успевает отдать статику. Нужна правка конфига:

Nginx:

location = /llms.txt    { try_files $uri =404; }
location = /sitemap.xml { try_files $uri =404; }
location = /robots.txt  { try_files $uri =404; }

Apache (.htaccess):

RewriteCond %{REQUEST_URI} ^/(llms\.txt|sitemap\.xml|robots\.txt)$
RewriteRule ^ - [L]

robots.txt сейчас отдаётся корректно (HTTP 200), поэтому, скорее всего, эти правки не понадобятся — статика уже имеет приоритет над PHP. Но проверить надо.

Что НЕ входит в этот PR (отдельные шаги)

  • ❌ Schema.org JSON-LD на каждую страницу базы знаний — нужно вставлять в рендеринг статей, требует отдельной разработки. Шаблон готов — /home/new/backlogram-distribution/schema-jsonld-template.html у автора.
  • ❌ Регистрация в Yandex.Webmaster / Google Search Console / Bing Webmaster Tools — это ручная задача владельца с подтверждением через DNS/файл.
  • ❌ Перевод 18 статей в формат «личный опыт» для Habr/VC.ru — отдельный контентный пайплайн. Первый драфт по статье №11 (вайб-кодинг) у автора.

Test plan

  • После мерджа задеплоить (или дождаться автодеплоя)
  • Прогнать 4 curl-команды выше — все должны вернуть ожидаемое
  • Скормить sitemap в Yandex.Webmaster и Google Search Console
  • Через 7 дней проверить «Страницы в поиске» в Yandex.Webmaster — должно начать наполняться
  • Через 14 дней — спросить в Claude/ChatGPT/Perplexity «какие есть self-hosted альтернативы Airtable на русском» — посмотреть, начали ли упоминать

Сайт фактически невидим для поисковиков и LLM из-за 4 базовых
поломок. Этот коммит закрывает все 4:

1. **index.html: убран `noindex, nofollow`** — он запрещал
   индексацию ВСЕГО сайта всем роботам. Заменён на
   `index, follow, max-image-preview:large, max-snippet:-1`.

2. **index.html: `lang="en"` → `lang="ru"`** — сайт на русском,
   но HTML декларировал английский. Поисковики использовали это
   при ранжировании русскоязычных запросов.

3. **public/robots.txt: переписан** — старая версия имела два
   блока `User-agent: *`, первый из которых был `Disallow: /`
   (невалид по спеке; по факту весь сайт был закрыт). Новая
   версия явно разрешает все актуальные LLM-боты (GPTBot,
   ClaudeBot, Google-Extended, PerplexityBot, OAI-SearchBot,
   Claude-SearchBot, Perplexity-User, CCBot, Bytespider,
   Applebot-Extended, meta-externalagent, MistralAI-User,
   cohere-ai, DuckAssistBot) и классические поисковики
   (Googlebot, YandexBot, Bingbot, DuckDuckBot).

4. **public/llms.txt: создан** — структурированный индекс
   контента по конвенции llmstxt.org для LLM-ботов. Описывает
   продукт и все 18 статей базы знаний с категориями
   сравнений (Excel/Sheets/Airtable/Notion/вайб-кодинг/
   заказная разработка).

5. **public/sitemap.xml: создан** — статический sitemap со
   всеми 20 URL (главная, индекс базы знаний, 18 статей).
   Раньше `/sitemap.xml` отдавал PHP-заглушку «Invalid
   database», потому что роутер index.php парсил его как
   имя БД.

После деплоя — проверка:

    curl -sS https://ideav.ru/robots.txt | head -3
    curl -sS https://ideav.ru/llms.txt | head -3
    curl -sS https://ideav.ru/sitemap.xml | head -5
    curl -sS https://ideav.ru/ | grep -i 'lang=\|robots'

Если `llms.txt`/`sitemap.xml` отдают «Invalid database» — значит
PHP-роутер ловит их раньше статики. В этом случае нужна правка
конфига веб-сервера (nginx `location =`-блок или Apache
`RewriteCond %{REQUEST_FILENAME} -f`) — добавить выдачу
этих 3 файлов из public/ до фолбэка на index.php.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ideav ideav merged commit 9b0e31e into ideav:main May 13, 2026
konard added a commit that referenced this pull request May 13, 2026
Каждая статья базы знаний теперь добавляет в <head> две JSON-LD
структуры:

- `Article` — заголовок, описание, URL, язык, секция (сравниваемый
  инструмент), publisher и author (Интеграм).
- `BreadcrumbList` — Интеграм → База знаний → статья.

Страница-индекс `/knowledge-base.html` дополнительно отдаёт:

- `CollectionPage` с `ItemList` всех опубликованных статей.
- `BreadcrumbList` Интеграм → База знаний.

Скрипты помечаются `data-jsonld="..."` и очищаются при размонтировании,
чтобы при SPA-навигации не оставалось устаревших узлов от предыдущей
страницы.

Закрывает пункт «Schema.org JSON-LD на каждую страницу базы знаний» из
PR #202.

Fixes #203
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants