Drupal SEO 的名声并不完全配得上它的实力。随便问一圈,总会有人告诉你 Drupal 开箱即用就很适合搜索,而说这话的人往往是在拿十五年前对另一个平台的记忆做比较。一套原装的 Drupal 11 安装,既没有元描述字段,也没有 XML 站点地图,URL 变更时没有自动重定向,而且在编辑手动敲入别名之前,内容一直在 /node/123 上响应。

这不是在批评这个项目。核心刻意把自己的范围保持得很小,把一切带有立场的东西推给贡献模块,而这恰恰是大型 Drupal 站点能比多数平台调得更精细的原因。但这也意味着开箱即用这个说法承担了非常多的分量,意味着一个 Drupal 站点的搜索表现,几乎完全取决于第一天装了哪些模块,以及有谁把它们配成了什么样子。

下面是这套技术栈在 2026 年 9 月的实际状况:核心做了什么,哪些贡献模块替你补上了别的系统免费奉送的能力,只在 Drupal 上才会出现的失败模式有哪些,以及当初这些事一件都没做的站点,修起来要花多少钱。

Drupal 开箱即用适合 SEO 吗。 不适合。核心给你的是路径别名、canonical 链接标签和一个很强的多语言路由层,但它不提供元描述、不提供 XML 站点地图、不处理重定向,也不输出结构化数据。这些来自四个贡献模块:Pathauto、Metatag、Simple XML Sitemap 和 Redirect。缺了它们的 Drupal 站点不是优化得差,而是根本没有优化。


Drupal 核心真正为你做的事

核心给了你三样要紧的东西,而且这三样都做得确实好。

核心的 Path 模块让你可以给任意路由挂上一个人类可读的别名,于是一个节点可以在 /services/tax-advice 上响应,而不是在它的内部路径上。核心会保存这个别名,并按它来解析请求。核心不会做的事情是替你想出这个别名,所以在一个有 2,000 个节点的站点上,得有人手打 2,000 条别名,而现实中从来没有人真的打完。

核心还会在实体页面上输出链接关系。查看一个节点会生成指向别名 URL 的 rel="canonical",以及指向未加别名 URL 的 rel="shortlink",考虑到有好几个商业平台不装插件根本做不到这一点,这已经相当可观。正是这一个行为,让下面要讲的重复路径问题通常只是能扛过去,而不是致命的。

第三样是语言。核心的多语言技术栈会处理路径前缀、按语言划分的别名,以及已翻译实体上的备选语言链接,这是 Drupal 搜索故事里最强的一部分。

其余的一切都是贡献模块。在你自己添加之前,内容类型上不存在元描述字段,没有站点地图,没有重定向表,删掉一个节点只会留下一个 404,再无其他。

事实上不可或缺的四个模块

drupal.org 上带 SEO 标签的模块有几十个。其中四个不是可选项,凡是漏掉任何一个的 Drupal 项目,都会留下一个竞争对手没有的窟窿。

Pathauto

Pathauto 依据令牌模式生成别名,比如 blog/[node:title] 这样的模式,会在节点保存时自动产出别名。它是 Drupal 里最接近人人都装的模块,有 464,471 个站点报告在用它,当前稳定版是 2026 年 5 月 4 日发布的 8.x-1.15,支持 Drupal 10.2 和 11。它依赖 Token 模块。

决定 Pathauto 是帮忙还是添乱的设置是更新动作,它控制标题改变、模式因而产出不同别名时会发生什么。Pathauto 可以什么都不做,可以直接替换掉旧别名,也可以创建新别名并保留一条从旧别名过来的重定向。你要的是第三种,而这个选项只有在装了 Redirect 模块时才会出现。停留在较弱默认值上的站点,会悄悄地为每个节点攒下好几条仍然活着的别名。

Metatag

Metatag 是 Drupal 页面得以拥有元描述的唯一途径,同时也负责 Open Graph 和 Twitter Card 的输出。Damien McKenna 自 2012 年起一直在维护它,有 332,868 个站点报告在用,2025 年 9 月发布的 2.2.0 需要 Drupal 10.3 或 11。

它的工作方式是按实体类型和 bundle 设置默认值,写成令牌模式,再在上面叠加按节点的覆盖。常见的失败是某个模式在整个内容类型里解析出完全一样的结果,于是几百个页面共用同一条描述。这比没有描述更糟,因为它等于告诉抓取程序这些页面可以互相替换。

Simple XML Sitemap

核心不输出任何形式的站点地图。Simple XML Sitemap 是标准答案,有 137,418 个站点在用,2025 年 11 月 26 日发布的 4.2.3 需要 Drupal 10.3 或 11。它可以索引实体、视图和自定义链接,还会输出 hreflang 和图片条目,这在多语言项目里意义重大。

按 bundle 配置它,而不是全站一刀切。默认的诱惑是把什么都包进去,结果就是把分类术语页、用户资料页和未加筛选的视图列表全推进站点地图,等于告诉搜索引擎你最单薄的页面才是重点。

Redirect

Redirect 提供手工重定向,更重要的是提供 canonical URL 强制:它可以把对某段内容的每一个非 canonical 请求都重定向到 canonical 路径。有 265,749 个站点在用它,2026 年 4 月 24 日发布的 8.x-1.13 支持 Drupal 10 和 11。

有一点值得直说。项目页面目前挂着一条招募共同维护者的公告,对一个承担了这么多分量的模块来说,这是一个需要盯着的维护风险,而不是回避它的理由。它仍然受 Drupal 安全公告政策的覆盖。

别的平台没有的 Drupal SEO 陷阱

每个节点至少有两个活着的 URL

这是从别的系统转过来的人最感意外的一点。在 Drupal 里加了别名并不会让内部路径退休。/node/123 会继续以 200 返回完整页面,而且只要更新动作允许它们留存,这个节点曾经被赋予的每一条别名也都一样。

核心的 canonical 标签能减轻损害,Google 把 canonical 标注当作强信号而不是指令,把它排在与重定向同级、高于站点地图收录的位置。但强信号不是保证。稳妥的解法是 Redirect 模块的 canonical 强制,它把重复项变成永久重定向,于是根本没有什么需要再去合并。

分类术语页会不断增殖

核心会为每一个分类术语生成一个列表页。在有自由标签词汇表的站点上,这意味着一个标签一个页面,其中大多数只挂着一两个节点,标题来自模板,也没有描述。几百个这样的页面,就是一个谁都没有故意制造出来的内容单薄问题。

按词汇表逐个决定,而不是全站统一。真正有编辑价值的分类可以被索引,并配上手写的描述。自由标签词汇表则从站点地图里排除,多数情况下再加上 noindex。

视图分页与 ?page= 留下的痕迹

核心的每一个视图列表都用 ?page= 参数分页,而每一个这样的地址都是独立的 URL。Google 的指引是序列中的每一页都应当有自己的 URL 和自己的 canonical,而不是把 canonical 指回第一页,并且 rel next 和 rel prev 已经不再被使用。

Drupal 特有的部分在于,同一个视图上的暴露筛选器和排序会与分页器相乘。一个带三个暴露筛选器、结果有四十页的列表,产生的可寻址 URL 远远多于它实际拥有的内容,而且每一个都会真的渲染出来。

分面与参数爆炸

分面搜索,通常是架在 Search API 之上的 Facets 模块,正是在这里,问题从不整洁升级成抓取预算问题。2026 年 9 月 1 日发布的 Facets 3.0.6 支持 Drupal 10.1 和 11,有 56,746 个站点在用。它同样挂着招募共同维护者的公告。

Google 警告说,抓取程序要走过数量极其庞大的分面导航 URL之后,才能确认这些 URL 通向的地方并无用处,而这个过程既消耗你的抓取预算,也消耗它们的算力。尽早决定哪些分面组合可被索引,其余的挡掉,并保持参数顺序稳定,让同一组筛选条件永远产出同一个 URL。

发布状态的反复

一个先以未发布状态创建、带着临时标题、一周后又用另一个标题发布的节点,会在创建时产出一条别名,在发布时再产出一条。如果更新动作设错了,两条都活着,两条都可被抓取。再乘上一支编辑团队和一年的产出,别名表最后会比节点表还大,而这正是一次 SEO 审计在拿活着的 URL 数量对照已发布节点数量时要找的模式。

Drupal 里的结构化数据

有两条路,而这个选择比看上去更要紧。

Schema.org Metatag 扩展了 Metatag,在页面 head 里输出 JSON-LD,覆盖二十五种以上的 schema 类型。2026 年 2 月 19 日发布的 3.0.4 版支持 Drupal 9、10 和 11,有 66,363 个站点在用。和 Redirect、Facets 一样,它也在招募共同维护者。

它的优势是完整继承了 Metatag 的那套继承模型:按 bundle 的默认值、拉取字段值的令牌、按节点的覆盖,以及永远不必看到原始 JSON 的编辑人员。它的局限是你只能表达这个模块建模过的东西,而深度嵌套的 schema,也就是一件商品一旦牵涉到报价、评价和退货政策时所需要的那一类,用令牌字段拼出来会很别扭。

在 Twig 模板里手写 JSON-LD 给你完全的控制权,代价是失去编辑界面。在一个模板数量不多、手边又有开发者的站点上,这往往是更划算的交换。在一个有六十种内容类型和一支内容团队的站点上,就不是了,因为每改一次 schema 都会变成一次部署。

选一条路。我们最常见到的失败,是两条路并行跑着,输出两个在发布日期上互相矛盾的 Article 块。

多语言 Drupal 与 hreflang

这是 Drupal 真正配得上它名声的地方,值得明确写出来,因为这篇文章的其余部分讲的都是缺口。

核心自带语言相关模块,一旦启用内容翻译,Drupal 就会在已翻译实体上输出备选语言链接,不需要任何贡献模块帮忙。路径前缀、按语言划分的别名和按语言划分的菜单,都是开箱就能用的。

Google 对本地化版本的要求是:每个版本既要列出自己,也要列出其余所有版本;这些标注必须是双向的;并且要有一个 x-default 作为回退。Drupal 的翻译模型自动满足前两条,因为备选项是从翻译集生成的,而不是由编辑手工敲进去的。相比那些把 hreflang 做成插件字段、谁都可能忘记填的平台,这是实打实的优势。

仍然有两件事会出问题。x-default 的值不会自动设好,需要通过 Metatag 或模板补上。还有,只翻译了一部分的集合会产出一些指向回退到源语言页面的备选项,而这比干脆不做标注还要糟。

性能与 Core Web Vitals

Drupal 的缓存层属于核心,做得很好,而且经常因为某次没人记得收尾的调试而一直被关着。

渲染缓存把片段连同可缓存性元数据一起存起来:描述该片段所依赖数据的缓存标签、描述它随什么变化的缓存上下文,以及一个最大有效期。当底层实体发生变化时,标签会自动失效。元数据写错了,你要么发出过期页面,要么什么都缓存不了。

Internal Page Cache 向匿名访客提供完整页面。Dynamic Page Cache 通过缓存除个性化部分之外的一切,向任何用户提供页面。而 BigPipe 自 Drupal 8.1 起进入核心,并自 8.5 起成为标准安装配置的一部分,它会在首个响应已经发出之后,再把那些个性化占位符流式送达。

就 Core Web Vitals 而言,要点很有限。BigPipe 改善的是感知加载速度,而当它要填充的占位符没有预留空间时,反而可能让 Cumulative Layout Shift 变差。Drupal 站点的 Largest Contentful Paint 通常由主视觉图片和聚合后的 CSS 包决定,而不是由渲染缓存决定。Drupal 11.4 增加了在 PHP 扩展可用时生成 Brotli 压缩的 CSS 和 JavaScript 资源,对任何自行提供静态资源的站点来说,这都是一个干脆利落的收益。

大版本升级会破坏什么

Drupal 的大版本升级不是换平台,但它会以特定且反复出现的方式破坏搜索可见度。

贡献模块通常是罪魁祸首。如果 Metatag 还没有适配目标版本,站点却在缺了它的情况下上线,全站的元描述会一次性消失,而且直到两周后展示量下滑之前没有人会注意到。站点地图模块也一样,Redirect 的情况更糟,因为失去 Redirect 会让 canonical 强制停摆,所有旧别名统统复活。

第二个原因是没能挺过迁移的配置。Metatag 默认值、Pathauto 模式和站点地图的 bundle 设置都存放在配置里,一个只导入了内容而没有导入配置的重建站点,回来时带着默认模式,同样的内容却换了 URL。

动手之前先做一次完整抓取,把每个页面的 URL、状态码、标题、描述和 canonical 都记录下来,事后再拿同样的抓取做一次比对。我们的 Drupal 迁移指南讲了各条版本路径以及与之绑定的期限。

Drupal 各版本目前的处境

时机会改变你合理的第一步是什么。Drupal 11.4.0 于 2026 年 7 月 1 日发布,11.4.x 分支的安全支持持续到 2027 年 6 月。2022 年 12 月 15 日发布的 Drupal 10 将在 2026 年 12 月 9 日终止生命周期,而 Drupal 12 排在 2026 年 12 月 7 日那一周,测试版预计在 2026 年 9 月中旬出现。

实际的结果是,在写下这段话的时候,一个 Drupal 10 站点大约只剩三个月的安全覆盖。任何在 Drupal 10 站点上委托的 SEO 工作,都应当排在升级之后而不是之前,因为反过来做意味着付两次钱:一次是修元数据,另一次是模块版本抬升、输出随之改变的时候。

Drupal 11.1 到 11.4 运行在 PHP 8.3 和 8.4 上,而 Drupal 10 至少需要 PHP 8.1。在共享主机上,真正卡住项目的往往是这个 PHP 下限,而不是 Drupal 这边的工作本身。

一次 Drupal SEO 项目要花多少钱

先把范围定清楚。Drupal SEO 项目不是一份报告,而是在一个具体代码库里做的配置工作和模板工作,交付物是一个被改动过的站点,不是一份文档。

基础审计覆盖那四个模块的组合及其配置方式、别名表与重定向表、分类法与视图的暴露面、站点地图的内容、结构化数据的输出,以及各层缓存。在一个只有几百个节点的站点上,这是三到五天的工作量。英国技术 SEO 的日费通常落在 600 到 1,200 英镑之间,所以这种形态的技术 SEO 审计大致在 2,000 到 5,000 英镑之间,取决于人员资历和站点规模。

实施是另一件事,而且通常更大。在一个已有内容的线上站点上安装并配置 Pathauto、Metatag、Simple XML Sitemap 和 Redirect,意味着批量生成别名、为每一条会改变的别名建立重定向映射,以及写出不会塌缩成重复的描述模式。这个阶段请按审计费用的一到两倍预留预算。

带分面搜索的多语言 Drupal 站点会高于这个区间。英国代理机构做 Drupal 工作的日费大约是 600 到 900 英镑,这一点在我们关于 Drupal 开发者费率的指南里有讲,而一个涉及多个翻译集和分面治理的项目,现实中是十到二十天。

把改动前后的抓取比对作为一项写明的交付物提出来。没有它,就没有任何证据证明真的改变了什么。

把顺序理顺

真正管用的顺序并不好看。先于一切安装并配置那四个模块,因为没有它们就做出的内容决策,之后都会变成返工。接着关掉重复 URL 的暴露面,因为它牵动站点上的每一个页面。然后是分类法与视图的暴露面,再然后是结构化数据,最后是性能。内容和链接排在技术层稳定之后,绝不在它之前。

Mecanik 按这个顺序把工作做成一次技术 SEO 审计,针对的是 Drupal 代码库及其配置,而不只是一次抓取结果,随后的实施则由 SEO 审计服务承接。如果你还在犹豫 Drupal 究竟是不是合适的平台,我们的 Drupal 开发指南以及无头 CMS 与传统 CMS 架构的比较会是比这篇更合适的起点。



常见问题

Drupal 开箱即用适合 SEO 吗? 不适合。Drupal 核心提供路径别名、canonical 链接标签和多语言路由,但不提供元描述、不提供 XML 站点地图、不处理重定向,也不输出结构化数据。这些需要 Pathauto、Metatag、Simple XML Sitemap 和 Redirect 模块,它们全都是贡献模块而非核心。原装安装不是优化得差,而是根本没有优化。

一个 Drupal 站点实际需要哪些 SEO 模块? 事实上不可或缺的有四个:负责自动生成 URL 别名的 Pathauto、负责元描述和社交标签的 Metatag、负责站点地图本身的 Simple XML Sitemap,以及负责重定向和 canonical URL 强制的 Redirect。如果你想输出结构化数据又不愿在 Twig 模板里手写 JSON-LD,第五个通常是 Schema.org Metatag。

我加了 URL 别名之后,为什么 /node/123 还能打开? 因为 Drupal 的别名不会让内部路径退休。两个地址都会以 200 状态返回完整页面。核心会输出一个指向别名的 canonical 标签,而 Google 把它当作强信号而不是指令,所以可靠的解法是 Redirect 模块的 canonical URL 强制,它会把重复项变成永久重定向。

Pathauto、Metatag 和 Simple XML Sitemap 兼容 Drupal 11 吗? 兼容,而且这套核心组合的四个模块都在积极维护。Pathauto 8.x-1.15 支持 Drupal 10.2 和 11,Metatag 2.2.0 需要 Drupal 10.3 或 11,Simple XML Sitemap 4.2.3 需要 Drupal 10.3 或 11,Redirect 8.x-1.13 支持 Drupal 10 和 11。四个都受 Drupal 安全公告政策覆盖。

在英国做一次 Drupal SEO 项目要花多少钱? 一次覆盖模块组合、别名表与重定向表、分类法暴露面、站点地图和结构化数据的配置审计,在中等规模站点上需要三到五天,按英国技术 SEO 日费 600 到 1,200 英镑计算,大致是 2,000 到 5,000 英镑。实施通常还要再花审计费用的一到两倍。