SEODeploy自动测试网站SEO问题可以帮助我们在网站部署之前识别SEO问题。作为一名SEO技术开发人员,我经常被要求协助网站迁移、新网站发布、分析实施和其他影响网站在线可见性和测量以管理风险的领域。许多公司每月经常性收入的很大一部分来自用户通过搜索引擎找到他们的产品和服务。虽然搜索引擎已经可以处理格式不正确的代码,但在开发过程中可能会出错,从而对搜索引擎为用户索引和显示页面的方式产生不利影响。我还尝试通过审查可能破坏SEO(搜索引擎优化)的各个阶段的问题来手动降低这种风险。我团队最终审核的结果决定了项目能否上线。但此过程通常效率低下,仅适用于有限数量的页面,并且极有可能出现人为错误。长期以来,该行业一直在寻找可用且值得信赖的方法来自动化此过程,同时让开发人员和SEO在必须测试的内容上有有意义的发言权。这非常重要,因为这些团队在开发冲刺期间经常有相互冲突的优先级,SEO需要推动变革,而开发人员需要控制回归和意外情况。常见的SEO破坏性问题我工作过的许多网站都有数万个页面,如果不是数百万的话。开发中的更改如何影响这么多页面,真是令人费解。在SEO世界中,一个非常小且看似微不足道的修改可能会导致整个站点范围内Google或其他搜索引擎显示您的页面的方式发生变化。必须在部署到生产环境之前处理此类错误。以下是我去年看到的几个例子。偶尔的noindex部署到生产环境后,我们使用了专门的第三方SEO监控工具ContentKing第一时间发现了这个问题。这个错误是隐蔽的,因为它在HTML中是不可见的,具体来说,它隐藏在服务器响应标头中,但它可以快速呈现为搜索不可见。HTTP/1.1200OKDate:TueMay25201021:12:42GMT[...]X-Robots-Tag:noindex[...]canonicallowercase错误地将整个网站的所有规范链接元素改为小写。此更改影响了近30,000个URL。修改前,所有URL大小写都是正常的(如URL-Path)。这是一个问题的原因是规范链接元素用于向Google提示网页的真实规范URL版本。此更改导致许多URL从Google的索引中删除并使用小写版本(/url-path)重新编入索引。影响范围从10%到15%不等,流量损失和未来数周的网络监控数据受到污染。网站有一个复杂而特殊的React实现。它有一个神奇的问题。origin.domain.comURL退化并显示为CDN服务器的来源。它会间歇性地在网站元数据(例如规范链接元素、URL和OpenGraph链接)中显示原始主机而不是CDN边缘主机。此问题存在于原始HTML和呈现的HTML中。此问题会影响搜索可见性和社交媒体上的共享质量。SEODeploy简介SEO通常使用差异测试工具来检测呈现的HTML和原始HTML之间的差异。差异测试是理想的,因为它避免了视觉测试的不确定性。您想要检查Google呈现您页面的方式的差异,而不是用户呈现您页面的方式。您想查看原始HTML的样子,而不是呈现的HTML,因为Google的呈现过程有两个独立的阶段。这促使我和我的同事创建了SEODeploy,这是一个“用于在部署管道中进行自动化SEO测试的Python库”。我们的使命:开发一种工具,允许开发人员提供URL路径并允许将这些URL部署到生产环境中。对环境和暂存环境的主机进行差异测试,特别是针对SEO相关数据的意外降级。SEODeploy的机制很简单:提供一个文本文件,每行包含URL路径,SEODeploy在这些路径上运行一系列模块,比较生产环境production和staging环境URL,并报告检测到的任何错误和更改。SEODeploy概述该工具及其模块可以使用YAML文件进行配置,可以根据预期的变化进行定制。SEODeploy输出的初始版本包括以下核心特性和概念:开源:我们坚信共享代码可以被大家批评、改进、扩展、共享和重用。模块化:Web开发中有许多不同的堆栈和边缘案例。SEODeploy工具在概念上很简单,因此使用模块化来控制复杂性。我们提供了两个内置模块和一个示例模块来简要说明基本结构。URL抽样:由于并非对所有URL都可行和有效,我们引入了一种随机抽样XML站点地图URL或ContentKing监控的URL的方法。灵活的差异检测:Web数据杂乱无章。无论被检测的数据类型是什么(ext、array或list、JSONobject或dictionary、integer、float等),差异检测函数都会尝试将这些数据转换为差异信息。自动化:您可以从命令行调用示例和运行方法,并且很容易将SEODeploy集成到现有管道中。虽然模块的核心功能非常简单,但是在设计上,SEODeploy的强大功能和复杂性都体现在了模块中。模块用于更困难的任务:获取、清理和组织登台和生产服务器上的数据以进行比较。HeadlessModuleHeadless模块适用于不想在从库中获取数据时为第三方服务付费的开发人员。它可以运行任何版本的Chrome,并从它所比较的??每组URL中提取渲染数据。Headless模块会提取以下核心数据进行对比:SEO内容,如标题、H1-H6、链接等性能指标通过从ChrometimerTimings和CDP(ChromeDevToolsProtocol)性能API中提取性能数据计算得出,包括CLS(CumulativeLayoutShift),这是GoogleWebCoreData最近发布的一种非常流行的CSS和JavaScript覆盖数据,从上面提到的CDP的coverageAPI中获取。本模块介绍了处理排练环境、网速预设等功能(为了让比对更规范),同时也介绍了一个处理在排练比对中。替换数据中暂存主机的方法。开发人员还可以轻松地扩展此模块以收集他们想要在每个页面上进行比较的任何其他数据。其他模块我们创建了一个示例模块,供开发人员参考使用框架创建自定义提取模块。另一个示例模块与ContentKing集成。ContentKing模块需要ContentKing订阅,而Headless可以在任何可以运行Chrome的机器上运行。待解决的问题我们计划扩展和增强工具库,但正在征求开发人员的反馈,了解哪些有效,哪些不符合他们的需求。我们正在解决的问题和项目是:动态时间戳可能会对某些比较元素(尤其是模式)产生误报。将测试数据保存到数据库,方便查看部署历史,与上次预览推送进行差异化测试。通过基于云的渲染提高提取的规模和速度。将测试覆盖率从目前的46%提高到99%以上。目前,我们依赖Poetry进行部署管理,但我们想发布一个PyPl库,以便可以使用pipinstall轻松安装。我们还在查看更多使用问题和相关数据。在GitHub上开始这个项目,我们在其中提供大多数功能的文档。我们希望您能克隆SEODeploy并试一试。我们的目标是使用此由技术SEO开发人员开发并经过开发人员和工程师验证的工具来支持开源社区。我们都看到了验证一个复杂的预测试问题需要多长时间,以及对大量URL进行微小更改的业务影响。我们认为这个库可以节省开发团队的时间并降低部署过程中的风险。如果您有任何疑问或想贡献代码,请查看项目的关于页面。
