
Чтобы вайб-сайт попал в Google и Яндекс, нужно семь вещей. Уникальные title и description на каждой странице. Файл sitemap.xml, рядом robots.txt. Минимальная JSON-LD-разметка Organization. Подтверждение прав в Google Search Console и Я.Вебмастере. Подключённый IndexNow для мгновенной индексации в Яндексе и Bing. И проверка, что в продакшен случайно не уехал noindex. Это вечер работы, не профессия. Дальше по порядку, что почём и где грабли.
В октябре 2023 у одного контентного сайта про телефоны трафик из Яндекса схлопнулся с десяти тысяч заходов в сутки до пятисот. За одну ночь: минус девяносто пять процентов. Через полтора года, в феврале 2025, повторное падение: с четырёх тысяч до четырёхсот. Владелец попал под алгоритмический фильтр Яндекса и потерял годы работы.
Это случай выжившего. У выживших трафик сначала был. Они хотя бы добрались до выдачи. Гораздо чаще история другая. Вы собрали сайт в Cursor, выложили на Vercel, отправили ссылку маме. Через неделю заходите в Google и набираете название проекта. Не находит. Заходите через месяц. Всё ещё не находит. Через два месяца та же тишина.
Это период тишины Search Console. Сервис показывает зелёную галочку, что страница просканирована. И тут же ниже честно пишет: «но пока не проиндексирована». Между этими двумя экранами могут пройти недели. И только если у сайта в <head> нет невидимого noindex, который тихо едет в прод с дефолтного шаблона. И в robots.txt не сидит Disallow: /, унаследованный от черновика.
Большинство вайб-проектов проваливаются именно в этом промежутке. Не потому, что Google к ним враждебен. Потому, что краулер-паук пришёл на пустой сайт: ни карты, ни указателей, ни признаков, что хозяин дома. Развернулся и ушёл. Семь вещей ниже это меняют.

Краулер не пользуется сайтом так, как человек. Он не нажимает кнопки. Не дожидается анимаций. Аккордеоны для него тоже невидимы. Он скачивает HTML и читает текст. JavaScript исполняется в отдельной очереди и часто откладывается. Если ваш сайт это пустой <div id="root">, в который React дорисовывает интерфейс уже в браузере, краулер видит пустую страницу.
У Vite и старых Create React App это поведение по умолчанию. У Next.js, Astro, готового экспорта из Lovable HTML заполнен сразу на сервере. Если вы не уверены, что у вас под капотом, есть короткая проверка. Открыть свой сайт. Нажать Ctrl+U (Windows / Linux) или Cmd+Opt+U (Mac). Откроется исходник. Найти в нём текст с главного экрана. Если текст там есть, краулер его прочтёт. Если в исходнике пусто и одни <script>, это сигнал заняться пререндером раньше всего остального.
<title> это то, что человек видит в выдаче синим жирным шрифтом. Строчка, по которой кликают. Должна быть конкретной, до шестидесяти символов, без эмодзи и без длинных тире.
Сравните два. «Главная» ставит Lovable по умолчанию на каждой странице. Это уже провал: для Google пять страниц с одним title выглядят как пять копий одной и той же. «Telegram-бот считает смету ремонта по фото за 15 секунд · MoreSpace» на главной и «Цены и тарифы · MoreSpace» на странице цен это уже сайт с пятью разными окнами в выдачу. Вместо одной размытой кляксы.
<meta name="description"> короткое описание под title. До ста шестидесяти символов. Ровно та фраза, после которой кликают.
В Next.js это Metadata API: в корневом layout.tsx задаётся шаблон, и каждая страница присваивает свой title. Шаблон сам подставляет название бренда в конец. Сниппет ниже.
У Lovable, Bolt.new и v0 такое часто не настроено из коробки. Самый простой ход: открыть проект и одним промптом попросить ассистента: «добавь уникальный title и description на каждую страницу, использовав шаблон». Через минуту готово. Дальше глазами пройтись по выдаче в DevTools и убедиться, что title на разных страницах действительно разный.
// app/layout.tsx
import type { Metadata } from 'next';
export const metadata: Metadata = {
metadataBase: new URL('https://example.com'),
title: {
default: 'MoreSpace',
template: '%s · MoreSpace',
},
description:
'Telegram-бот считает смету ремонта по фото за 15 секунд. ' +
'Бесплатно, без регистрации.',
openGraph: {
title: 'MoreSpace',
images: ['/og.png'],
locale: 'ru_RU',
type: 'website',
},
};
// app/pricing/page.tsx
export const metadata: Metadata = {
title: 'Цены и тарифы', // развернётся в «Цены и тарифы · MoreSpace»
description: 'Тариф под одну квартиру, тариф под объекты и пакет агентствам.',
};sitemap.xml это XML-файл со списком всех страниц сайта. Лежит по адресу https://ваш-домен/sitemap.xml. Краулер заходит туда первым делом и забирает список URL для обхода. Без карты он находит страницы только по ссылкам с других сайтов, что у нового проекта означает «не находит вообще».
В Next.js sitemap делается одним файлом. Кладёте app/sitemap.ts, экспортируете функцию, возвращающую массив страниц. На сборке Vercel сам отдаёт /sitemap.xml. Astro делает через интеграцию @astrojs/sitemap. У Lovable, Vite и других готовых SPA проще положить вручную в public/sitemap.xml (онлайн-генератор за минуту, потом коммит).
robots.txt это текстовый файл, который говорит краулерам, что можно индексировать, а что нет. Тоже лежит в корне сайта. Для маленького проекта он типовой: разрешить всё, заблокировать /api/ и /admin/, и в конце строкой указать путь до sitemap. Готовый файл ниже. Поменяйте только домен.
Отдельная грабля Next.js. У app/robots.ts есть прекрасное свойство тихо отдавать пустой файл, если в нём опечатка. Проверка одна. Открыть в браузере https://ваш-домен/robots.txt и убедиться, что там осмысленный текст, а не белый экран.
// app/sitemap.ts
import type { MetadataRoute } from 'next';
export default function sitemap(): MetadataRoute.Sitemap {
return [
{
url: 'https://example.com',
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 1,
},
{
url: 'https://example.com/pricing',
lastModified: new Date(),
priority: 0.8,
},
{
url: 'https://example.com/blog/seo',
lastModified: new Date('2026-05-31'),
priority: 0.6,
},
];
}# https://example.com/robots.txt User-agent: * Allow: / Disallow: /api/ Disallow: /admin/ Sitemap: https://example.com/sitemap.xml
Это два бесплатных сервиса, которые показывают, что про ваш сайт думают Google и Яндекс. Без них вы летите в темноте. С ними у вас раз в неделю отчёт: сколько раз показали, по каким запросам, кто кликнул, какие страницы не доехали.
Google. Откройте search.google.com/search-console. Кнопка «Добавить ресурс». Выбирайте Domain property (не URL prefix): это вариант, который покрывает сразу и https://, и http://, и поддомены. Подтверждение через DNS TXT-запись: Google даст вам строку вида google-site-verification=..., её вы вставляете в DNS-панели регистратора (REG.RU, hoster.by, Cloudflare, Namecheap) как запись типа TXT. Сохраняете. Нажимаете «Проверить». Через две минуты готово. Дальше в разделе «Файлы Sitemap» добавляете URL до /sitemap.xml.
Яндекс. В webmaster.yandex.ru всё похоже, методов больше: HTML-файл в корне, мета-тег, DNS TXT, плагин CMS, подтверждение через WHOIS-email. Самый быстрый для свежего сайта на Vercel это мета-тег. Скопировал, вставил в <head> через тот же Metadata API, задеплоил, нажал «Проверить». Через минуту галочка. После подтверждения сразу зайдите в «Информация о сайте» и поставьте регион. Для проекта по Беларуси это «Беларусь», для российского рынка соответствующий город или страна. Без регионности Яндекс не понимает, под какой рынок вас показывать.
Для удобства в обоих сервисах добавьте sitemap.xml. После этого первая индексация ускоряется на дни.

Этот приём обычно пропускают.
IndexNow это открытый протокол, который позволяет вам сразу сказать поисковику: «я опубликовал новую страницу, придите забрать». Без ожидания обхода. Поддерживают Bing, Яндекс, Naver, Seznam, Yep. Google не поддерживает (тестирует с октября 2021, решения четыре года не принимает). Это определяет область применения. Для русскоязычной аудитории, где Яндекс это половина трафика, IndexNow закрывает «свежесть» индексации в Яндексе и Bing мгновенно. Google всё равно увидит, но через свою sitemap-карусель.
Цифра, которая объясняет всё про серьёзность протокола. По публичному отчёту одного из поисковиков-участников, к концу 2025 двадцать два процента кликнутых URL в его выдаче пришли через IndexNow. В начале того же года было восемнадцать.
Подключение это пять минут. Генерируете ключ (тридцать два случайных символа). Кладёте файл https://ваш-домен/<ключ>.txt с этим ключом внутри. На каждое создание или обновление публичной страницы шлёте POST на https://api.indexnow.org/indexnow с JSON: домен, ключ, путь до файла-ключа, список URL. Один эндпоинт разошлёт уведомление сразу во все поддерживающие поисковики. Готовая функция ниже.
Если ваш сайт это статика, обновляющаяся редко, можно дёргать руками после каждой публикации. Если это CMS или генератор постов, имеет смысл интегрировать в хук «опубликовано».
// lib/seo/indexnow.ts
// Сгенерируйте ключ один раз: openssl rand -hex 16
// Положите в public/<ключ>.txt с содержимым = сам ключ (без HTML).
const KEY = 'a8b3c2d1e0f9a8b7c6d5e4f3a2b1c0d9';
const HOST = 'example.com';
export async function pingIndexNow(urls: readonly string[]): Promise<void> {
if (urls.length === 0) return;
const res = await fetch('https://api.indexnow.org/indexnow', {
method: 'POST',
headers: { 'content-type': 'application/json; charset=utf-8' },
body: JSON.stringify({
host: HOST,
key: KEY,
keyLocation: `https://${HOST}/${KEY}.txt`,
urlList: urls,
}),
});
// 200/202 — принято; 403 — ключ не найден; 429 — превышен rate-limit.
if (![200, 202].includes(res.status)) {
console.warn('[indexnow]', res.status, await res.text());
}
}
// Использование: после публикации поста
await pingIndexNow(['https://example.com/blog/novyj-post']);Это компактный кусок JSON в <head>, который явно говорит поисковику: имя компании, логотип, соцсети, контакты. Гугл и Яндекс используют эти данные, чтобы собирать «карточку организации» в боковой панели выдачи. Для нового сайта это +1 к доверию и +1 шанс попасть в нейроответ Алисы (Яндекс с октября 2025 встроил нейроответы в выдачу и тянет источники в том числе по разметке).
Готовый кусок ниже. Поменяйте имя, логотип, ссылки на ваши соцсети.
Маленькая оговорка. FAQPage-разметку, которую раньше любили в SEO-туториалах, ставить уже не имеет смысла (Google отключил отображение FAQ в выдаче в мае 2026, поддержка в Rich Results Test тоже сворачивается). Если в туториале 2024 года вам её советуют, пропускайте этот пункт.
// app/layout.tsx (вкладывается в <head> через <Script type="application/ld+json">)
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "MoreSpace",
"url": "https://example.com",
"logo": "https://example.com/logo.png",
"description": "Telegram-бот для расчёта стоимости ремонта по фото.",
"contactPoint": {
"@type": "ContactPoint",
"email": "hi@example.com",
"contactType": "customer support",
"areaServed": ["RU", "BY"],
"availableLanguage": ["Russian"]
},
"sameAs": [
"https://t.me/yourchannel",
"https://github.com/yourorg"
]
}Это та грабля, на которой теряют недели даже опытные. Я сам однажды держал стейджинг-конфиг metadata.robots = { index: false } две недели в проде после релиза. Сайт не индексировался, я успел три раза переписать sitemap и проверить Search Console на знакомство со своими ошибками, прежде чем догадался открыть исходник страницы и увидеть невидимое. Глупо, но факт.
Сценарий типовой. В стейджинг-окружении в layout.tsx стоит флаг noindex, чтобы черновик не индексировался. Деплоится прод. Флаг забыли снять. Краулер приходит, видит <meta name="robots" content="noindex"> и разворачивается на пороге.
Сценарий хуже. У сайта на Vercel есть middleware.ts, который добавляет X-Robots-Tag: noindex в HTTP-заголовке ответа. В исходнике страницы такого тега нет. В DevTools на вкладке Network этот заголовок есть, но кто туда смотрит. Месяц в индекс не попадает ничего, и непонятно почему.
Две проверки, которые избавляют от половины головной боли:
Ctrl+U / Cmd+Opt+U. В <head> поиском найдите noindex. Не должно найти ничего.X-Robots-Tag. Заголовка либо нет, либо в нём all или index.Если что-то нашлось, идёте в код и удаляете. На Vercel ещё проверьте, что preview-деплои у вас закрыты X-Robots-Tag: noindex (это правильно), а production-деплои открыты (это критично).
Этот список экономит вам два вечера на чтение устаревших туториалов.
FAQPage Schema больше не работает. Отключена в мае 2026, ставить незачем.
Кнопка «Запросить индексирование» не ускоряет повторно. Лимит общий, по одному URL повторное нажатие это плацебо.
Indexing API от Google мимо вашей задачи. Он официально работает только для вакансий (JobPosting) и трансляций (BroadcastEvent). Если поставить на блог, можно словить ручную санкцию.
Не делайте отдельную desktop-версию. Google с июля 2024 индексирует только мобильную (mobile-first завершён). Десктоп-онли сайт вылетает из индекса.
International Targeting в Search Console искать не надо. Раздел убрали в 2022. Региональность для .com теперь только через hreflang плюс ccTLD плюс локальный контент.
hreflang для одного русского и одной страны не нужен. Это инструмент для двух и более версий одной страницы.

Тут плохая новость. С июня 2025 трафик через Cloudflare в РФ дросселируется до примерно шестнадцати килобайт на соединение по решению РКН. Vercel формально не блокирован, но его кастомные домены сидят на shared IP, которые периодически попадают в реестр заблокированных. Симптом: *.vercel.app открывается, кастомный домен открывается только через VPN.
Что это значит для SEO. YandexBot ходит из РФ. Если он часто получает таймауты или вообще не достучался, ваш сайт пессимизируется за «медленность». Для проекта на русскоязычную аудиторию это уже сломалось у соседа, а не «когда-нибудь сломается».
Простое правило. Если аудитория из РФ или РБ это серьёзная часть пользователей, берите хостинг в РФ (Selectel, Timeweb, REG.RU) или в РБ (hoster.by). Глобальные CDN-провайдеры, например Cloudflare или Vercel, оставляйте для глобальной или европейской аудитории. И отдельно про данные: с июля 2025 cookies граждан РФ должны лежать на серверах в РФ. Это закон, а не рекомендация.
Google AI Overviews и Алиса AI выкидывают ответы прямо в первый экран. Часть кликов больше не доходит до сайтов. По публичным замерам это снизило поисковый трафик в среднем на тридцать пять процентов. У крупных медиа цифры жёстче: одно американское технологическое издание ушло с 8,5 миллиона переходов в марте 2024 до 264 тысяч в январе 2026. Минус девяносто семь процентов.
Это не «SEO умерло». Это про то, что органика как единственный канал стала рискованной. Что делать прямо сейчас:
Article на каждом посте: AI-движки используют разметку, чтобы понять структуру.Google сам подтверждает: никакой отдельной «AI-оптимизации» не существует, отдельных файлов вроде llms.txt создавать не нужно. Работают те же базовые SEO-сигналы. Честно говоря, как именно AI-выдача будет ранжировать через год, я не уверен. Это слишком молодая механика, чтобы давать прогнозы. Но базовые шаги выше точно не вредят: они закрывают индексацию, без неё ни один AI-движок вас не увидит.
Google и Яндекс рядом, по строкам.
Поддержка IndexNow
Нет: тестируют с 2021, решения не приняли
Да, основной канал быстрой индексации
Лимит «Запросить индексирование»
~10–12 URL в сутки на ресурс
~160 URL/сутки базово, растёт с ИКС
Региональный таргетинг
Только hreflang плюс ccTLD плюс контент
Ручное указание региона в Вебмастере
AI в выдаче
AI Overviews (50–60% запросов в США)
Алиса AI и нейроответы с октября 2025
Mobile-first индексация
Завершена июль 2024, десктоп-онли вылетает
Параллельный индекс, mobile в приоритете
FAQPage rich results
Отключены в мае 2026
Поддерживаются
Если сегодня вечером пройдёте по семи шагам, через две недели произойдёт следующее:
Через два месяца, при регулярных публикациях, в Search Console и Я.Вебмастере накопится карта спроса: какие запросы реально вас приводят. По ней дальше пишутся следующие страницы под уже подтверждённый интерес. Не наугад. Это та точка, с которой SEO перестаёт быть гаданием.

Чтобы по-честному. Семь шагов выше это фундамент. Они закрывают индексацию и попадание в выдачу. Они не закрывают ранжирование в топ-3 по конкурентному запросу. Это совсем другая задача, в неё входят ссылочный профиль, поведенческие сигналы, авторитетность домена, регулярный поток качественного контента.
Если ваш проект это локальный сервис в одном городе с тремя конкурентами в выдаче, фундамент даст вам шанс попасть в первую тройку за пару месяцев. Если ваш проект это очередной landing про «AI-автоматизацию бизнеса», конкурирующий за запрос вида «нейросеть для бизнеса», семь шагов вас выведут в индекс, но в топ выводят уже не SEO. Туда тащат уникальное содержание, ссылки и, главное, время. Это нормально. Просто не ожидайте от фундамента того, чего он не обещает.
Арендованная среда, где подтверждение прав, sitemap, robots, IndexNow, JSON-LD и проверка noindex уже сделаны. Заходите и работаете. Разовый онбординг $50, подписка 149 BYN в месяц.
Открыть услугуДва часа предметной работы: что не индексируется, почему, как починить за один заход. Уходите с чек-листом на будущее.
Запросить сессиюДля тех, у кого Telegram-бот, а не сайт, у меня отдельный материал с готовым шаблоном и деплой-скриптом: «Готовый Telegram-бот на VPS за вечер». Там SEO неактуально, зато стабильность процесса и бэкапы расписаны подробно.
Семь шагов. Один вечер. После них Google и Яндекс начинают вас видеть, считать и пускать в выдачу. Не в топ. Это другая работа. Но переход из «нас как будто не существует» в «нас находят по конкретным запросам» происходит ровно тут.
Не откладывайте до «когда будет нормальный сайт». Базовый SEO ставится до красивого дизайна и до идеального контента. Сначала фундамент. Потом всё остальное на него ложится. Если делать в обратном порядке, ваш красивый сайт ещё полгода будет существовать только для вас и мамы.
21 мая Google перекроил SERP. Что с этим делать
21 мая Google запустил May 2026 Core Update. До этого вышли пять апдейтов AI Overviews. Что с выдачей и что делать блогу.
Спецификация вместо промптов: как перестать регенерировать код с нуля
Spec-driven development: спецификация до кода. Почему вайб-кодинг без спеки уходит в бесконечные циклы «перегенери заново» и как это исправить.
Реверсивный скил: оцифровать опыт за вечер
Skill Creator выдаёт средний SKILL.md за пять минут. Я делаю иначе и расскажу как. Видео в начале, разбор в тексте.