# Эмбеддинги в SEO: шесть способов, которыми косинус врёт на живом корпусе

> Эмбеддинги находят пересказ и кандидатов на перелинковку, которых не видит поиск по словам, — и ровно шестью способами тихо вводят в заблуждение. Полевые заметки: бойлерплейт с косинусом 1.0, пороги, перекос длины, протухшие векторы, невидимая трата.

_Source: https://seomatrix.ai/ru/blog/embeddings-for-seo/ · Updated: 2026-08-18_

---

Сразу выжимка, если лонгрид не заходит: косинусная близость врёт на живом корпусе шестью способами — бойлерплейт с косинусом 1.0, магический порог, перекос длины, отсутствие направления, протухший кэш и невидимая трата, — и за каждым стоит мой прогон, который сначала отгрузил что-то неправильное.

Полез я как-то смотреть, почему линкер по корпусу из 52 страниц предлагает ссылку на дисклеймер. Открыл рейтинг кандидатов, а на вершине один и тот же юридический абзац, пересекающийся сам с собой. Подумал: ну ладно, косинус честно посчитал, что одинаковые тексты одинаковы, — и вот с этого «честно посчитал» и начинается список, потому что дальше нашлось ещё пять способов, которыми та же арифметика уводит не туда.

## Где кончается поиск по словам

У поиска по словам есть жёсткий потолок, и он ближе, чем кажется: две страницы могут описывать одну тему при почти нулевом пересечении лексики.

Возьми пару: «самая дешёвая eSIM для Японии» и «предоплаченные тарифы для туристов в Токио». Они не совпадают ни в чём, и любой детектор дублей на пересечении слов назовёт их несвязанными.

Эмбеддинги снимают этот потолок: модель превращает текст в вектор, расположенный по смыслу, и близость становится обычной арифметикой.

Эта часть описана везде. Не описана следующая: шесть способов, которыми косинус вводит в заблуждение, как только направишь его на настоящий корпус, а не на демо.

## Что эмбеддинги действительно дают

Три корпусных вопроса, на которые нельзя ответить строками, а векторами можно.

**Пересказ без общих слов.** Рерайт, дрейф перевода, два автора по одному заданию — все три случая невидимы для поиска по словам.

**Скрытая каннибализация.** Тело страницы A закрывает тему страницы B, хотя сама A заявляет о себе другое. Как тут работает направление, а не похожесть, я разбирал в тексте про [каннибализацию, которую не видит Ahrefs](/ru/blog/semantic-cannibalization/).

**Кандидаты на перелинковку и сироты.** Какой абзац страницы A действительно ближе всего к теме страницы B, и какие страницы стоят вдали от всего, осиротев по смыслу даже при живых входящих ссылках.

Все три держатся на одном примитиве — косинусной близости, и именно поэтому её способы отказа важнее самой идеи.

## Ошибка первая: бойлерплейт похож сам на себя

Самый дорогой урок из всех, и начался он с того самого дисклеймера. Сквозной абзац — дисклеймер, заметка о курсе валюты, призыв к действию — стоит на всех страницах байт в байт.

Одинаковый текст даёт одинаковый вектор — ВСЕГДА. Значит, каждая статья максимально похожа на любую другую через блок, в котором темы нет вообще, и линкер добросовестно ставит ссылку на дисклеймер.

Я наблюдал это на корпусе из 52 страниц: кандидаты на ссылки отсортированы по похожести, и вершину рейтинга занимал один и тот же юридический абзац, пересекающийся сам с собой раз за разом. Самое смешное, что формально косинус был прав!

> **Убирать повторы до эмбеддинга, а не после** — Фильтрация постфактум тут не работает: пары бойлерплейта — это самые похожие пары, какие у тебя есть, поэтому любой порог их сохраняет. Абзацы, дословно повторяющиеся на двух и более страницах, надо выкидывать до вызова модели. Выигрыш двойной: рейтинг оживает, и ты перестаёшь платить за эмбеддинг одного абзаца много раз подряд.

## Ошибка вторая: универсального порога не существует

Любой инструмент, называющий магическое число косинуса без указания модели и единицы текста, попросту гадает, потому что число едет от обоих параметров.

На моих корпусах пересказ на уровне абзаца лежит примерно от 0,92, поэтому порог для дублей стоит на 0,90 — сознательно консервативно, — а кандидаты на перелинковку берутся уже от 0,65.

Почему такая разница при одной и той же математике? Потому что у двух вопросов противоположная цена ошибки: ложный вердикт «дубль» склеивает или закрывает редиректом страницу, которая должна была жить, а слабое предложение ссылки стоит человеку трёх секунд на отказ.

Выбирай порог по цене ошибки и калибруй его на своём корпусе, а не по числу из чужой статьи (включая, разумеется, эту).

## Ошибка третья: длина перекашивает результат

Тело на 1800 слов и ключевая фраза из пяти слов никогда не дадут высокий косинус, как бы идеально страница ни была про этот ключ.

Механика тут довольно простая: длинный текст усредняется к центру пространства, а короткий живёт на краю. Сравнивать надо однородное с однородным — тело с телом, фразу с фразой — либо смотреть на разрывы между двумя похожестями, а не на абсолютное значение любой из них.

Это, пожалуй, самый частый способ получить бессмыслицу от самодельного семантического аудита: сравнили тело страницы со строкой запроса, увидели 0,58 и объявили страницу нерелевантной. А кто проверил, что 0,58 для такой пары вообще низко?

## Ошибка четвёртая: косинус не знает направления

Фраза «A похожа на B» симметрична, а настоящие отношения между страницами — нет.

Исчерпывающий гайд, покрывающий подтему, и тонкая страница, дублирующая тему этого гайда, — совершенно разные ситуации: одной нужна ссылка, другой склейка, и один балл похожести их не различает никак.

Нужен второй замер — что страница заявляет о себе против того, что её тело реально покрывает, — и работает как раз разница между этими двумя величинами.

## Ошибка пятая: вектор из кэша описывает старую страницу

Кэшировать эмбеддинги обязательно, тут спора нет: повторный прогон по неизменившемуся корпусу должен стоить ноль.

Но ключом кэша обязан быть текст, а не адрес и не слаг, потому что с ключом по адресу каждый аудит после правки рассуждает о предыдущей версии страницы — молча и навсегда!

Симптом тут мерзкий именно тем, что его нет: ни ошибки, ни предупреждения, просто аудит, который бесконечно соглашается сам с собой. Сколько раз я на это смотрел и не видел? Точно не знаю, и это, наверное, худшая часть ответа.

## Ошибка шестая: трата невидима

Эмбеддинг обычного сайта стоит центы, и проблема, как ты понимаешь, совсем не в сумме.

Проблема в том, что вызов прячется внутри аудита, который ощущается бесплатным, и не появляется в расходах, пока специально не пойдёшь искать. Я отгрузил три аудита, которые эмбеддили платные векторы без единой строчки учёта, и отчёт о расходах спокойно печатал итог, в который они не входили!

Учитывать надо в общей точке, где вызов реально происходит, и никогда в каждом вызывающем месте, потому что следующий аудит, который кто-то добавит, обязательно забудет, — а значит, проверка должна делать «забыть» невозможным.

> **Выбор модели значит меньше, чем конвейер** — Контекстные модели выигрывают у плоских по-чанковых эмбеддингов на большинстве доменов, и смена модели — правка в одну строку. А переход от «я векторизую бойлерплейт и кэширую по адресу» к «я так не делаю» стоит несравнимо больше любого апгрейда модели.

## Нужно ли это твоему сайту

Тут стоит остановиться и спросить прямо: а надо ли оно вообще?

Если у тебя двадцать страниц, то ответ будет «нет»: всё видно глазами, любой скрипт тут лишний, и ты и так помнишь, о чём каждая из них.

Если страниц двести, то ответ меняется на «да», потому что глазами такой объём уже не охватить, а дубли и сироты растут сами, и тут вектор даёт то, чего не даст ни один список слов.

А если страниц целых две тысячи? Тогда без этого уже никак, но и цена ошибки заметно выше: плохой порог склеит сотню живых страниц за один заход, и вернуть их будет долго.

Отсюда простое правило: чем больше корпус, тем мягче должен быть порог для того, что нельзя откатить, — ровно обратно тому, что подсказывает первое чувство.

## Рабочая схема

Если добавляешь эмбеддинги в работу с контентом, вот порядок, который переживает встречу с настоящим корпусом.

Сначала убери повторы: дословные абзацы с двух и более страниц до модели не доезжают. Дальше кэшируй по хешу текста — тогда неизменившийся текст стоит ноль и вектор всегда верный.

Держи два порога вместо одного, консервативный для необратимых вердиктов и мягкий для подсказок, которые смотрит человек, и сравнивай однородное с однородным, а при разной длине смотри на разрывы.

Учитывай трату в точке вызова, в одном месте, чтобы её нельзя было забыть. И последнее, самое важное: проверяй ноль подсадной уткой!

Почему без этого нельзя? Потому что «дублей не найдено» и «проверка молча не измерила ничего» выглядят в отчёте абсолютно одинаково, так что подложи известный дубль и убедись, что аудит его ловит, — иначе чистый результат не доказывает ничего.

Последний пункт — привычка, которая обобщается далеко за пределы эмбеддингов: тишина не равна чистоте, и аудит, который не может сказать, сколько он сейчас проверил, не закончен.

Мои семантические аудиты — поиск дублей, теневые сущности, разброс ссылочного веса — работают ровно на этом конвейере, и каждое из шести правил выше существует потому, что его нарушение сначала отгрузило что-то неправильное.

А если нужна форма всей системы, а не отдельного примитива, посмотри разбор про [тематический авторитет и силосы](/ru/blog/topical-authority-silos/) — там видно, куда эти баллы ложатся в архитектуре сайта.

Если сжать всё это в одну мысль (выскажу субъективное, но выстраданное): вектор — это не ответ, а только вход в него. Он даёт число, но смысл этому числу придаёшь ты сам, и там же, на этом шаге, чаще всего и ломается вся затея.

Косинус, кстати, до сих пор считает мой дисклеймер самым интересным текстом на сайте. Не спорю — у него свои вкусы.

## FAQ

### Что такое эмбеддинг на языке SEO?

Модель читает текст и возвращает список чисел — вектор, расположенный так, что тексты об одном и том же оказываются рядом. Когда каждая страница стала вектором, вопрос «эти две страницы про одно и то же?» превращается из вопроса о совпадении слов в арифметический (косинусная близость). В этом весь фокус: находятся страницы, у которых общая тема при почти нулевом пересечении лексики.

### Какой порог косинуса означает «дубль»?

Универсального числа нет, и любой инструмент, называющий его без указания модели и единицы текста, гадает. На моих корпусах пересказ на уровне абзаца лежит примерно от 0,92, поэтому порог near-duplicate стоит на 0,90 — сознательно консервативно: ложный вердикт «склеить» стоит страницы. Кандидаты на перелинковку берутся от 0,65, потому что там пропуск дороже, чем слабое предложение, которое человек отклонит за три секунды.

### Почему мой линкер начал ставить ссылки на дисклеймеры?

Потому что сквозной абзац — YMYL-дисклеймер, заметка о курсе, CTA — это один и тот же текст на всех страницах, значит один и тот же вектор, и он пересекается сам с собой на косинусе около 1,0. Каждая статья становится максимально похожа на каждую другую — через блок, в котором нет темы вообще. Лечится удалением абзацев, дословно повторяющихся на двух и более статьях, ДО вызова эмбеддера; заодно перестаёшь платить за эмбеддинг одного и того же абзаца N раз.

### Заменяют ли эмбеддинги сбор семантики?

Нет, они отвечают на другой вопрос. Ключевые слова говорят, что люди набирают и сколько за этим спроса; эмбеддинги — как твои собственные страницы соотносятся между собой по смыслу. Эмбеддинги для корпусных вопросов (дубли, каннибализация, граф ссылок, разброс тем), данные спроса — для решения, что писать дальше.

### Сколько стоит проэмбеддить корпус?

Для обычного сайта — центы, но риск не в сумме, а в невидимости траты. Вызов эмбеддера сидит внутри аудита, который ощущается бесплатным, и не попадает в отчёт о расходах, пока кто-нибудь специально не пойдёт искать. Метерить нужно в общей точке вызова, а не в каждом вызывающем, и кэшировать векторы по тексту — тогда повторный прогон по неизменившемуся корпусу стоит ноль.

