diff --git a/packages/next/src/build/webpack/loaders/metadata/resolve-route-data.test.ts b/packages/next/src/build/webpack/loaders/metadata/resolve-route-data.test.ts index dd163ecd3c846..bc25d6f673daf 100644 --- a/packages/next/src/build/webpack/loaders/metadata/resolve-route-data.test.ts +++ b/packages/next/src/build/webpack/loaders/metadata/resolve-route-data.test.ts @@ -110,6 +110,10 @@ describe('resolveRouteData', () => { es: 'https://example.com/es', de: 'https://example.com/de', }, + media: { + '(max-width: 600px)': 'https://example.com/mobile', + '(min-width: 601px)': 'https://example.com/desktop', + }, }, }, ]) @@ -120,6 +124,8 @@ describe('resolveRouteData', () => { https://example.com + + 2021-01-01 diff --git a/packages/next/src/build/webpack/loaders/metadata/resolve-route-data.ts b/packages/next/src/build/webpack/loaders/metadata/resolve-route-data.ts index ca8a28720f82c..b0ee2be1070bb 100644 --- a/packages/next/src/build/webpack/loaders/metadata/resolve-route-data.ts +++ b/packages/next/src/build/webpack/loaders/metadata/resolve-route-data.ts @@ -73,11 +73,22 @@ export function resolveSitemap(data: MetadataRoute.Sitemap): string { // Since sitemap is separated from the page rendering, there's not metadataBase accessible yet. // we give the default setting that won't effect the languages resolving. for (const language in languages) { + const url = languages[language as keyof typeof languages] + if (!url) continue content += `\n` } } + + const medias = item.alternates?.media + if (medias && Object.keys(medias).length) { + for (const media in medias) { + const url = medias[media as keyof typeof medias] + if (!url) continue + content += `\n` + } + } if (item.images?.length) { for (const image of item.images) { content += `\n${image}\n\n` diff --git a/packages/next/src/lib/metadata/types/metadata-interface.ts b/packages/next/src/lib/metadata/types/metadata-interface.ts index 0342119681848..992319cbb061b 100644 --- a/packages/next/src/lib/metadata/types/metadata-interface.ts +++ b/packages/next/src/lib/metadata/types/metadata-interface.ts @@ -712,6 +712,9 @@ type SitemapFile = Array<{ alternates?: | { languages?: Languages | undefined + media?: { + [media: string]: string | undefined + } } | undefined images?: string[] | undefined