【发布时间】:2021-10-29 14:44:51
【问题描述】:
我无法为我的 Gatsy 网站创建站点地图。
插件的默认设置即使有多页也只创建一页:
<sitemap>
<loc>https://www.thesite.nl/sitemap/sitemap-0.xml</loc>
</sitemap>
如果我尝试使用以下命令覆盖默认设置:
query: `{
site {
siteMetadata {
siteUrl
}
}
allSitePage {
nodes {
path
}
}
}`,
serialize: ({ site, allSitePage }) =>
allSitePage.nodes
.filter(node => {
const path = node.path
console.log({ path })
// Filter out 404 pages
if (path.includes("404")) {
return false
}
// Filter out base pages that don't have a language directory
return supportedLanguages.includes(path.split("/")[1])
})
.map(node => {
return {
url: `${site.siteMetadata.siteUrl}${node.path}`,
changefreq: `weekly`,
priority: 0.7,
}
}),
我得到TypeError: Cannot read property 'nodes' of undefined 问题是,使用 gatsby develop 我可以像这样查询节点并获取路径,即使它在这里显示未定义。
我有 Gatsby v3,我认为可能会影响的唯一插件可能是 "gatsby-plugin-intl": "^0.3.3",。
{
resolve: `gatsby-plugin-intl`,
options: {
// language JSON resource path
path: `${__dirname}/src/intl`,
// supported language
languages: [`nl`, `en`],
language: `nl`,
// language file path
defaultLanguage: `nl`,
// option to redirect to `/nl` when connecting `/`
redirect: false,
},
},
有什么想法吗?
在@FerranBuireu 建议更改查询后,通过自定义选项使用gatsby build && gatsby serve 构建它,现在看起来像这样,但站点地图仍然是空的:
const siteUrl = process.env.URL || `https://www.thesite.nl`
{
resolve: "gatsby-plugin-sitemap",
options: {
query: `
{
allSitePage {
nodes {
path
}
}
}
`,
resolveSiteUrl: () => siteUrl,
resolvePages: ({ allSitePage: { nodes: allPages } }) => {
return allPages.map(page => {
return { ...page }
})
},
serialize: ({ path }) => {
return {
url: path,
}
},
},
},
【问题讨论】:
-
该查询在
localhost:8000/___graphql操场上有效吗? -
@FerranBuireu 是的,它有效。
-
现在还将国际插件插件设置添加到问题@FerranBuireu
-
与 gatsby-plugin-advanced-sitemap 相同的问题,生成一个/不生成页面。
标签: javascript graphql gatsby netlify gatsby-plugin