diff --git a/packages/docusaurus/src/server/__tests__/brokenLinks.test.ts b/packages/docusaurus/src/server/__tests__/brokenLinks.test.ts index 2f962db07c0a..61b44696937a 100644 --- a/packages/docusaurus/src/server/__tests__/brokenLinks.test.ts +++ b/packages/docusaurus/src/server/__tests__/brokenLinks.test.ts @@ -148,6 +148,32 @@ describe('handleBrokenLinks', () => { }); }); + it('accepts valid non-strict link with anchor', async () => { + await testBrokenLinks({ + routes: [{path: '/page1', strict: false}, {path: '/page2/'}], + collectedLinks: { + '/page1': { + links: [ + '/page1#page1anchor', + '/page1/#page1anchor', + '/page2#page2anchor', + '/page2/#page2anchor', + ], + anchors: ['page1anchor'], + }, + '/page2/': { + links: [ + '/page1#page1anchor', + '/page1/#page1anchor', + '/page2#page2anchor', + '/page2/#page2anchor', + ], + anchors: ['page2anchor'], + }, + }, + }); + }); + it('accepts valid links and anchors, sparse arrays', async () => { await testBrokenLinks({ routes: [{path: '/page1'}, {path: '/page2'}], diff --git a/packages/docusaurus/src/server/brokenLinks.ts b/packages/docusaurus/src/server/brokenLinks.ts index 9e940f7b8c6b..3ee1971f8128 100644 --- a/packages/docusaurus/src/server/brokenLinks.ts +++ b/packages/docusaurus/src/server/brokenLinks.ts @@ -125,7 +125,15 @@ function createBrokenLinksHelper({ return false; } const targetPage = - collectedLinks.get(pathname) || collectedLinks.get(decodeURI(pathname)); + collectedLinks.get(pathname) ?? + collectedLinks.get(decodeURI(pathname)) ?? + // The broken link checker should not care about a trailing slash + // Those are already covered by the broken pathname checker + // See https://github.com/facebook/docusaurus/issues/10116 + collectedLinks.get(addTrailingSlash(pathname)) ?? + collectedLinks.get(addTrailingSlash(decodeURI(pathname))) ?? + collectedLinks.get(removeTrailingSlash(pathname)) ?? + collectedLinks.get(removeTrailingSlash(decodeURI(pathname))); // link with anchor to a page that does not exist (or did not collect any // link/anchor) is considered as a broken anchor if (!targetPage) {