Skip to content

Commit

Permalink
fix(sitemap): complete gracefully when all pages have noIndex meta (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
Josh-Cena authored and slorber committed Jul 14, 2022
1 parent 08283d8 commit ce29062
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 5 deletions.
Expand Up @@ -172,4 +172,39 @@ describe('createSitemap', () => {

expect(sitemap).not.toContain('/noindex');
});

it('does not generate anything for all pages with noindex', async () => {
const sitemap = await createSitemap(
{
url: 'https://example.com',
trailingSlash: false,
} as DocusaurusConfig,
['/', '/noindex'],
{
'/': {
meta: {
// @ts-expect-error: bad lib def
toComponent: () => [
React.createElement('meta', {name: 'robots', content: 'noindex'}),
],
},
},
'/noindex': {
meta: {
// @ts-expect-error: bad lib def
toComponent: () => [
React.createElement('meta', {name: 'robots', content: 'noindex'}),
],
},
},
},
{
changefreq: EnumChangefreq.DAILY,
priority: 0.7,
ignorePatterns: [],
},
);

expect(sitemap).toBeNull();
});
});
14 changes: 9 additions & 5 deletions packages/docusaurus-plugin-sitemap/src/createSitemap.ts
Expand Up @@ -18,7 +18,7 @@ export default async function createSitemap(
routesPaths: string[],
head: {[location: string]: HelmetServerState},
options: PluginOptions,
): Promise<string> {
): Promise<string | null> {
const {url: hostname} = siteConfig;
if (!hostname) {
throw new Error('URL in docusaurus.config.js cannot be empty/undefined.');
Expand All @@ -27,9 +27,7 @@ export default async function createSitemap(

const ignoreMatcher = createMatcher(ignorePatterns);

const sitemapStream = new SitemapStream({hostname});

function routeShouldBeIncluded(route: string) {
const includedRoutes = routesPaths.filter((route) => {
if (route.endsWith('404.html') || ignoreMatcher(route)) {
return false;
}
Expand All @@ -40,9 +38,15 @@ export default async function createSitemap(
return !meta?.some(
(tag) => tag.props.name === 'robots' && tag.props.content === 'noindex',
);
});

if (includedRoutes.length === 0) {
return null;
}

routesPaths.filter(routeShouldBeIncluded).forEach((routePath) =>
const sitemapStream = new SitemapStream({hostname});

includedRoutes.forEach((routePath) =>
sitemapStream.write({
url: applyTrailingSlash(routePath, {
trailingSlash: siteConfig.trailingSlash,
Expand Down
3 changes: 3 additions & 0 deletions packages/docusaurus-plugin-sitemap/src/index.ts
Expand Up @@ -30,6 +30,9 @@ export default function pluginSitemap(
head,
options,
);
if (!generatedSitemap) {
return;
}

// Write sitemap file.
const sitemapPath = path.join(outDir, options.filename);
Expand Down

0 comments on commit ce29062

Please sign in to comment.