У заказчика — действующий публичный видеохостинг. В какой-то момент Google практически перестал индексировать его видео: Search Console показывал ошибку «Видео находится не на странице просмотра» на 124 страницах, ролики выпадали из поиска, органический трафик не рос.
До меня заказчику уже предлагали типовые рецепты «из интернета» (noindex на embed-страницы, canonical-теги) — по сути, лечение симптомов наугад. Задача: найти настоящую причину, починить её на живом продакшне и подтвердить результат инструментами Google, ничего не сломав по дороге.
Разобрал, как Google на самом деле понимает видео-страницы: он читает структурированную разметку schema.org/VideoObject (JSON-LD) на странице просмотра. Оказалось, что настоящая причина — не embed-страницы и не canonical: многострочные описания видео подставлялись в JSON-LD как есть и разрывали блок разметки. Google молча выбрасывал разметку целиком и считал, что видео на странице нет.
Что сделал:
1. Починил формирование JSON-LD: корректное экранирование описаний, дата публикации в машинном формате, длительность в ISO-8601, прямая ссылка на видеофайл mp4 (поисковый робот не умеет забирать HLS-поток).
2. Добавил разметку вертикальным роликам — 34 коротких видео вообще не имели VideoObject и физически не могли попасть в видеопоиск.
3. Обновил sitemap с датами изменения страниц.
4. Написал автоматическую проверку: скрипт прошёл по всем 154 страницам просмотра и проверил валидность разметки на каждой — а не «на паре страниц вручную».
5. Отдельно привёл в порядок внутренний поиск сайта (это «SEO для своих»): починил ранжирование по релевантности, обновил протухшие поисковые индексы после смены имён профилей, убрал фильтр стоп-слов, который молча ломал короткие запросы.
6. Сделал embed-плеер с диалогом генерации кода вставки (размеры, соотношение сторон, старт с таймкода) — видео с хостинга можно корректно встраивать на другие сайты, что тоже работает на видимость.
Стек: Python/Django, JSON-LD (schema.org VideoObject), Google Search Console, sitemap.
Ошибка воспроизводилась на 124 страницах — после фикса разметка валидна на всех 154 страницах просмотра, включая вертикальные ролики. Заказчик подтвердил исправление по Google Search Console, страницы ушли на переиндексацию.
Отдельная ценность для заказчика: диагноз поставлен по фактам (как именно робот читает страницу), а не по чужим догадкам — это сэкономило переделку сайта по неверным рецептам.
Сайт живой, можно посмотреть: https://sawonce.com