跳到主要内容

Functional Specification

Yoast SEO 的 "Indexables" 框架提供了一个抽象层,用于处理与 SEO 相关的文章元数据。

以页面为中心的网页模型​

我们软件的大部分功能是存储、管理和评估与 页面 相关的信息。每个页面都有一个唯一的(规范)URL。

这是大多数搜索引擎和系统对网页的'思考'方式。它们基于 URL 为所有已知页面构建一张 地图。我们也采用同样的方法。有了这张地图,我们就能轻松检查、更新和管理特定页面的信息。

表面上看,这似乎是一个简单的概念。但像'页面'这样的词隐藏着复杂性和细微差别——尤其是在 WordPress 的语境中。

例如,在 WordPress 中,存储在数据库中的文章 并不附带 URL。每次系统需要知道页面 URL 时,都必须进行 计算(基于用户为网站定义的 URL 结构设置)。这在计算上是昂贵的。

但处理开销并非唯一的挑战——还存在一些场景,其中'页面'的含义并不明确。

但什么是页面?​

除了我们通常理解的网站"页面"概念,我们可能还会遇到 归档 视图(例如某作者发布的所有文章)、替代内容 格式(例如 RSS 源)、分类法(例如标签和分类)、错误模板(例如 404 页面)、分页 结果以及其他特殊类型的内容。在搜索引擎看来,这些都属于"页面"。

从 SEO 的角度来看,每种情况都需要不同的处理方式——各自有其规则和条件。即使是一篇简单的博客文章,也可能有 数十个 需要我们考量和评估的数值。这些包括爬取和索引控制、内容评估分数、关键词、展示设置、媒体资源等等。在确定页面上应输出哪些 SEO 元数据的过程中,我们必须考虑所有这些字段及其相互关系。

例如,仅确定页面的合适 规范 URL 就需要大量的查询和评估。

对于大型网站,所有这些逻辑、存储和处理都可能影响性能——尤其是在 WordPress 中,其数据库结构并非为此类需求设计或优化。

此外,网站包含许多我们 不 希望进行 SEO 评估的"页面"。某些内容类型可能存在于系统中(例如仅用于管理视图),但从未在公开 URL 上暴露。存储和处理这些信息没有意义,因为它们无法被搜索引擎 索引。

明确哪些内容 可索引、哪些 不可索引,是实现高效元数据管理的关键。

什么是可索引项?​

可索引项 是指任何能够(理论上)被搜索引擎根据给定 URL 索引 的资源。这包括许多超出“页面”范畴的内容类型——例如分类目录、作者归档、日期归档的分页状态、媒体文件等。

示例:

注意:我们有意_排除_任何非公开页面以及返回错误的页面。

WordPress 中的 Yoast SEO 索引表​

Yoast SEO 通过专用数据库表在 WordPress 中创建并管理索引表。该表存储了从 SEO 角度所需的所有信息,涵盖我们已知的每个可索引对象。这意味着当我们需要查询特定页面以确定 SEO 元数据时,可以极其高效地完成此操作。

此过程在后台静默运行,并与 WordPress 原生元数据字段及流程无缝同步。

该表还会自动填充和更新自身。当我们遇到未知的可索引对象时,会创建新记录,以便后续请求可使用该数据。我们还在管理工具中提供了(重新)索引流程,可主动根据网站数据库构建索引表。

通过建立索引表,我们获得了以“SEO 为中心”的网站视图,重点关注页面(及其应输出的元数据)。

索引机制​

我们的索引表通过两种方式构建和维护:

  • Yoast SEO 界面中的各类优化流程会提示用户执行"索引"操作,这是使用多种工具和控制功能的前提条件。
  • 对先前未发现的索引项的请求将触发延迟生成流程。

这些流程确保索引表始终完整且准确地反映网站状态。

Yoast SEO 存储哪些类型的可索引对象?​

我们存储的可索引对象类型包括:

  • 所有公开*的文章和分类法
  • 网站首页
  • 作者归档页(针对已发布公开文章的作者)

我们还存储了几种“模式”,这些模式代表 模板 和内容类型,为每个可能的排列创建独立可索引对象既无价值也无必要。这些模式包括:

  • 文章类型、分类法和日期归档页
  • 错误页面
  • 内部搜索结果页面

*当文章/分类法类型的 public 属性在 register_post_type/register_taxonomy 中设置为 true 时,我们即认为该页面是“公开”的。

使用场景​

当我们全面掌握网站所有公开页面后,即可利用数据库驱动功能与工具。例如:

  • 获取页面 <head> 元数据时,可通过单次数据库请求获取所有相关预计算字段
  • 构建 XML 站点地图时,可即时判定应包含或排除哪些可索引项
  • 其他软件系统能轻松集成、修改并扩展我们的逻辑体系

修改索引对象行为​

大多数用户无需直接与索引对象表或逻辑交互。但高级用户可能希望自定义行为以满足特定需求。 为此,我们提供了一系列过滤器来修改默认行为或与数据表交互: