使用这款 Python 工具实现网站错误自动化测试

SEODeploy 帮助在网站部署前识别 SEO 问题。
74 位读者喜欢这个。
Computer screen with files or windows open

Opensource.com

作为一名技术搜索引擎优化师,我经常被请来协调网站迁移、新网站发布、分析实施以及其他影响网站在线可见性和衡量指标的领域,以限制风险。许多公司每月经常性收入的很大一部分来自用户通过搜索引擎找到他们的产品和服务。尽管搜索引擎已经很擅长处理格式不佳的代码,但在开发过程中仍然可能出现问题,从而不利地影响搜索引擎索引和向用户展示页面的方式。

我曾参与手动流程,试图通过审查已暂存的更改,以查找搜索引擎优化 (SEO) 破坏性问题来降低这种风险。我的团队的发现决定了项目是否获得批准(或不批准)发布。但是,此过程通常效率低下,只能应用于有限数量的页面,并且人为错误的可能性很高。

长期以来,业界一直在寻求一种可用且值得信赖的方法来自动化此过程,同时仍然让开发人员和搜索引擎优化师在必须测试的内容方面拥有有意义的发言权。这一点很重要,因为这些群体在开发冲刺中通常具有相互竞争的优先级,搜索引擎优化师推动更改,而开发人员需要控制回归和意外体验。

常见的 SEO 破坏性问题

我合作的许多网站都有数万个页面。有些网站有数百万个页面。要理解开发更改可能对如此多的页面产生什么影响是令人望而生畏的。在 SEO 领域,您可能会看到 Google 和其他搜索引擎如何显示您的页面的大型、全站范围的更改,这些更改来自非常小的且看似无害的更改。必须制定流程来捕获这些类型的错误,并在它们进入生产环境之前将其捕获。

以下是我在过去一年中看到的一些问题示例。

意外的 noindex

我们使用的专有第三方 SEO 监控工具 ContentKing 在发布到生产环境后立即发现了这个问题。这是一个隐蔽的错误,因为它在 HTML 中不可见,而是隐藏在服务器响应标头中,但它可能很快导致您失去搜索可见性。

HTTP/1.1 200 OK
Date: Tue May 25 2010 21:12:42 GMT
[...]
X-Robots-Tag: noindex
[...]

Canonical 小写

生产环境中的一项更改错误地将整个网站的 canonical 链接元素 转换为小写。此更改影响了近 30,000 个 URL。在更新之前,URL 采用首字母大写形式 (例如,/URL-Path/)。这是一个问题,因为 canonical 链接元素是 Google 关于网页真实 canonical URL 版本的提示。此更改导致许多 URL 从 Google 的索引中删除,并在新的小写位置 (/url-path/) 重新索引。影响是在接下来的几周内流量损失 10-15%,页面指标数据损坏。

源服务器回归

一个网站具有复杂且新颖的 React 实现,在显示其源内容交付网络服务器的 origin.domain.com URL 时遇到了神秘的回归问题。它会间歇性地在站点元数据(例如 canonical 链接元素、URL 和 Open Graph 链接)中输出源主机而不是边缘主机。在原始 HTML 和呈现的 HTML 中都发现了该问题。这影响了搜索可见性和社交媒体上分享的质量。

SEODeploy 简介

SEO 通常使用差异测试工具来查看渲染的 HTML 和原始 HTML 集之间的更改。差异测试是理想的选择,因为它允许眼睛无法达到的确定性。您需要查找 Google 如何呈现您的页面的差异,而不是用户如何呈现。您需要查看原始 HTML 的外观,而不是呈现的 HTML,因为对于 Google 来说,这是两个单独的处理步骤。

这促使我的同事和我创建了 SEODeploy,这是一个“用于自动化部署管道中 SEO 测试的 Python 库”。我们的使命是

开发一种工具,允许开发人员提供少量到多个 URL 路径,并允许在生产和暂存主机上对这些路径进行差异测试,专门查找与 SEO 相关的数据中意外的回归。

SEODeploy 的机制很简单:提供一个包含换行符分隔的路径集的文本文件,该工具在这些路径上运行一系列模块,比较生产和暂存 URL,并报告它发现的任何错误或消息(更改)。

该工具和模块的配置只是一个 YAML 文件,可以根据预期的更改进行自定义。

初始版本包括以下核心功能和概念

  1. 开源:我们深信共享可以被批评、改进、扩展、共享和重用的代码。
  2. 模块化:Web 开发中有许多不同的堆栈和边缘情况。SEODeploy 工具在概念上很简单,因此模块化用于控制复杂性。我们提供了两个内置模块和一个示例模块,概述了基本结构。
  3. URL 采样:由于测试每个 URL 并非总是可行或有效,因此我们包含了一种随机采样 XML 站点地图 URL 或 ContentKing 监控的 URL 的方法。
  4. 灵活的差异检查:Web 数据很混乱。无论它检查的数据类型如何,差异检查功能都试图很好地将此数据转换为消息(更改),包括 ext、数组(列表)、JSON 对象(字典)、整数、浮点数等。
  5. 自动化:一个简单的命令行界面用于调用采样和执行方法,以便轻松地将 SEODeploy 整合到现有管道中。

模块

虽然核心功能在设计上很简单,但模块是 SEODeploy 获得功能和复杂性的地方。模块处理从暂存服务器和生产服务器获取、清理和组织收集的数据以进行比较的更困难的任务。

Headless 模块

该工具的 Headless 模块 是对任何不想为第三方服务付费以从库中获得价值的人的致敬。它运行任何版本的 Chrome 并从每个比较 URL 集中提取渲染数据。

Headless 模块提取以下核心数据以进行比较

  1. SEO 内容,例如,标题、标题、链接等。
  2. 来自 Chrome Timings 和 Chrome DevTools Protocol (CDP) Performance API 的性能数据
  3. 计算的性能指标,包括累积布局偏移 (CLS),这是 Google 最近发布的流行的 Web Vital
  4. 来自 CDP Coverage API 的 CSS 和 JavaScript 的覆盖率数据

该模块包括处理暂存身份验证、网络速度预设(为了更好地规范化比较)以及用于处理暂存比较数据中暂存主机替换的功能。开发人员应该可以相当容易地扩展此模块以收集他们想要按页面比较的任何其他数据。

其他模块

我们为任何想要使用该框架创建自定义提取模块的开发人员创建了一个 示例模块。另一个模块与 ContentKing 集成。请注意,ContentKing 模块需要订阅 ContentKing,而 Headless 可以在任何能够运行 Chrome 的机器上运行。

要解决的问题

我们有 计划 扩展和增强该库,但正在寻找开发人员关于哪些工作正常以及哪些不符合他们需求的 反馈。我们列表上的一些问题和项目是

  1. 动态时间戳为某些比较元素(尤其是模式)创建误报。
  2. 将测试数据保存到数据库以支持查看历史部署过程,并根据上次暂存推送测试更改。
  3. 通过用于渲染的云基础设施增强提取的规模和速度。
  4. 将测试覆盖率从目前的 46% 提高到 99% 以上。
  5. 目前,我们依赖 Poetry 进行依赖项管理,但我们希望发布 PyPl 库,以便可以使用 pip install 轻松安装它。
  6. 我们正在寻找更多关于使用情况的问题和现场数据。

开始使用

该项目位于 GitHub 上,我们为大多数功能提供了 文档

我们希望您能克隆 SEODeploy 并试用一下。我们的目标是使用由技术搜索引擎优化师开发并经过开发人员和工程师验证的工具来支持开源社区。我们已经看到了验证复杂暂存问题所需的时间,以及微小的更改可能对许多 URL 产生的业务影响。我们认为这个库可以节省时间,并降低开发团队部署过程的风险。

如果您有疑问、问题或想要贡献,请参阅项目的 关于页面

下一步阅读
User profile image.
JR Oakes 是 LOCOMOTIVE 的技术 SEO 研究高级总监,LOCOMOTIVE 是一家专门为大大小小的客户提供技术 SEO、ORM 和 CRO 服务的机构。他与客户在广泛的方面合作,包括技术问题、性能、CTR、抓取能力、内容和数据分析。JR 喜欢测试、编码和原型设计解决棘手的搜索营销问题的方案。

2 条评论

哇,很棒的工具!这个工具将帮助 SEO 领域的从业人员以及开发人员,而且没有人需要一次又一次地返回网站进行更改。非常感谢分享这个工具。

刚刚找到了一篇最有趣的信息。我第一次接触搜索引擎优化 (SEO) 时,它是一场灾难,因为它在其中使用了太多的 Python 方式来工作。这无关紧要,ContentKing 中使用的算法非常出色。我非常兴奋地注意到您解释的项目已记录在 GitHub 中。这是一个非常强大的工具,并且会毫不犹豫地克隆 SEODeploy。

Creative Commons 许可本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可获得许可。
© . All rights reserved.