diff --git a/core/core/src/configuration.ts b/core/core/src/configuration.ts index 268eebbb9..f25115a6f 100644 --- a/core/core/src/configuration.ts +++ b/core/core/src/configuration.ts @@ -121,6 +121,18 @@ export type PagesOnlyRoutes = Record< } >; +export interface SitemapConfigPage { + priority: number; +} +export interface SitemapConfig { + outputFolder: string; + pages?: { + home: SitemapConfigPage; + index: SitemapConfigPage; + doc: SitemapConfigPage; + }; +} + /** * global configuration used at build time * stored in a file named main.js/main.ts @@ -163,7 +175,7 @@ export interface BuildConfiguration { /** * if false, disable automatic sitemap generation */ - siteMap?: boolean; + siteMap?: SitemapConfig; /** * instrumentation configuration @@ -364,7 +376,20 @@ export const convertConfig = (config: RunConfiguration): RunConfiguration => { export const defaultBuildConfig: BuildConfiguration = { siteRoot: '/', - siteMap: true, + siteMap: { + outputFolder: 'public/', + pages: { + home: { + priority: 1, + }, + index: { + priority: 0.8, + }, + doc: { + priority: 0.5, + }, + }, + }, categories: ['author', 'tags'], ignore: [ 'readme.md', diff --git a/core/store/src/serialization/sitemap.ts b/core/store/src/serialization/sitemap.ts index c51fbf4bd..6ce4b8013 100644 --- a/core/store/src/serialization/sitemap.ts +++ b/core/store/src/serialization/sitemap.ts @@ -8,18 +8,19 @@ import { } from '../create-pages'; export const getSiteMap = (store: Store): string => { + const config = store.config.siteMap; const pages: { path?: string; priority: number }[] = []; //home page const { path } = getIndexPage(store) || {}; - pages.push({ path, priority: 1 }); + pages.push({ path, priority: config?.pages?.home.priority || 1 }); const homePages = getHomePages(store); homePages.forEach(({ path }: DocHomePagesPath) => { - pages.push({ path, priority: 0.8 }); + pages.push({ path, priority: config?.pages?.index.priority || 1 }); }); const docPages = getDocPages(store); docPages.forEach(({ path }: DocPagesPath) => { - pages.push({ path, priority: 0.5 }); + pages.push({ path, priority: config?.pages?.doc.priority || 1 }); }); const sitemap = ` diff --git a/integrations/gatsby-theme-stories/src/gatsby-node.ts b/integrations/gatsby-theme-stories/src/gatsby-node.ts index 39f8b3516..713c3bb44 100644 --- a/integrations/gatsby-theme-stories/src/gatsby-node.ts +++ b/integrations/gatsby-theme-stories/src/gatsby-node.ts @@ -104,9 +104,9 @@ export const createPagesStatefully = async ( ); if (process.env.NODE_ENV === 'production' && store.config.siteMap) { const sitemap = getSiteMap(store); - const sitemapname = sysPath.join( + const sitemapname = sysPath.resolve( process.cwd(), - 'public', + store.config.siteMap.outputFolder, 'sitemap.xml', ); fs.writeFileSync(sitemapname, sitemap, 'utf8'); diff --git a/integrations/nextjs-plugin/src/build.ts b/integrations/nextjs-plugin/src/build.ts index 469f45bde..9d6fef979 100644 --- a/integrations/nextjs-plugin/src/build.ts +++ b/integrations/nextjs-plugin/src/build.ts @@ -47,8 +47,9 @@ module.exports = ({ const store: Store = loadStore(loadingStore, true); if (process.env.NODE_ENV === 'production' && store.config.siteMap) { const sitemap = getSiteMap(store); - const sitemapname = path.join( - path.resolve(config.staticFolder as string, '..'), + const sitemapname = path.resolve( + store.config.siteMap.outputFolder, + './', 'sitemap.xml', ); fs.writeFileSync(sitemapname, sitemap, 'utf8');