如何在Node.js中检测网站的自定义404页面
检测网站自定义404页面(Node.js实现)
自定义404页面的核心特点是HTTP状态码可能返回200(而非标准404),但页面内容是网站专门设计的“页面不存在”提示,因此不能仅靠状态码判断,需要结合内容特征检测。以下是具体实现方案:
核心检测维度
- 关键词匹配:页面中是否包含“页面不存在”“Page Not Found”“404”等明确的404提示文本
- Meta标签检查:多数自定义404会添加
<meta name="robots" content="noindex">,避免搜索引擎收录无效页面 - 页面结构差异:对比可疑页面与网站正常页面的结构(如是否缺失导航栏、存在特定404专属元素ID/class)
- 内容相似度:可疑页面与正常页面的文本/HTML长度差异过大(通常超过30%)
Node.js 实现代码
依赖安装
npm install node-fetch jsdom
检测函数
const fetch = require('node-fetch'); const { JSDOM } = require('jsdom'); /** * 检测目标页面是否为自定义404页面 * @param {string} targetUrl - 待检测的可疑页面URL * @param {string} [normalPageUrl] - 网站正常页面的URL(用于对比内容差异) * @returns {Promise<boolean>} 是否为自定义404 */ async function detectCustom404(targetUrl, normalPageUrl) { // 获取目标页面内容 const res = await fetch(targetUrl); const html = await res.text(); const dom = new JSDOM(html); const doc = dom.window.document; // 1. 检查404关键词 const has404Keywords = /(页面不存在|Page Not Found|404 Not Found|找不到页面)/i.test(html); // 2. 检查robots meta标签是否为noindex const robotsMeta = doc.querySelector('meta[name="robots"]')?.getAttribute('content'); const isNoIndex = robotsMeta?.toLowerCase().includes('noindex'); // 3. 对比与正常页面的内容长度差异(可选) let hasContentDiff = false; if (normalPageUrl) { const normalRes = await fetch(normalPageUrl); const normalHtml = await normalRes.text(); const lengthRatio = Math.abs(html.length - normalHtml.length) / normalHtml.length; hasContentDiff = lengthRatio > 0.3; // 差异超过30%判定为异常 } // 4. 检查是否存在404专属元素 const has404Element = !!doc.getElementById('404-page') || !!doc.querySelector('.page-404'); // 综合判定:满足任一核心条件则认为是自定义404 return has404Keywords || (isNoIndex && hasContentDiff) || has404Element; } // 使用示例 detectCustom404('https://your-site.com/nonexistent-path', 'https://your-site.com') .then(isCustom404 => console.log('是否为自定义404:', isCustom404)) .catch(err => console.error('检测失败:', err));
优化建议
- 根据目标网站调整关键词和元素选择器(比如GitHub的自定义404可匹配
.container-404元素) - 若无法获取正常页面URL,可跳过内容差异检查,仅依赖关键词和Meta标签
- 对于部分返回非200状态码的自定义404(如403、404),可先判断状态码,再结合内容验证
内容的提问来源于stack exchange,提问作者AbhiDev
相关产品推荐
相关产品推荐

