Skip to content

Commit 7db9c15

Browse files
committed
return x-default also for sub pages when using as-needed
1 parent 0e7aee6 commit 7db9c15

File tree

3 files changed

+25
-14
lines changed

3 files changed

+25
-14
lines changed

Diff for: packages/next-intl/src/middleware/getAlternateLinksHeaderValue.test.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,8 @@ describe.each([{basePath: undefined}, {basePath: '/base'}])(
184184
}).split(', ')
185185
).toEqual([
186186
`<https://example.com${basePath}/en/about>; rel="alternate"; hreflang="en"`,
187-
`<https://example.com${basePath}/es/about>; rel="alternate"; hreflang="es"`
187+
`<https://example.com${basePath}/es/about>; rel="alternate"; hreflang="es"`,
188+
`<https://example.com${basePath}/about>; rel="alternate"; hreflang="x-default"`
188189
]);
189190
});
190191

Diff for: packages/next-intl/src/middleware/getAlternateLinksHeaderValue.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,7 @@ export default function getAlternateLinksHeaderValue<
143143
// Add x-default entry
144144
const shouldAddXDefault =
145145
// For domain-based routing there is no reasonable x-default
146-
!routing.domains &&
147-
(routing.localePrefix.mode !== 'always' || normalizedUrl.pathname === '/');
146+
!routing.domains || routing.domains.length === 0;
148147
if (shouldAddXDefault) {
149148
const url = new URL(
150149
getLocalizedPathname(normalizedUrl.pathname, routing.defaultLocale),

Diff for: packages/next-intl/src/middleware/middleware.test.tsx

+22-11
Original file line numberDiff line numberDiff line change
@@ -1400,35 +1400,42 @@ describe('prefix-based routing', () => {
14001400
]);
14011401
expect(getLinks(createMockRequest('/en/about', 'en'))).toEqual([
14021402
'<http://localhost:3000/en/about>; rel="alternate"; hreflang="en"',
1403-
'<http://localhost:3000/de/ueber>; rel="alternate"; hreflang="de"'
1403+
'<http://localhost:3000/de/ueber>; rel="alternate"; hreflang="de"',
1404+
'<http://localhost:3000/about>; rel="alternate"; hreflang="x-default"'
14041405
]);
14051406
expect(getLinks(createMockRequest('/de/ueber', 'de'))).toEqual([
14061407
'<http://localhost:3000/en/about>; rel="alternate"; hreflang="en"',
1407-
'<http://localhost:3000/de/ueber>; rel="alternate"; hreflang="de"'
1408+
'<http://localhost:3000/de/ueber>; rel="alternate"; hreflang="de"',
1409+
'<http://localhost:3000/about>; rel="alternate"; hreflang="x-default"'
14081410
]);
14091411
expect(getLinks(createMockRequest('/en/users/1', 'en'))).toEqual([
14101412
'<http://localhost:3000/en/users/1>; rel="alternate"; hreflang="en"',
1411-
'<http://localhost:3000/de/benutzer/1>; rel="alternate"; hreflang="de"'
1413+
'<http://localhost:3000/de/benutzer/1>; rel="alternate"; hreflang="de"',
1414+
'<http://localhost:3000/users/1>; rel="alternate"; hreflang="x-default"'
14121415
]);
14131416
expect(getLinks(createMockRequest('/de/benutzer/1', 'de'))).toEqual([
14141417
'<http://localhost:3000/en/users/1>; rel="alternate"; hreflang="en"',
1415-
'<http://localhost:3000/de/benutzer/1>; rel="alternate"; hreflang="de"'
1418+
'<http://localhost:3000/de/benutzer/1>; rel="alternate"; hreflang="de"',
1419+
'<http://localhost:3000/users/1>; rel="alternate"; hreflang="x-default"'
14161420
]);
14171421
expect(
14181422
getLinks(createMockRequest('/en/products/apparel/t-shirts', 'en'))
14191423
).toEqual([
14201424
'<http://localhost:3000/en/products/apparel/t-shirts>; rel="alternate"; hreflang="en"',
1421-
'<http://localhost:3000/de/produkte/apparel/t-shirts>; rel="alternate"; hreflang="de"'
1425+
'<http://localhost:3000/de/produkte/apparel/t-shirts>; rel="alternate"; hreflang="de"',
1426+
'<http://localhost:3000/products/apparel/t-shirts>; rel="alternate"; hreflang="x-default"'
14221427
]);
14231428
expect(
14241429
getLinks(createMockRequest('/de/produkte/apparel/t-shirts', 'de'))
14251430
).toEqual([
14261431
'<http://localhost:3000/en/products/apparel/t-shirts>; rel="alternate"; hreflang="en"',
1427-
'<http://localhost:3000/de/produkte/apparel/t-shirts>; rel="alternate"; hreflang="de"'
1432+
'<http://localhost:3000/de/produkte/apparel/t-shirts>; rel="alternate"; hreflang="de"',
1433+
'<http://localhost:3000/products/apparel/t-shirts>; rel="alternate"; hreflang="x-default"'
14281434
]);
14291435
expect(getLinks(createMockRequest('/en/unknown', 'en'))).toEqual([
14301436
'<http://localhost:3000/en/unknown>; rel="alternate"; hreflang="en"',
1431-
'<http://localhost:3000/de/unknown>; rel="alternate"; hreflang="de"'
1437+
'<http://localhost:3000/de/unknown>; rel="alternate"; hreflang="de"',
1438+
'<http://localhost:3000/unknown>; rel="alternate"; hreflang="x-default"'
14321439
]);
14331440
});
14341441

@@ -1747,15 +1754,17 @@ describe('prefix-based routing', () => {
17471754
'<http://localhost:3000/en/about>; rel="alternate"; hreflang="en"',
17481755
'<http://localhost:3000/uk/about>; rel="alternate"; hreflang="en-gb"',
17491756
'<http://localhost:3000/de/at/about>; rel="alternate"; hreflang="de-at"',
1750-
'<http://localhost:3000/br/about>; rel="alternate"; hreflang="pt"'
1757+
'<http://localhost:3000/br/about>; rel="alternate"; hreflang="pt"',
1758+
'<http://localhost:3000/about>; rel="alternate"; hreflang="x-default"'
17511759
]);
17521760
});
17531761

17541762
expect(getLinks(createMockRequest('/en/unknown'))).toEqual([
17551763
'<http://localhost:3000/en/unknown>; rel="alternate"; hreflang="en"',
17561764
'<http://localhost:3000/uk/unknown>; rel="alternate"; hreflang="en-gb"',
17571765
'<http://localhost:3000/de/at/unknown>; rel="alternate"; hreflang="de-at"',
1758-
'<http://localhost:3000/br/unknown>; rel="alternate"; hreflang="pt"'
1766+
'<http://localhost:3000/br/unknown>; rel="alternate"; hreflang="pt"',
1767+
'<http://localhost:3000/unknown>; rel="alternate"; hreflang="x-default"'
17591768
]);
17601769
});
17611770
});
@@ -1880,15 +1889,17 @@ describe('prefix-based routing', () => {
18801889
'<http://localhost:3000/en/about>; rel="alternate"; hreflang="en"',
18811890
'<http://localhost:3000/uk/about>; rel="alternate"; hreflang="en-gb"',
18821891
'<http://localhost:3000/de/at/ueber>; rel="alternate"; hreflang="de-at"',
1883-
'<http://localhost:3000/br/sobre>; rel="alternate"; hreflang="pt"'
1892+
'<http://localhost:3000/br/sobre>; rel="alternate"; hreflang="pt"',
1893+
'<http://localhost:3000/about>; rel="alternate"; hreflang="x-default"'
18841894
]);
18851895
});
18861896

18871897
expect(getLinks(createMockRequest('/en/unknown'))).toEqual([
18881898
'<http://localhost:3000/en/unknown>; rel="alternate"; hreflang="en"',
18891899
'<http://localhost:3000/uk/unknown>; rel="alternate"; hreflang="en-gb"',
18901900
'<http://localhost:3000/de/at/unknown>; rel="alternate"; hreflang="de-at"',
1891-
'<http://localhost:3000/br/unknown>; rel="alternate"; hreflang="pt"'
1901+
'<http://localhost:3000/br/unknown>; rel="alternate"; hreflang="pt"',
1902+
'<http://localhost:3000/unknown>; rel="alternate"; hreflang="x-default"'
18921903
]);
18931904
});
18941905
});

0 commit comments

Comments
 (0)