6.7 KiB
SEO 检测指南
一、本地快速检测
1. 只测爬虫识别逻辑(不启动服务)
cd server
node test-crawler-detection.js
会跑多组 User-Agent,看是否把百度/Google 等识别为爬虫、普通浏览器识别为非爬虫。
2. 端到端检测(需先启动服务)
步骤 1:启动 SEO 服务器
cd server
npm install
npm run start
步骤 2:另开一个终端,运行检测
cd server
npm run test
或指定地址:
# Windows PowerShell
$env:SEO_TEST_URL="http://localhost:3000"; node test-seo.js
# 若部署在线上,可测线上
$env:SEO_TEST_URL="https://www.xingfucha.cn"; node test-seo.js
脚本会:
- 用 百度爬虫 UA 请求首页、代理页、帮助中心、个人查询等
- 检查响应里是否有:
<title>、<meta name="description">、<meta name="keywords">、<link rel="canonical"> - 用 普通浏览器 UA 再请求一遍,确认仍是 200(SPA 正常)
全部通过即说明:爬虫拿到的是 SEO 模板,普通用户拿到的是 SPA。
二、用 curl 手动检测
在服务器已启动的前提下,在终端执行:
爬虫应拿到“带 TDK 的 HTML”
# 模拟百度爬虫请求首页
curl -s -A "Baiduspider/2.0" http://localhost:3000/ | findstr /i "title description keywords canonical"
应能看到包含「幸福查」的 title,以及 description、keywords、canonical 等标签。
# 看完整 HTML 前几行(含 <head>)
curl -s -A "Baiduspider/2.0" http://localhost:3000/ | more
普通用户应拿到 SPA(一般是带 script 的 index.html)
# 不带爬虫 UA,相当于普通浏览器
curl -s http://localhost:3000/ | findstr /i "script root app"
通常会有 id="app" 或大量 <script>,说明是前端 SPA。
看响应头(若用了 Node 中间件)
curl -I -A "Baiduspider/2.0" http://localhost:3000/
若返回里有 X-SEOMiddleware: prerendered,说明走的是 SEO 中间件、返回的是预渲染 HTML。
三、用浏览器“伪装”爬虫(可选)
- 打开 Chrome DevTools (F12) → Network。
- 右键列表头 → 勾选 “User-Agent”(或先在 More tools 里加自定义请求头)。
- 使用扩展(如 “User-Agent Switcher”)把 UA 改成:
Baiduspider/2.0
- 刷新页面,在 Elements 里看
<head>:- 应看到正确的
<title>、<meta name="description">、<meta name="keywords">等。
- 应看到正确的
注意:若前端是 SPA,同一 URL 在浏览器里仍可能先加载 SPA 再改 title;用 curl 用爬虫 UA 请求,更能代表爬虫真实看到的内容。
四、线上/生产环境检测
1. 用本机脚本测线上
cd server
$env:SEO_TEST_URL="https://www.xingfucha.cn"; node test-seo.js
(Linux/Mac 用 export SEO_TEST_URL=https://www.xingfucha.cn 再运行 node test-seo.js。)
2. 用 curl 测线上
curl -s -A "Baiduspider/2.0" https://www.xingfucha.cn/ | findstr /i "title description"
curl -I -A "Baiduspider/2.0" https://www.xingfucha.cn/
3. 使用搜索引擎工具
- 百度: 百度搜索资源平台 → 抓取诊断 / 抓取频次,看抓取是否成功。
- Google: Google Search Console → URL 检查,输入首页或内页 URL,查看“已编入索引”的页面快照。
五、检测结果对照
| 检测项 | 预期结果 |
|---|---|
| 爬虫 UA 请求 | 返回 200,HTML 内含完整 title、description、keywords、canonical |
| 爬虫响应头 | 若用 Node 中间件,有 X-SEOMiddleware: prerendered |
| 普通浏览器请求 | 返回 200,为 SPA 的 index.html(有 #app 或大量 script) |
| test-crawler-detection.js | 全部用例通过 |
| test-seo.js | 全部路由“爬虫拿到 SEO 模板 + 普通用户正常” |
若某一项不符合,按下面排查:
- 爬虫也拿到 SPA:检查 Nginx/Node 里爬虫判断和 SEO 模板路径、路由映射是否正确。
- 普通用户报错或空白:检查 SPA 静态资源和 fallback 的 index.html 是否正常。
- 标题/描述不对:检查
public/seo-templates/下对应模板是否已重新生成(node generate-seo-templates.cjs)。
六、爬虫请求返回 404 时排查
当执行 curl -s -A "Baiduspider/2.0" https://www.xingfucha.cn/ 得到 404 Not Found 时,按下面顺序在服务器上检查。
1. 确认已接入 SEO 配置
- 若你还没在宝塔里替换/合并过
server/nginx-www.xingfucha.cn.conf里的 SEO 相关配置,爬虫仍会走原来的location /,不会返回 SEO 模板。 - 操作:在宝塔 → 网站 → www.xingfucha.cn → 配置文件,确认存在:
- 上面的
set $is_crawler、set $seo_file以及一堆if ($http_user_agent ...)、if ($uri = '/') ...; location ~ ^/__seo__/(.+)$ { ... internal; };- 在
location /里有if ($is_crawler = 1) { rewrite ^ /__seo__/$seo_file break; }。
- 上面的
- 修改后执行
nginx -t,再重载 Nginx。
2. 确认 SEO 模板目录和文件存在
404 常见原因是 Nginx 去读 SEO 模板时路径不对或文件不存在。
在服务器上执行(路径按你实际部署的来,一般为宝塔默认):
# Linux 服务器上
ls -la /www/wwwroot/www.xingfucha.cn/seo-templates/
cat /www/wwwroot/www.xingfucha.cn/seo-templates/index.html | head -5
- 若
seo-templates不存在或没有index.html,需要把本地的public/seo-templates/整个目录上传到服务器的/www/wwwroot/www.xingfucha.cn/seo-templates/(与配置里的alias路径一致)。 - 若目录名或路径和 Nginx 里
alias不一致(例如多写了public或少了一层目录),改成与配置一致或改配置里的alias。
3. 看 Nginx 错误日志
在服务器上:
tail -20 /www/wwwlogs/www.xingfucha.cn.error.log
再发一次爬虫请求,看是否有 open() ".../seo-templates/xxx.html" failed (2: No such file or directory) 之类,根据路径修正目录或配置。
4. 快速对照
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 爬虫返回 404 | 未接入 SEO 配置 | 按 1 合并/替换 Nginx 配置并重载 |
| 爬虫返回 404 | 模板目录或文件不存在 | 按 2 上传/创建 seo-templates 并保证有 index.html |
| 爬虫返回 404 | alias 路径错误 | 对照 error.log 修正 alias 或目录结构 |
| 爬虫返回 200 但仍是 SPA | 爬虫未命中 SEO 逻辑 | 检查 $is_crawler、$seo_file 与 rewrite 是否生效 |
按上述步骤即可完成从本地到线上的 SEO 检测。