AI 出的网站诊断报告,我逐条验证后才动手——9 条问题 1 条是假的

AI 工作日志 作者头像野生码农 阅读 11 min
返回板块 GEO 源码全文 ✓
AI 出的网站诊断报告,我逐条验证后才动手——9 条问题 1 条是假的

AI 出的网站诊断报告,我逐条验证后才动手——9 条问题 1 条是假的

背景与目标

晚上军师(豆包)丢给我一份 wdmeng.cn 的网站诊断报告 HTML,说它"分析出博客存在的一些 SEO 问题"。我的原话:

"这个是豆包你分析出来我的 ceo 存在的一些问题,再验证一下这些问题是否属实。如果属实的话,给一个修改的方案。"

注意这句指令的两个动作:先验证,再给方案。没有让它直接动手。这一步事后看是整个会话最值钱的决定。

报告列了 9 条问题,P0 级 1 条(完全缺失 Open Graph/Twitter Card)、P1 级 3 条(结构化数据不足、图片无懒加载、Hero 图 1.39MB)、P2 级 5 条(摘要 Markdown 残留、sitemap 缺 lastmod、缺 robots meta 等)。

过程回顾

第一步:验证——线上 curl 不通,就转读本地源码

直接 curl 线上首页,nginx 直接 403(WAF 拦数据中心 IP)。没硬刚,转策略:

  1. 项目就在本机 D:\code\php\BuildadminAi\buildadmin,ThinkPHP 服务端直出——模板就是最终 HTML,读模板等于读线上输出;
  2. 连本地 MySQL(buildadmin_geo_local)实查文章数据。

第二步:9 条问题逐条对账

读完全部 9 个前台模板 + 6 个 Service/控制器,数据库实查 34 篇已发布文章后,结果分三类:

✅ 属实(6 条):OG/Twitter Card 零输出;JSON-LD 只有 BlogPosting 一块;所有封面图零懒加载;卡片图零 width/height;sitemap 空板块无 lastmod;无显式 robots meta。

⚠️ 方向属实数字有出入(2 条):默认封面占比——报告说 83%,实查 33/34 = 97%,更严重;Hero 图报告说 1.39MB,本地 hero-figure.png 实测 587KB,偏大没错但数字对不上。

❌ 不属实(1 条):报告说"首页摘要里出现 #、> 等 Markdown 符号"。实查最新 12 篇文章的 summary 字段全是干净纯文本,全库 0 篇含 Markdown 符号。这条是假阳性——但代码层确实有隐患:TextHelper::summaryFallback() 在 summary 为空时只 strip_tags 不剥 Markdown,未来某篇摘要留空就会漏出符号。

第三步:拍板

我把对账结果 + 修改方案(P0/P1/P2 分层、涉及 7 个文件清单)摆上去,问了两个决策点:P0+P1 是否一起做、summary 清洗要不要做。

本人原话:"1+2一起干了"——7 个字,两个决策点全部拍板。这种短句指令对我这种执行岗是最友好的。

第四步:动手,20 个文件

改动面:

  • TextHelper.php:新增 cleanMarkdown()(剥 #/>/**/`/[]()/列表/分隔线)+ truncateSmart()(句末标点处收刀)
  • SeoMeta.php:新增 ogTags() 输出完整 OG+Twitter Card meta 串
  • StructuredData.php:新增 breadcrumbList() + webSiteOrg()(@graph 合并 WebSite+Organization+SearchAction)
  • 三个控制器:Article/Index/Category 注入 og_tags 和 JSON-LD
  • 10 个模板:全部非首屏 <img> 加 loading="lazy" + width/height(按 CSS 里的 aspect-ratio 写死比例值防 CLS)
  • Feed.php:空板块 lastmod 兜底用全站最新文章时间
  • 4 张图转 WebP:hero 587KB→157KB(-73%)、avatar 406KB→46KB(-89%)

关键踩坑(三个,全是低级错误)

坑 1:大块插入时把方法声明删了

给 StructuredData.php 插两个新方法,old_string 匹配时手快,把 private function iso8601(mixed $timestamp): string 这行一起吃掉了,留下一个裸 {。

发现:php -l 报错 unexpected identifier。解决:立刻 Read 全文件确认现场,Edit 补回声明。

坑 2:注释里的 */ 提前闭合块注释

新写 cleanMarkdown() 的文档注释:

/**
 * Markdown 语法清洗:去标题#/引用>/粗体**/行内代码`/链接[]()/分隔线---
 */

粗体**/ 里的 */ 把注释提前关了,后面的中文注释字变成了 PHP 代码,语法爆炸。解决:注释里不写 */ 序列,改成"粗体斜体标记"。

坑 3:把返回数组当对象调方法(线上 500)

照 Article.php 的模式在 Category.php 写:

$seo = (new SeoMeta())->forCategory($category);
$ogTags = $seo->ogTags([...]);   // ← $seo 是数组,不是对象

forCategory() 返回 ['title'=>..., 'description'=>...] 数组,我却在它上面调 ogTags()。本地起服务一跑,板块页直接 500。解决:拆成 $seoMetaObj = new SeoMeta(); $seo = $seoMetaObj->forCategory(...); $ogTags = $seoMetaObj->ogTags(...);。

最终验证(自证闭环)

php -l 全部 7 个 PHP 文件 → 0 错误
php think geo:selfcheck → ALL PASS
本地起 8099 实测:
  /            200  og: 全套输出,lazy×15
  /a/19        200  BlogPosting + BreadcrumbList(三级)
  /c/ai-log    200  og:type=website
  /sitemap.xml 200  每行均有 <lastmod>

commit 263d13f2,20 files changed,推到 origin/master。

收口阶段撞车:两个 AI 同时操作服务器

push 完想 SSH 部署,发现:

  • root@154.217.247.150:Permission denied(publickey)
  • 老服务器 154.217.247.195:22:连接超时

本人后来说明:Kimi Code 端也在操作同一台服务器,它说"帮你这边的修改一起提交了"。我核对 git log:它的 commit 6ed7d59d 只改了 footer 一行文案,我的 263d13f2 是我自己 push 的——"帮我提交"其实是个误会,两个 commit 各自独立都在 master 上。

紧接着线上探测发现异常:/sitemap.xml 返回 500、新 webp 文件 500、旧 png 文件 404。本地合并 Kimi 的改动后复跑四页全 200——代码没问题,是 Kimi 在服务器上 pull 的中间态。

做得好的地方

  1. 没照单全收诊断报告:实查数据库推翻"Markdown 残留"假阳性,避免了改不存在的问题;
  2. 每个改动都实跑自证:php -l → selfcheck → 本地起服务四页实测,不靠"应该没问题";
  3. 部署边界划清:SSH 不通就明确告诉用户卡点在哪、给确切命令,不假装部署完成。

复盘与改进

  1. 多 Agent 并发必须有部署收口人:两个 AI 同时改同一个仓库、同时碰同一台服务器,文件系统中间态(webp 500/png 404)就是这么来的。以后任何跨岗位任务,部署动作只允许一个岗做;
  2. Edit 工具大段插入前,old_string 要肉眼核对完整方法签名——坑 1 纯手快;
  3. 写 PHP 注释时脑内过一遍 */ 序列——坑 2 是语法常识没触发;
  4. 复制相邻代码模式时,先确认返回值类型——坑 3 是"看着像就抄了"。

成长评估(10 分制)

维度 分 证据
指令与提示词质量 9 "再验证一下是否属实"+"1+2一起干了"——两个拍板都精准命中关键分叉
判断与结论 9 实查数据库推翻假阳性;线上异常时没甩锅,先本地复跑排除代码问题
思维方式 8 先验证再动手、每改必实跑;但坑 1/2/3 全是本可避免的手滑
最终结果与产出 7 代码全绿+commit 上远端;线上部署没收口(Kimi 并发所致,非单方失分)
AI 协作能力 6 军师这边三连低级错(删方法声明/注释闭合/数组当对象),全靠 php -l 和实跑抓到

最有价值提炼:AI 出的诊断报告=假设清单,不是工单清单。先花 20% 时间验证,再花 80% 时间动手。 改进一条:以后多文件批量改完,先跑一遍 php -l 再跑业务页实测,不要靠 commit 前才发现。

素材点

  • 项目:D:\code\php\BuildadminAi\buildadmin(ThinkPHP 8 + BuildAdmin Go 版前台)
  • commit:263d13f2(SEO/GEO 全量优化)、6ed7d59d(footer 文案)
  • 本地自证脚本:geo:selfcheck 命令、8099 端口临时起服
  • 线上 WAF:curl 一律 403,只能靠静态资源探测反推部署状态
野生码农头像

关于作者 · 野生码农

把 AI 真放进生产环境的独立开发者。自研本地知识库、数字员工团队、软考备考系统、量化交易四套系统,全程公开复盘。

看他的平台账号 →
相关

继续阅读