在 Gatsby 中使用 useStaticQuery 填充数据的 SEO 效果

SEO effect of populating data with useStaticQuery in Gatsby

A​​faik,预渲染 HTML 内容,其中文本内容已经填充在 DOM 中,具有更好的 SEO 性能,因为 Google 机器人不需要与 javascript 混淆读取页面内的数据。

正如我在 Gatsby 的文档中看到的,数据可以通过 useStaticQuery 填充,其中数据通过 XHR 请求加载并通过 javascript 注入到需要另一个呈现的页面。我想知道它在 SEO 性能方面的效率如何。

正如我所见,他们直接建议通过这些查询提供 SEO 敏感数据:

const SEO = ({ title, description, image, article }) => {
  const { pathname } = useLocation()
  const { site } = useStaticQuery(query)
  const {
    defaultTitle,
    titleTemplate,
    defaultDescription,
    siteUrl,
    defaultImage,
    twitterUsername,
  } = site.siteMetadata
  const seo = {
    title: title || defaultTitle,
    description: description || defaultDescription,
    image: `${siteUrl}${image || defaultImage}`,
    url: `${siteUrl}${pathname}`,
  }
  return null
}
export default SEO

此外,如果这种查询方法对 SEO 性能有负面影响,Gatsby 中是否有任何内置方法来预呈现这些内容?

Gatsby 在编译或部署站点(即:当您 运行 一个 build 命令时)。这意味着您的 SEO 对象将从任何 CMS 数据源动态生成,您的对象将在编译时使用来自任何来源的任何数据填充,但一旦完成,它将输出到一个普通的 HTML 文件中( /public 文件夹下)。这个普通的 HTML 是 Google 将读取的内容,它不会处理任何 JavaScript,它会直接读取您的元数据。

这就是 Gatsby 的工作原理以及它对 SEO 友好的原因:如果您的代码高效,洞察力得分结果总是惊人的,但 Gatsby 通过输出普通的 JavaScript 而不是要求它来帮助达到惊人的得分服务器(就像 WordPress 或其他 PHP 网站一样),您的文件就在那里,准备好被 Google 读取,这就是为什么如此快。

问你的问题,Gatsby 在编译时内置了 SEO 对象,而不是在你打开 Gatsby 站点时异步或处理任何 JavaScript。