← Все статьи
Next.jsметаданныеcanonical

Metadata API в Next.js: canonical, hreflang и Open Graph без дублей

App Router даёт единую точку для title, description, alternates и OG. Разбираем, как не плодить дубли между /ru и /en и не ломать индексацию.

7 мин

В App Router метаданные задаются через export const metadata или generateMetadata. Ошибка на этом уровне — дубли в выдаче, когда Google видит одну страницу по трём URL: с локалью, без неё и с query-параметрами.

Canonical: один канонический URL

  • alternates.canonical указывает на финальный путь без utm и пагинации
  • Единое правило со slash или без — на всём домене
  • Для блога canonical всегда на статью, не на /blog

hreflang для RU и EN

alternates.languages связывает локализованные версии. Добавьте x-default на язык по умолчанию. Без hreflang поисковик может показать английскую версию российскому пользователю или наоборот.

Практика в xm8

  • Общая функция buildPageMetadata(locale, path, title, description)
  • Шаблон title: «Заголовок | XM8» только на коммерческих страницах
  • openGraph.locale и alternateLocale для соцсетей и мессенджеров

Частые вопросы

generateMetadata или статический metadata?
Статический — для фиксированных страниц. generateMetadata — для блога и услуг, где title и description зависят от slug и локали.

Читайте также

Обсудить проект