先给结论:不要试图用一组“全站通用”的验收样例来覆盖同一组件,而应按“组件状态 × 页面上下文”构造一个最小对照矩阵,每个格子只验证一个可观察差异。缺少完整数据或后台权限时,仍可以用浏览器开发者工具、静态HTML副本和手工记录完成这个矩阵;但只能得出“在测过的页面和条件下表现不同”这一结论,不能推出哪个页面更受搜索引擎或推荐系统青睐。
同一组件在不同页面表现不同,常见原因有三类:组件接收到的数据不同、组件所处的布局容器不同、页面加载的其他脚本影响了它。验收样例必须先区分这三类,否则会把“数据差异”误判成“组件缺陷”。
可区分的原因与对应证据:
只有把原因归到其中一类,后面的验收样例才有针对性。若三类原因暂时无法区分,验收样例应写成“记录现象”,而不是“判定通过或失败”。
假设某站点有一个“相关文章”组件,它出现在文章详情页和专题聚合页。文章详情页显示5条,专题聚合页只显示2条,且样式错位。这是一个假设情境,用于说明方法,不代表任何真实站点。
第一步,固定变量。选择两个页面各一个URL,记录:组件在DOM中的位置、容器宽度、传入的数据条数、组件初始化时依赖的脚本文件名。这些信息不需要后台权限,用开发者工具的元素面板和网络面板即可抄录。
第二步,构造对照。把矩阵写成三列:页面、输入数据条数、容器宽度。行数不必多,但每一行只改变一个变量。例如:
如果第2行正常、第3行正常、第4行错位,那么差异来自容器宽度,而不是数据条数。如果第2行仍错位,而第1行正常,则差异来自页面上下文中的其他因素,需要继续缩小范围。
没有后台权限,不能改数据条数,也不能看模板配置。此时可执行的最小动作是:在浏览器中临时修改DOM,模拟不同输入。具体做法是,用开发者工具把组件容器内的子元素复制或删除,观察布局是否随之变化。
这个动作的结果会直接影响下一步:如果手工增删子元素后错位复现,说明组件样式没有适配可变条数,验收样例应增加“条数边界”这一维度;如果手工增删后一切正常,说明问题更可能出在数据进入组件之前的环节,下一步应去检查数据来源或渲染顺序,而不是继续调样式。
需要说明的是,手工修改DOM只影响当前浏览器会话,刷新即失效。它适合定位原因,不适合作为最终验收证据。最终验收仍应在可复现的构建或预览环境中执行。
每个样例至少记录四项:页面标识、组件状态(输入条数或属性值)、容器条件(宽度或布局位置)、观察到的结果(正常、错位、空白、报错)。结果只写现象,不写“好”或“坏”。
不应记录的内容包括:把某次表现归因为“搜索引擎更喜欢这个页面”,或把组件错位与排名变化直接挂钩。同一组件在不同页面的渲染差异,只能说明前端呈现条件不同;要判断是否影响抓取或索引,还需要看该组件内容是否在HTML源码中存在、是否被脚本延迟插入,而这已经超出组件验收本身。
如果组件内容完全由客户端脚本插入,而页面源码中没有对应文本,那么无论组件在浏览器中显示得多正常,都不能仅凭肉眼验收就推断它对搜索引擎可见。这是一个适用条件,不是对所有组件的通用判断。
一次定位完成后,把有效的对照行保留下来,删掉没有区分度的行。保留标准是:这一行能区分至少两种原因。例如“输入5条、容器720px”和“输入2条、容器720px”能区分数据与布局,就值得保留;“输入5条、容器720px”和“输入5条、容器720px”重复,就删掉。
固化成检查项时,每条写成“在什么页面条件下,改变哪个变量,预期观察到什么”。预期只写可观察的界面结果,不写抽象结论。执行时若结果与预期不符,先回到原因分类,而不是直接判定组件有缺陷。这样,即使没有完整数据或后台权限,也能用有限样例把“同一组件在不同页面表现不同”拆成可验证、可交接的具体条目,并明确哪些结论目前还不能下。