gpt4 book ai didi

javascript - 使用 gatsby-plugin-sitemap 仅生成一个页面到站点地图

转载 作者:行者123 更新时间:2023-12-05 04:45:59 26 4
gpt4 key购买 nike

我无法为我的 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,
}
},
},
},

最佳答案

我认为您的问题是因为您没有设置 resolveSiteUrl 并且在这种情况下,siteUrl 需要存在。根据docs :

siteMetadata: {
// If you didn't use the resolveSiteUrl option this needs to be set
siteUrl: `https://www.example.com`,
},

理想的完整配置应该是:

const siteUrl = process.env.URL || `https://fallback.net`

// In your gatsby-config.js
module.exports = {
plugins: [
{
resolve: "gatsby-plugin-sitemap",
options: {
query: `
{
allSitePage {
nodes {
path
}
}
allWpContentNode(filter: {nodeType: {in: ["Post", "Page"]}}) {
nodes {
... on WpPost {
uri
modifiedGmt
}
... on WpPage {
uri
modifiedGmt
}
}
}
}
`,
resolveSiteUrl: () => siteUrl,
resolvePages: ({
allSitePage: { nodes: allPages },
allWpContentNode: { nodes: allWpNodes },
}) => {
const wpNodeMap = allWpNodes.reduce((acc, node) => {
const { uri } = node
acc[uri] = node

return acc
}, {})

return allPages.map(page => {
return { ...page, ...wpNodeMap[page.path] }
})
},
serialize: ({ path, modifiedGmt }) => {
return {
url: path,
lastmod: modifiedGmt,
}
},
},
},
],
}

调整它并使其适合您的查询。

我会做类似的事情:

    resolveSiteUrl: () => siteUrl,
resolvePages: ({
allSitePage: { nodes: allPages },
}) => {
const sitePageNodeMap = allSitePage.reduce((acc, node) => {
const { uri } = node
acc[uri] = node

return acc
}, {})

return allPages.map(page => {
return { ...page, ...sitePageNodeMap[page.path] }
})
},
serialize: ({ path, modifiedGmt }) => {
return {
url: path,
lastmod: modifiedGmt,
}
},

关于javascript - 使用 gatsby-plugin-sitemap 仅生成一个页面到站点地图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68991036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com