如何使用gatsby-plugin-sitemap将PDF静态文件加入Gatsby的sitemap.xml
解决方案
你只需要在resolvePages方法中接收GraphQL返回的查询结果,将PDF文件的publicURL映射为sitemap要求的path字段即可,完整配置参考如下:
{ resolve: `gatsby-plugin-sitemap`, options: { query: ` { allFile(filter: {extension: {eq: "pdf"}}) { nodes { publicURL # 可选:如果需要指定PDF的更新时间,可新增modifiedTime字段 modifiedTime } } # 可选:如果需要同时保留站点原有普通页面的sitemap收录,补充下面的查询 allSitePage { nodes { path } } } `, resolvePages: ({ allFile, allSitePage }) => { // 映射PDF为符合要求的sitemap页面对象 const pdfPages = allFile.nodes.map(node => ({ path: node.publicURL, // 可选:自定义配置更新时间、更新频率、收录优先级 // lastmod: node.modifiedTime, // changefreq: 'monthly', // priority: 0.7 })) // 可选:如果要合并原有普通页面到sitemap,保留下面这行 const sitePages = allSitePage?.nodes || [] // 返回所有需要收录的页面对象 return [...sitePages, ...pdfPages] }, } }
注意事项
- 页面对象的
path是必填字段,对应资源相对站点根目录的路径,gatsby-plugin-sitemap会自动拼接你预先配置的站点域名生成完整的sitemap URL - 如果你只需要收录PDF文件,删除上面关于
allSitePage的查询和合并逻辑即可 - 如果你需要对PDF和普通页面配置不同的收录规则,可以分别给两类对象设置不同的
changefreq、priority等参数
内容的提问来源于stack exchange,提问作者Shouichi
相关产品推荐
相关产品推荐

