import { buildLocalizedPath, getDefaultLocale, getLocaleCodes } from '../i18n/index.js'; /** * Next.js Metadata `alternates.languages`. * * Bridges SEO and i18n: for each configured locale that the document has a * slug in, it produces the locale-aware path (via buildLocalizedPath), * optionally prefixed with an absolute origin. * * Also emits `x-default` pointing at the default locale — the version Google * serves when the user's language/region matches no hreflang, and the fallback * when the root ('/') redirect is ambiguous (Googlebot with no/foreign * Accept-Language). * * @example * buildHreflangAlternates({ * slugs: { pl: 'o-nas', en: 'about' }, * config, * baseUrl: 'https://example.com', * }) * // → { * // pl: 'https://example.com/pl/o-nas', * // en: 'https://example.com/en/about', * // 'x-default': 'https://example.com/pl/o-nas', * // } */ export function buildHreflangAlternates({ baseUrl, config, homeSlug = 'home', prefix, slugs }) { const origin = baseUrl?.replace(/\/$/, '') ?? ''; const alternates = {}; for (const locale of getLocaleCodes(config)){ const path = buildLocalizedPath({ config, homeSlug, locale, prefix, slugs }); if (path) { alternates[locale] = `${origin}${path}`; } } // x-default: the version Google serves when the user's language/region doesn't // match any hreflang — and, crucially here, the fallback when the root ('/') // redirect is ambiguous (Googlebot with no/foreign Accept-Language). Point it // at the default locale (the primary market) so search shows that version by // default instead of guessing. Only set when the default locale has a URL. const defaultLocalePath = alternates[getDefaultLocale(config)]; if (defaultLocalePath) { alternates['x-default'] = defaultLocalePath; } return alternates; } //# sourceMappingURL=hreflang.js.map