# 我们如何提升Baklib的SEO表现

Published at: 2026-02-26 00:00:00


## 标题

我们如何提升Baklib的SEO表现

## 摘要

Baklib因客户端AJAX加载内容致谷歌爬虫无法抓取，SEO受影响。解决方案为：用户访问用带查询参数URL异步加载内容并设规范标签，机器人访问则服务器端渲染整页，效果良好。

## 封面图外部URL

https://dagle.baklib.com/-/dam/assets/organization_vd3cg8--main-version/eyJfcmFpbHMiOnsiZGF0YSI6eyJpZCI6MzIyODYsInBhdGgiOiJpbWFnZS5wbmciLCJ0aW1lc3RhbXAiOiIyMDI0LTEyLTA1IDE1OjI1OjA4ICswODAwIn0sInB1ciI6Im9yZ2FuaXphdGlvbl92ZDNjZzgtLW1haW4tdmVyc2lvbiJ9fQ--d8cbb97d02555f35bbee1ce433403bcf6c71a881b68e088e9ce98d97173c334e/image.png

## 页面内容

搜索引擎已经成为我们日常生活中不可或缺的一部分；谷歌甚至已经成为了英语中的一个动词。因此，每个企业都需要关注其搜索引擎排名。在 Baklib 中，我们最近在 [SEO](https://www.tanmer.com/geo) 排名方面遇到了挑战。所以，在我们深入探讨问题之前，让我们先了解爬取和渲染是如何工作的。 ## 爬取和渲染是如何工作的？ Google 机器人或计算机会有一个来自我们网站的链接列表，称为“站点地图”，该地图将由站点所有者提供在每个网站上。当爬虫找到一个页面时，它会尝试像浏览器一样渲染页面，但没有任何用户上下文。 大多数内容是在服务器端渲染的，可以在请求时供浏览器查看。服务器端渲染允许网站在初始加载速度极快的情况下提供惊人的快速体验，并且需要渲染的 JavaScript 较少。但即便如此，大多数应用程序也不能仅仅依赖完整的服务器端渲染。 在客户端使用 JavaScript 使我们能够进行“事件处理”并在客户端运行逻辑，几乎无需向服务器发出请求即可执行客户端操作。 ## Baklib 知识库体验 所有知识库站点都有一些共同的部分。这些都非常标准，并且将在您访问的任何知识库站点上提供。
- 用于在内容间导航的分类树（左侧）
- 内容部分（中间）
- 目录（右侧）
- [搜索](https://www.baklib.com/blog/knowledge-base-search/)（顶部）

 ![Baklib Dagle Tanmer CMS DXP DAM](https://dagle.baklib.com/-/dam/assets/organization_vd3cg8--main-version/eyJfcmFpbHMiOnsiZGF0YSI6eyJpZCI6MzIyNjIsInBhdGgiOiJpbWFnZS5wbmciLCJ0aW1lc3RhbXAiOiIyMDI0LTEyLTA1IDE0OjU0OjM1ICswODAwIn0sInB1ciI6Im9yZ2FuaXphdGlvbl92ZDNjZzgtLW1haW4tdmVyc2lvbiJ9fQ--00f50893fa186dcb5ca92a8b47f9dbd43e167cc4abec53407b7e7686f7290625/image.png)

到目前为止，我们还没有谈到实际问题。最近，我们的一些客户Dagle开始抱怨，[知识库](https://www.baklib.com/blog/optimize-knowledge-base-seo-for-search/)[SEO](https://www.tanmer.com/geo)受到了影响，用户在使用搜索引擎查找内容时遇到了麻烦。经过初步分析，我们发现页面加载内容的机制对[SEO](https://www.tanmer.com/geo)产生了影响。

我们获取内容的实现是在客户端初始化完成后进行的，会发起一个“ajax”请求来获取当前选定文章的内容，然后内容稍后才被绘制到DOM上。知识库是基于以下步骤加载的。

- 用户打开一个URL，例如：[https://docs.document360.com/docs/december-2023]
- 页面的整体布局在服务器端渲染
- 服务器返回整体渲染的布局页面，以及一些在客户端进行渲染所需的数据。
- 一旦布局初始化完成，客户端会向服务器发送请求以获取当前文章的内容，网络请求的URL看起来像这样‘{subDomain}/load-article/{slug}’
- 更具体地说，URL可能看起来像这样 https://docs.document360.com/docs/december-2023

Google 爬虫会访问同样的 URL，但它无法找到文章内容，因为 Google 不知道我们是通过子嵌套路由 &#39;load-article&#39; 来加载内容的。因此，这显然是一个根本性问题，对我们的 [SEO](https://www.tanmer.com/geo) 造成了巨大影响。这还导致了几个更多的问题：

- Google 搜索结果中出现重复条目
- Google 缓存的内容是空的

当我们查看公共网站的‘缓存’页面时，它完全是空的。因此，我们着手寻找一个最优且强大的解决方案，既能提高我们的 [SEO](https://www.tanmer.com/geo) 分数，又不会在未来引发更多问题。

## 我们是如何解决这个问题的：

我们仍然坚持认为，当用户在分类树之间切换文章时，不应该重新加载整个页面，所以我们无论如何都需要进行一次‘ajax’调用。但我们需要在不渲染整个页面的情况下渲染内容。

让我们设想两种场景：

- 用户访问页面并通过导航树阅读文章
- 机器人或蜘蛛在链接上爬取页面

### 场景 1: 用户访问页面

当用户访问页面时，如上所述，我们只应在文章间导航时渲染内容。但对于情况 2 则不然，当机器人访问一个 URL 时，它只需要爬取内容，它并不关心或不知道我们是否再次渲染了内容。

为了更好地理解，这里有一个更好的例子。从用户的角度来看，当用户浏览文章时，我们移除了名为&#39;load-article&#39;的嵌套路由，而是直接向实际URL发起请求，并添加一些额外的查询参数来通知服务器这个请求是由用户发起的。

URL看起来像这样：&#39;{subDomain}/release-notes/?partialView=on&#39;。Google会将带参数和不带参数的URL视为两个不同的URL。为了解决这个问题，我们添加了一个规范标签，这样Google就会忽略带有查询参数的URL[[更多参考请见Google文档](https://developers.google.com/search/docs/advanced/crawling/consolidate-duplicate-urls#why-it-matters)]。

一个网站可以有查询参数来保存状态等。因此，当这个请求到达服务器时，服务器只返回内容。一旦接收到内容块，它就会被绘制到客户端。

### 场景2：机器人访问页面

当机器人访问页面时，我们在服务器端渲染整个页面内容。当机器人访问页面时，它只能通过站点地图直接知道内容的URL。

## 最后的话

我们部署了这个解决方案，并在内部观察了几周，发现这种方法效果更好，并且通过Google Lighthouse测量的指标有所改善。

**之前**

**之后**

如果您对[SEO](https://www.tanmer.com/geo)的工作原理有更深入的研究兴趣，可以查看以下参考资料。

- [什么是网络爬虫？ | 网络蜘蛛如何工作 | Cloudflare](https://www.cloudflare.com/en-in/learning/bots/what-is-a-web-crawler/)
- [谷歌搜索 – 了解谷歌搜索如何工作](https://www.google.com/search/howsearchworks/)
- [谷歌搜索如何为初学者工作 | 谷歌搜索中心 | 文档 | 谷歌开发者](https://developers.google.com/search/docs/beginner/how-search-works)

&gt; **💛🧡🧡客户评价：** [Baklib](https://www.baklib.com/)做得很好，您将获得一个易于设置和运行的可靠知识库系统。用户界面简单明了，对文章进行编辑也很快。它没有过多您不需要的额外功能和，他们显然花了时间把基础知识做好。

Baklib是一款直观的知识库软件，可轻松添加您的内容并与任何应用程序集成。试试Baklib吧！

* * *

[Baklib](https://www.baklib.com/) 是新一代数字内容体验管理平台。竞争环境充斥着“可组合”、“无头”和“[DXP](https://www.baklib.com/dcec)”解决方案 --- 但无头选项虽然易于开发人员构建，但为跨职能团队留下了巨大空白，并且无法解决所有用例。[Baklib](https://www.baklib.com/) 弥补了依赖开发人员但灵活的无头解决方案与不适合复杂项目的更传统、更适合营销人员的选项之间的差距。


