SEO
SEO — это то, как сайт видят поисковики: заголовки и описания страниц в выдаче, правила индексации, карта сайта, данные об организации и соцсетях. SEO страницы задают ее свойства, SEO всего сайта — эндпоинт /seo, а проверяют сайт эндпоинты /seo/audit и /seo/pages.
Canonical, Open Graph, hreflang, разметку Schema и карту сайта платформа строит сама, поэтому AI-агенту не нужна консоль: он пишет заголовок и описание вместе с текстом страницы, а проверка отдаёт список того, что осталось исправить.
Во всех примерах API — https://onpress.pro/api/v2, SITE — id сайта (SITE_ID), OP_TOKEN — токен op_XXXX. Полный перечень эндпоинтов — в справочнике API.
Поля страницы
SEO страницы задают ее свойства: seo_title — заголовок в выдаче, seo_description — описание, keyword — ключевой запрос. Без seo_title заголовок собирается по шаблону сайта, а пустое поле не стирает прежнее значение. Чтобы поменять поля, прочитайте документ страницы через GET /data/pages.content, поправьте свойства и запишите документ целиком через PUT /data/pages.content. Например, страница контактов:
curl -s "$API/site/$SITE/data/pages.content?page=/kontakty/" -H "Authorization: Bearer $OP_TOKEN"
curl -s -X PUT "$API/site/$SITE/data/pages.content" \
-H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
-d '{"page": "/kontakty/", "markdown": "---\nname: \"Контакты\"\nseo_title: \"Контакты OnPress\"\nseo_description: \"Почта и адрес команды OnPress.\"\n---\n\n# Контакты\n\nПишите нам на почту."}'
Прочитать настройки
GET /seo отдаёт SEO-настройки сайта: разделитель и шаблоны заголовков и описаний, правила noindex, хлебные крошки, организацию, соцсети, карту сайта и IndexNow. Например:
curl -s "$API/site/$SITE/seo" -H "Authorization: Bearer $OP_TOKEN"
Изменить настройки
PATCH /seo меняет только переданные разделы, а поле changed в ответе перечисляет, что изменилось. Состав карты сайта задаёт noindex: тип страниц попадает в карту, только когда он открыт для индексации. Например, шаблон заголовка страниц и название организации:
curl -s -X PATCH "$API/site/$SITE/seo" \
-H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
-d '{"titles": {"page": "%%title%% %%sep%% %%sitename%%"}, "organization": {"type": "company", "name": "OnPress"}}'
Проверить сайт
POST /seo/audit проверяет сайт по чек-листу раздела SEO консоли: открыт ли сайт, карта сайта, robots.txt, счётчики, разметка, скорость, языки — и отдаёт каждый пункт со статусом. GET /seo/audit отдаёт итог последней проверки без новой. Например:
curl -s -X POST "$API/site/$SITE/seo/audit" -H "Authorization: Bearer $OP_TOKEN"
Найти ошибки на страницах
GET /seo/pages открывает опубликованные страницы по их адресам, как поисковик, и возвращает страницы без <title> или описания, с ошибками в заголовках — нет H1, несколько H1, пропущен уровень — и страницы, которые не открылись. За один запрос API проверяет до 2000 страниц, поэтому ответ приходит не сразу. Например, русские страницы:
curl -s "$API/site/$SITE/seo/pages?lang=ru" -H "Authorization: Bearer $OP_TOKEN"
Изменить название и иконку
В консоли. Откройте раздел «SEO» в консоли (/dashboard/) и поменяйте название сайта или загрузите иконку.
Через API. PATCH /data/site.settings меняет только переданные поля: name — название, site_icon — id картинки из медиатеки сайта. Например, новое название:
curl -s -X PATCH "$API/site/$SITE/data/site.settings" \
-H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
-d '{"name": "Мой сайт"}'
Вопросы и ответы
Почему новое название не видно на сайте?
Посетители видят страницы из кэша. После записи через API кэш сбрасывается сам, поэтому откройте страницу в окне без входа: через минуту там будет новое название.
Почему на странице два H1?
Фрейм выводит название страницы в <h1>, а в тексте страницы тоже стоит # Заголовок. Уберите один из двух.
Почему страницы нет в карте сайта?
Карта сайта собирается из опубликованных страниц тех типов, что открыты для индексации. Проверьте статус страницы и noindex в GET /seo.
Как поменять заголовки всех страниц сразу?
Поменяйте шаблон в titles через PATCH /seo, например page для обычных страниц. Шаблон действует на страницы без своего seo_title.
Где коды ошибок?
В справочнике API. Ответ с ошибкой сам называет причину.