PAS7 Studio
До всіх статей

Next.js sitemap hreflang для App Router і static export: @pas7/nextjs-sitemap-hreflang

Практичний гід із Next.js sitemap hreflang для App Router і static export: генеруйте hreflang-альтернативи та x-default, додавайте або виправляйте sitemap.xml, перевіряйте hreflang у CI та підтримуйте змішані контентні пайплайни.

Кому підійдеFrontend-інженериТехнічні SEO-інженериNext.js-команди, які запускають багатомовні сайтиTech leads, які стандартизують валідацію sitemap у CI
Редакційна обкладинка з workflow Next.js sitemap, hreflang-альтернативами, x-default, App Router MetadataRoute.Sitemap і XML-валідацією в CI

Найпростіше сприймати цей пакет як інструмент для workflow sitemap, а не просто як допоміжну функцію. Він охоплює генерацію, XML-патчинг, валідацію та змішану маршрутизацію в одному місці. [1][2][3]

Будує hreflang-альтернативи для App Router MetadataRoute.Sitemap. [1][4]
Додає або виправляє hreflang безпосередньо в згенерованому sitemap.xml. [1]
Перевіряє sitemap hreflang у CI замість ручної перевірки XML. [1][3]
Підтримує змішані контентні пайплайни з .ts, .json, .md/.mdx або даних CMS. [1]
Працює з гібридними патернами маршрутизації, такими як prefix, suffix і locale-segment, в межах одного сайту. [1][2]
Повертає machine-readable JSON-звіти та явні exit codes для CI. [1][3]

Найскладніше зазвичай не створити один багатомовний sitemap. Найскладніше — підтримувати коректність alternate language URLs у міру росту сайту. Статичні сторінки можуть мати один locale-патерн, контентні хаби — інший, а detail pages — третій. На практиці один багатомовний сайт часто поєднує маршрутизацію головної сторінки, локалізованих хабів і detail pages з locale segment. [1][2]

Next.js App Router дає зручний спосіб генерувати sitemap entries через MetadataRoute.Sitemap, але він не вирішує за вас усі hreflang routing rules. Офіційна документація описує file convention для sitemap і shape результату, а такий пакет закриває прогалину навколо alternate-language linking і route-aware validation. [1][4]

Рекомендації Google щодо hreflang теж піднімають планку. Alternate URLs мають бути повністю кваліфікованими, сторінки повинні посилатися самі на себе та на свої альтернативи, а x-default може бути корисним для language-neutral fallback pages. На маленькому сайті це ще контрольовано, але коли URL надходять з кількох пайплайнів, помилитися дуже легко. [5][6]

Справжня проблема

Sitemap hreflang стає крихким, коли routing rules живуть у кількох місцях, а багатомовні альтернативи перестають відповідати реальній структурі сайту. [1][2][5]

Найшвидший старт — це генерація для App Router з routing helper і withHreflangFromRouting.

01

Опишіть модель маршрутизації

Пакет містить хелпери на кшталт routingPrefixAsNeeded і routingPAS7, щоб описати, як locales з’являються в URL. [1][2]

02

Побудуйте звичайний список MetadataRoute.Sitemap

Ви починаєте зі стандартних sitemap entries, наприклад /blog або /about, а далі пакет сам виводить hreflang-альтернативи з routing model. [1][4]

03

Оберніть entries генерацією hreflang

У README quick start використовується withHreflangFromRouting(entries, routing, { baseUrl, ensureXDefault: true }), що зберігає генерацію sitemap близькою до звичайного App Router коду. [1]

Чому це виглядає чисто

Пакет залишається близьким до нативної генерації sitemap в App Router, а не змушує від самого початку переходити на окремий XML-only workflow. [1][4]

Саме routing helpers роблять цей пакет чимось більшим, ніж просто маленька обгортка над hreflang.

Comparison pointПатернТипове використання
Prefix as neededГоловні сторінки та прості локалізовані маршрути на кшталт /, /uk, /deКорисно, коли default locale має залишатися без префікса, а інші locales потребують префікс
Suffix localeКонтентні хаби та статичні сторінки, наприклад /blog/uk або /contact/ukКорисно, коли hub pages використовують suffix locale pattern замість prefixed path
Locale segmentDetail pages на кшталт /blog/en/slug або /blog/uk/slugКорисно, коли content entries потребують стабільної locale-aware маршрутизації detail pages
Mixed prefix pagesОпційні винятки, наприклад /uk/about, поряд з іншими стилями маршрутівКорисно, коли один сайт поєднує кілька legacy або section-based routing rules

Де тут головна цінність

Якщо ваш сайт поєднує кілька route patterns, пакет дає одне місце для опису цієї логіки замість жорсткого прописування alternates сторінка за сторінкою. [1][2]

Багато команд не генерують sitemap entries безпосередньо з одного TypeScript-масиву. У них уже є маніфести, frontmatter exports або CMS-normalized data.

Підтримка зображень тут — гарна деталь, тому що вона відповідає тому, як сучасні статичні сайти реально зберігають контент. У поста може бути одна основна обкладинка та кілька вкладених скриншотів. Документація показує, як витягнути все це в sitemap entry, а не залишати лише top-level URL. [1]

Мінімальний приклад із README виглядає так:

TS
import { createSitemapEntriesFromManifest } from "@pas7/nextjs-sitemap-hreflang";

const entries = createSitemapEntriesFromManifest(blogManifest, {
  baseUrl: "https://pas7.com.ua",
  sectionPath: "/blog",
  defaultLocale: "en",
  routeStyle: "locale-segment",
});

Хелпер для маніфестів

createSitemapEntriesFromManifest створений для пайплайнів, які вже віддають slug, locales і date fields. Це дозволяє узгодити генерацію sitemap з наявними контентними маніфестами замість дублювання route logic. [1]

Підтримка змішаних джерел

Пакет явно підтримує .ts, .json, .md/.mdx і CMS-driven content pipelines, тому його простіше використовувати з різними джерелами контенту в одному Next.js-проєкті. [1]

Зображення в sitemap entries

Хелпер також може додавати зображення через imagesFor, що корисно, коли sitemap entries повинні містити image URLs із вкладених полів контенту, як-от hero covers і section screenshots. [1]

Чому це важливо

Пакет краще вбудовується в реальні контентні системи, тому що може стартувати з маніфестів і data sources, які команди вже використовують. [1]

CLI невеликий, але поділ між check і inject справді корисний.

Використовуйте check

Найкраще підходить для валідації в CI: missing alternates, XML issues, origin-policy checks і machine-readable reports через --json. [1][3]

Використовуйте inject

Найкраще підходить, коли сайт уже генерує sitemap file і вам потрібно додати або виправити hreflang безпосередньо в generated XML на етапі postbuild. [1]

Використовуйте --prefer, коли важливе розташування source file

CLI може автоматично знайти public/sitemap.xml, out/sitemap.xml або sitemap.xml, але явне зазначення пріоритету безпечніше, коли пайплайн має кілька можливих output files. [1]

Не пропускайте report output у CI

Формат JSON-звіту стабільний і містить issue codes, entry URLs, messages, suggestions, summary counts, input path і timing. Це значно зручніше для діагностики, ніж парсити console logs. [1][3]

Практичне правило

Використовуйте check, коли потрібно чисто падати в CI. Використовуйте inject, коли потрібно пропатчити вже згенерований файл sitemap.xml. [1][3]

Exit codes і JSON-формат роблять пакет зручнішим для автоматизації, ніж інструменти, які лише виводять попередження для людей.

Це одна з менш помітних, але сильних сторін пакета. CLI не просто повідомляє, що валідація не пройшла; він розрізняє відсутній input, XML failures і validation errors. Через це поведінку пайплайна набагато легше розуміти й прогнозувати. [1]

Формат звіту так само практичний: ok, issues[], summary.byCode, inputPath і timingMs. Саме такий контракт CI jobs або dashboards можуть споживати без зайвих припущень. [1][3]

0

OK. Валідація пройшла успішно. [1]

2

Помилки валідації, зокрема збої --fail-on-missing. [1]

4

Вхідний файл не знайдено. [1]

5

Некоректний XML на вході. [1]

Що це додає

Пакет створений не лише для генерації, а й для передбачуваної автоматизації навколо перевірок sitemap hreflang. [1][3]

Пакет доволі прямолінійний, але workflow багатомовного sitemap усе одно часто ламається у знайомих місцях.

Припускати, що один route pattern підходить для всіх частин сайту. Змішана маршрутизація — звична реальність, і пакет спроєктований саме під це. [1][2]

Сприймати x-default як необов’язковий шум у всіх випадках. У деяких багатомовних конфігураціях він корисний як language-neutral fallback, і пакет може забезпечити його через ensureXDefault. [1][6]

Тримати sitemap alternates окремо від content pipeline. Це зазвичай веде до застарілих locale clusters або відсутніх entries. [1]

Запускати next build без наступного етапу валідації. І static export, і generated XML виграють від явних перевірок у CI. [1][3]

Ігнорувати правила Google для hreflang щодо fully qualified alternate URLs і reciprocal language variants. XML може виглядати нормально, але структурно все одно бути неповним. [5][6]

Здорове очікування

Sitemap hreflang стає значно надійнішим, коли routing, alternates і CI validation підпорядковуються одним і тим самим правилам. [1][2][3][5]

Ці офіційні джерела підтверджують поведінку пакета, контекст Next.js sitemap і рекомендації щодо hreflang, використані в цій статті.

Перевірено: 15 бер. 2026 р.Актуально для: Проєкти Next.js App RouterАктуально для: Пайплайни Next.js static exportАктуально для: Багатомовні та міжнародні SEO-конфігураціїАктуально для: Контентні пайплайни на основі маніфестів

Найскладніше зазвичай не один раз додати hreflang. Найскладніше — тримати alternates, route patterns, XML output і CI checks узгодженими в міру росту сайту.

PAS7 Studio може допомогти перетворити це на повторюваний багатомовний SEO-пайплайн з чистішими routing rules, безпечнішою валідацією sitemap і меншою кількістю hreflang-сюрпризів після деплою.

Пов'язані статті

growth

AI SEO / GEO у 2026: ваші наступні клієнти — не люди, а агенти

Пошук зміщується від кліків до відповідей. Боти та AI-агенти сканують, цитують, рекомендують і дедалі частіше купують. Дізнайтесь, що таке AI SEO / GEO, чому класичного SEO вже недостатньо, і як PAS7 Studio допомагає брендам перемагати у «агентному» вебі.

blogs

Найпотужніший чіп від Apple? M5 Pro і M5 Max б'ють рекорди

Аналітичний розбір Apple M5 Pro і M5 Max станом на березень 2026 року. Пояснюємо, чому ці чіпи можна вважати найпотужнішими професійними ноутбучними SoC від Apple, як вони виглядають на тлі M4 Pro, M4 Max, M1 Pro, M1 Max і що показують у порівнянні з актуальними Intel та AMD.

telegram-media-saver

Автоматичне тегування та пошук збережених посилань

Інтеграція з GDrive/S3/Notion для автоматичного тегування та швидкого пошуку через пошукові API

services

Розробка Telegram-ботів та автоматизація

Професійна розробка Telegram-ботів та автоматизація бізнес-процесів: чат-боти, AI-асистенти, інтеграції з CRM та автоматизація процесів.

Професійна розробка для вашого бізнесу

Створюємо сучасні веб-рішення та боти для бізнесу. Дізнайтеся, як ми можемо допомогти вам досягти цілей.