所有文章
· URLsCheck

URL 健康检查清单:上线前必须验证的 50+ 个项目

面向开发、SEO 与运维团队的 URL 上线检查清单,覆盖状态码、重定向、canonical、hreflang、缓存、安全与持续监控。

URL 技术SEO 上线检查 运维 Web开发

页面在浏览器里“能打开”,并不代表 URL 已经健康。一个公开 URL 同时承担路由、缓存、搜索索引、分享、监控和安全边界等职责。上线前漏掉一个状态码或规范化细节,往往会在流量增长、域名迁移或多语言扩展后放大。

下面的清单适合新页面发布、网站改版、域名迁移、CDN 切换和大规模路由调整。建议把它转化为自动化发布门禁,而不是只在故障发生后手工检查。

一、可访问性与状态码

  • 首选 URL 返回 200,而不是 3xx、软 404 或错误页
  • 不存在 5xx、连接超时和 TLS 握手失败
  • 不需要登录的页面不会意外返回 401 或 403
  • 被删除资源返回 404 或 410,而不是带错误文案的 200
  • 限流响应使用 429,并在适当场景返回 Retry-After

状态码应与页面真实状态一致。监控系统、API 客户端和搜索引擎无法可靠理解一个“状态 200、正文却写着页面不存在”的响应。

完整状态码说明可查看HTTP 状态码指南

二、URL 规范化

  • HTTP 统一跳转到 HTTPS
  • www 与非 www 只保留一个首选版本
  • 尾斜杠策略全站一致
  • 路径大小写规则明确
  • 默认首页文件不会产生 /index.html 等重复入口
  • 不必要的追踪参数不会形成独立规范页面
  • percent-encoding 不会让同一路径出现多个写法

所有非首选版本都应直接跳到最终地址,不要依赖多级链路逐步修正协议、域名和路径。

三、重定向

  • 永久迁移使用 301 或 308
  • 临时活动和维护流程使用 302 或 307
  • 每个旧地址最多一次跳到最终页面
  • 不存在循环或自重定向
  • 查询参数按业务规则保留,而不是全部丢弃或无限追加
  • 桌面、移动端和爬虫身份不会收到冲突的目标

运行 URL 重定向检查时,应同时记录原始 URL、每一跳耗时、状态码和最终地址。复杂问题可参考重定向链排查指南

四、canonical 与索引控制

  • 可索引页面包含唯一、绝对地址的 canonical
  • canonical 指向返回 200 的页面
  • canonical 与重定向、站内链接、sitemap 使用同一 URL
  • 不应索引的页面使用 noindex
  • robots.txt 没有阻止搜索引擎读取需要识别 noindex 或 canonical 的页面
  • 分页、筛选和参数页有明确的索引策略

canonical 是规范化信号,不是重定向,也不是访问控制。若两个版本长期同时返回 200、互相矛盾地 self-canonical,搜索引擎仍需自行判断首选地址。

五、多语言与 hreflang

  • <html lang> 与正文语言一致
  • hreflang 使用有效的 BCP 47 标签,例如 zh-CNen-US
  • 每个语言版本包含自引用和双向引用
  • x-default 指向默认语言或语言选择页
  • alternate 地址真实存在且允许索引
  • canonical 留在当前语言版本,而不是统一指向英文页

只翻译导航和按钮、正文仍大量使用另一种语言,通常不能形成高质量的本地化页面。日期、货币、示例和搜索意图也应随语言市场调整。

六、响应头、缓存与内容协商

  • HTML 返回正确的 Content-Type 与字符集
  • 静态资源有合理的长期缓存和版本指纹
  • HTML 缓存不会把登录态或地区内容串给其他用户
  • 使用内容协商时正确设置 Vary
  • CDN 缓存键只忽略经过确认的纯追踪参数
  • 安全响应头不会阻止页面关键资源或嵌入场景

缓存问题经常表现为“本地正常、线上偶发”或“某个地区才出现”。检查时应记录 Cache-ControlAgeVary、CDN 命中状态和代理链路。

七、页面元数据与分享

  • 每页有独立、准确的 title 和 description
  • 页面只有一个清晰的主标题
  • Open Graph 和 Twitter Card 图片返回 200
  • 分享图片尺寸、文字安全区和文件大小适合社交平台
  • 结构化数据描述真实存在的内容或功能
  • JSON-LD 中的 URL、日期、作者和图片与页面一致

不要声明网站并不存在的搜索、评分、商品或 FAQ 功能。结构化数据的目标是减少机器理解歧义,而不是制造额外关键词。

八、内容与内部链接

  • 页面明确回答目标用户的问题
  • 关键结论不是只存在于图片或客户端脚本中
  • 内部链接使用最终规范 URL
  • 锚文本能够解释目标内容
  • 没有指向 404、重定向或过期活动页的链接
  • sitemap 只包含允许索引且返回 200 的规范页面

工具页尤其需要解释输入、输出、限制和使用场景。只有输入框而缺少可抓取正文,很难覆盖更具体的搜索意图。

九、安全与隐私

  • URL 输入会拒绝内网、localhost 和非 HTTP 协议
  • 每次重定向后的新目标都会重新执行 SSRF 校验
  • 不在日志中保存密码重置 token、OAuth code 等敏感参数
  • 外部请求设置超时、响应体上限和最大跳数
  • 分享报告不会泄露 Cookie、认证头或个人数据
  • 用户生成页面具有正确的索引和过期策略

URL 检查工具本身也是服务端请求能力。仅校验初始地址不够,DNS 解析结果与后续重定向目标同样需要进入安全边界。

十、监控与发布门禁

建议在 CI、预发布和生产环境分别执行:

阶段自动检查
CI路由生成、内部链接、title、canonical、hreflang、结构化数据
预发布状态码、重定向、资源 404、robots、sitemap
生产发布后多地区可用性、TLS、CDN 缓存、核心 URL 抽样
持续监控5xx、404、重定向变化、证书到期、响应时间

对大型站点,不必每次扫描所有 URL。可以组合三类样本:高流量页面、每种模板的代表页面、最近发生变化的页面。域名迁移和路由重构则应增加全量旧 URL 映射检查。

问题如何分级?

级别示例发布决策
P0 阻断证书错误、全站 5xx、敏感数据泄露、重定向到恶意域名立即停止或回滚
P1 高优先级canonical 冲突、大量 404、循环跳转、私有内容被缓存修复后才能发布
P2 中优先级多一跳、部分 description 缺失、低流量死链明确负责人和期限
P3 优化分享图细节、非关键内容增强、轻微性能改进进入后续迭代

分级的价值是统一发布决策,而不是弱化问题。每条豁免都应记录影响范围、负责人、截止日期和回滚条件。

一个最小自动化检查器

下面的 TypeScript 示例手动跟随重定向,并检测循环与最大跳数。生产版本还必须加入 DNS 与 SSRF 防护、超时、响应体上限和允许域名策略。

async function inspectUrl(input: string) {
  const visited = new Set<string>();
  const hops: Array<{ url: string; status: number }> = [];
  let current = input;

  for (let index = 0; index < 10; index += 1) {
    if (visited.has(current)) {
      throw new Error(`Redirect loop detected at ${current}`);
    }
    visited.add(current);

    const response = await fetch(current, {
      method: "GET",
      redirect: "manual",
      signal: AbortSignal.timeout(10_000),
    });
    hops.push({ url: current, status: response.status });

    const location = response.headers.get("location");
    if (!location || response.status < 300 || response.status >= 400) {
      return { finalUrl: current, hops };
    }

    current = new URL(location, current).href;
  }

  throw new Error("Too many redirects");
}

这个示例故意不直接用于生产,因为 URL 检查器会代表服务器发起外部请求。实现时必须在初始 URL、DNS 解析结果和每个重定向目标上重复执行安全校验。

域名迁移的专项验证矩阵

普通页面发布抽样即可,域名迁移则应覆盖不同入口组合:

维度样本
协议HTTP、HTTPS
主机名www、非 www、历史子域名
路径首页、栏目、详情、深层路径、404
参数无参数、营销参数、功能参数、编码参数
身份桌面、移动端、爬虫、API 客户端
地区核心用户地区与不同 CDN 节点

每个组合都应验证首跳、最终 URL、状态码、内容主题和耗时。只抽查首页,无法证明数万条历史深层链接已经正确迁移。

明确团队所有权

URL 健康跨越多个团队,最容易出现“人人相关、无人负责”。建议明确:

  • 开发负责路由、状态码、应用重定向和测试;
  • 运维负责 DNS、TLS、CDN、代理和可用性监控;
  • SEO 负责 canonical、hreflang、sitemap 和迁移映射;
  • 安全负责 SSRF、敏感参数、外部请求和事件响应;
  • 内容团队负责页面主题、内链和过期内容处置;
  • 数据团队负责追踪参数、归因和日志生命周期。

所有权并不意味着单独决策。涉及域名、索引、缓存和隐私的变更,应在设计阶段共同评审,而不是上线前最后一天互相补洞。

发布验收标准

一个适合进入生产的公开 URL,至少应满足:

  1. 唯一规范版本返回 200;
  2. 其他入口一次 301 到规范版本;
  3. canonical、hreflang、sitemap 与内部链接相互一致;
  4. 桌面、移动端和爬虫获得预期内容;
  5. 页面元数据和分享图片有效;
  6. 无敏感参数泄露和明显 SSRF 风险;
  7. 发布后有持续监控与回滚方案。

常见问题

每次发布都需要检查全部 30 项吗?

不一定。首次上线、域名迁移和路由改版应完整执行;普通内容更新可以根据变更范围选择子集,但核心状态码、canonical、内部链接和构建检查仍应自动运行。

Lighthouse 可以替代 URL 检查吗?

不能。Lighthouse 更关注单个页面的性能、可访问性和最佳实践,无法完整覆盖多跳重定向、不同 User-Agent、批量状态码和 URL 规范化问题。

只检查首页够吗?

远远不够。首页通常配置最完善,真正的问题更容易出现在文章详情、筛选页、旧路径、多语言页和用户生成页面。