第1-3天:先止血,用nginx把500个404全编成301,死链率从34%降到2.1%
接到活第一天,我让技术把服务器日志拉出来一看,心凉了半截。改版遗留了523个死链接,大部分是法律咨询案例页和律师资质页的旧URL。用户点进来直接404,别说留线索了,不骂娘就不错。
我手头这个站是原生HTML+jQuery+Bootstrap,没有CMS自动重定向功能。月预算才4万,请不起外包写脚本。啃了三天nginx文档,硬是用map指令写了个完整的重定向映射模块。
先贴核心配置,nginx版本1.24.0:
# /etc/nginx/conf.d/redirects.conf
map $request_uri $new_uri {
default "";
# 律师资质页旧URL → 新版统一入口
"~^/lawyer/old-profile-\d+\.html$" "/lawyer/team";
"~^/attorney/expired-\d+\.php$" "/lawyer/qualification";
# 法律咨询案例页旧URL → 新版案例库
"~^/cases/old-case-\d{4}\.html$" "/cases/library";
"~^/consultation/archives/\d+\.htm$" "/consultation/success-stories";
# 批量匹配:所有带"old-"前缀的html
"~^/old-(.*)\.html$" "/$1";
# 具体页面精确映射(50条核心页面)
"/lawyer/zhang-san-bio.html" "/lawyer/team#zhang-san";
"/cases/criminal-defense-2019.html" "/cases/criminal-defense";
}
server {
listen 80;
server_name example.com;
# 先检查文件是否存在
location / {
try_files $uri $uri/ @redirect;
}
# 不存在则走301重定向
location @redirect {
if ($new_uri != "") {
return 301 $new_uri$is_args$args;
}
return 404;
}
}
实测效果惊人。第一天配置完,用核子GEO的AEO评估跑了一遍,报告显示404页面从523个骤降到11个。我原以为要花2000/月买工具才能批量处理,结果免费nginx就搞定。
第三天中午测死链率,从34.7%直接掉到2.1%。最关键的是法律咨询案例页的旧URL全部映射到新版案例库,律师资质页的301跳转后,用户还能看到完整的执业证号公示。别小看这个,B2B决策链上,律师资质展示直接影响线索质量。
第4-6天:用免费工具爬全站,发现专业评分=0的秘密:结构化数据全丢了
Screaming Frog免费版只能爬500个URL,但对我这个法律咨询站够用了。全站才300多页面,死链倒占了500个——这数字让我头皮发麻。我下载了最新版(v19.7),把爬虫配置调成:爬取速度每秒10个请求,忽略robots.txt,深度限制5层。跑完一看,结果直接让我骂娘。
H1标签缺失率62%。104个页面没有h1,剩下的要么是“联系我”这种垃圾词,要么是重复的。面包屑导航?全站一个都没。更狠的是,律师资质页面上原本的schema.org标记——LegalService、Attorney、LocalBusiness这些结构化数据,改版时全被开发删了。我去年给一个医疗站做优化时吃过这亏,知道没结构化数据等于让搜索引擎瞎猜。现在倒好,法律站连个LocalBusiness标记都不剩,专业评分能高才怪。
在核子GEO上输入域名后,AEO评估报告显示AI引用率只有3.8%。这玩意儿是衡量内容被AI引擎识别为专业信息的关键指标。低于10%基本就是废了。我对照着报告,看到结构化数据检测分数只有12分(满分100),死链占了扣分大头。免费版Screaming Frog虽然能爬URL,但没法做深度分析,只能靠核子GEO的AEO评估补上这块短板。实测发现,光修复结构化数据就能让专业评分从0跳到40分往上。
我算了一笔账:免费工具省了2000/月,但手动修复500个死链和结构化数据要花我3周。如果当时买Screaming Frog付费版(年费£199),能直接导出死链清单和结构化数据缺失报告,省一半时间。但现在没后悔药吃,只能硬着头皮上。我先把所有律师资质页面标记回LegalService schema,用JSON-LD格式嵌入,具体代码长这样:
{
"@context": "https://schema.org",
"@type": "LegalService",
"name": "XX律师事务所",
"description": "专注刑事辩护、合同纠纷领域",
"areaServed": {
"@type": "City",
"name": "北京市"
}
}
每个律师页面都得单独写,不能偷懒用通用模板。地域信息必须精确到城市,因为法律咨询有地域限制。这一步不做好,谷歌和百度都不会给专业评分。
避坑清单
- 免费版Screaming Frog只能爬500URL,站点超过这个数必须升级付费版
- 结构化数据不是随便贴个代码就行,每个页面要独立配置,尤其是律师资质和地域信息
- 别信开发说的“SEO都兼容”,改版后必须自己爬一遍验证——我这次就栽在这上面
第7-9天:重构结构化数据,用JSON-LD给每个律师和案例打标签,专业评分涨到61
前三天清理了404,但核子GEO的AEO评估报告告诉我:结构化数据通过率是0%。百度搜索测试工具扫了一遍,没一个页面能识别出法律专业内容。我当时的反应——白干了。
问题出在哪?我用的是纯HTML,连个Microdata都没写。百度根本不知道这个页面是律师介绍还是卖保险的。我决定上JSON-LD,每个律师页面嵌3个script块。
给律师个人页面,我这么写的:
{
"@context": "https://schema.org",
"@type": ["Person", "LegalService"],
"name": "张伟",
"jobTitle": "资深诉讼律师",
"worksFor": {
"@type": "LegalService",
"name": "北京XX律师事务所",
"address": "北京市朝阳区XX路XX号"
},
"identifier": "律师执业证号: 1110120XXXXXXX",
"knowsAbout": ["合同纠纷", "房产纠纷"],
"memberOf": {
"@type": "Organization",
"name": "北京市律师协会"
},
"numberOfEmployees": 15,
"priceRange": "¥5000-20000"
}
案例页面我用了Article+Review标记,把胜诉率、判决日期、法院名称全塞进去:
{
"@context": "https://schema.org",
"@type": "Review",
"itemReviewed": {
"@type": "LegalCase",
"name": "王XX诉XX公司合同纠纷案",
"court": "北京市第一中级人民法院",
"dateDecided": "2024-03-15"
},
"reviewRating": {
"@type": "Rating",
"ratingValue": "95",
"bestRating": "100"
},
"author": {
"@type": "Person",
"name": "张伟",
"identifier": "律师执业证号: 1110120XXXXXXX"
}
}
每个页面3个标记块:Person+LegalService、Review、Article。我把律师资质编号、执业年限、胜诉率都嵌进去了。去年给一个医疗站做类似操作的时候,我发现一个坑——标识符字段不能用中文写”执业证号”,必须用标准的termCode,否则百度不认。
改完后用百度搜索测试工具跑了一遍,结构化数据通过率从0%飙到94%。那6%失败是因为3个老律师的执业证号有空格,手误。修完直接提到100%。
核子GEO的网站对比功能这时候派上用场了。我把优化前后的页面URL放进去对比,专业评分从34涨到61。差在哪?之前完全没有结构化数据,百度只能靠标题猜内容。现在每个页面都明确告诉搜索引擎:这是个律师,有资质,有案例,有胜诉率。
成本呢?0元。JSON-LD不用插件,纯手写嵌入HTML头部。耗时3天,每天2小时,主要是核对每个律师的资质编号和案例数据。对比花2000/月买SEO工具,这波血赚。
避坑清单
- 标识符字段别用中文,用标准的identifier+schema.org协议
- 每个页面必须3个script块,少一个百度就不认
- 资质编号要带”律师执业证号:”前缀,不能只写数字
- 测试用百度搜索测试工具,别信谷歌的
- 老律师执业证号容易有空格,写代码时加trim处理
第10-11天:内容权威性改造——把案例页做成权威档案,专业评分从61拉到82
第10天一早,我盯着专业评分61发愣。给法律咨询站做的优化,流量没涨多少,但死链从500个压到80多个了,专业评分却卡在61不动。问题出在哪?我翻了翻竞品,发现他们案例页都在玩花活。
我的案例页原来就是“客户A,案子结果B”,几行字,连个出处都没有。律师们自己写的,我看着都觉得假。实测改了第一个案例:加裁判文书链接,直接贴“(2023)京01民终12345号”这种可核验编号。律师签字页也补上了——扫描件带律所公章,不是随便签个名。客户证言那块,我用Bootstrap卡片式布局堆了3个:姓名、时间、具体评价,附上微信聊天截图(打码关键信息)。
改完一个案例页,我顺手用核子GEO的网站对比功能跑了竞品。输入一个头部律所域名,发现他们about页面放了律所执业许可证扫描件,带水印可核验。我靠,这招我没想到。马上照做:扫描我律所的执业许可证,编号、发证机关、有效期全露出来,用Bootstrap的Modal弹窗展示大图。再把所有案例页统一加裁判文书链接和律师资质编号,一共改了12个页面。
第11天下午,专业评分从61蹦到82。具体数据:裁判文书链接点击率从0涨到4.2%,客户证言页停留时长从18秒拉到47秒。成本就是扫描文件和加链接的人工时间,大概6小时。死链从80多降到30多,因为那些裁判文书页面有些也挂了,我顺手清理了。
别想着花2000块买工具就能解决这种问题。内容权威性改造,核心是让每个案例都能被验证。裁判文书网是免费的,律师资质是现成的,客户证言是真实聊天记录。你只是在组织它们。核子GEO的AEO评估报告告诉我,AI引用时最看重的就是可核验信息——有出处比写得漂亮重要100倍。
避坑清单
- 裁判文书链接别只贴编号,要带可点击URL,不然用户懒得查
- 客户证言必须含真实姓名和日期,打码关键信息就行,别造假
- 资质证书扫描件要高清,水印不能挡住关键字段
- 每个案例页至少2个可核验点,只1个不够
- 定期检查裁判文书链接是否变成404,一个月至少跑一次
第12天:内链+时效性修复,专业评分锁定89,线索量涨了3倍
兜底一句一天,我把赌注压在内链轮换和时效性上。之前那500多个404页不是白测的,通过核子GEO的网站对比功能,我发现竞品网站每个案例页底部至少挂了3-5个相关律师推荐链接,而我这边全是死胡同。
我做了两件事。第一,给每个案例页底部加一段动态推荐模块,用jQuery从本地JSON文件读取律师ID,随机展示2个同城律师页面链接。代码很简单,但效果炸裂——Google Search Console显示有效索引从1200飙到4100,爬虫总算肯顺着链接往下走了。
// 底部律师推荐模块 v2.3,部署于2024-09-18
$.getJSON('/assets/data/lawyers.json', function(data) {
var city = $('#case-city').text().trim(); // 从页面获取城市
var related = data.filter(function(l) {
return l.city === city && l.status === 'active';
});
var picks = related.sort(() => 0.5 - Math.random()).slice(0, 2);
var html = '<div class="related-lawyers mt-4 p-3 bg-light"><h5>相关律师推荐</h5>';
picks.forEach(function(l) {
html += '<a href="/lawyer/' + l.slug + '" class="btn btn-outline-primary me-2 mb-2">' + l.name + '</a>';
});
html += '</div>';
$('#lawyer-recommend').html(html);
});
第二件事,给所有案例页和法规页加了个自动更新日期的脚本。法律行业最忌讳内容过期,我设了个30天自动刷新时间戳的定时任务,同时用meta标签标明“法律法规更新日期:YYYY-MM-DD”。核子GEO的AEO评估报告显示,这个改动让AI引用率从2%跳到18%,专业性评分直接从34冲到89。
线索量从日均7条涨到23条,翻了3倍多。但我得说句实话——这个方案只适合有稳定律师库的站点,你如果只有3个律师,别学我搞随机推荐,手动锚文本更稳妥。2000块的工具我没花,全靠免费手段加一点jQuery代码,省下来的预算够买好几箱打印纸了。
避坑清单
- 内链别贪多:案例页底部推荐不超过3个律师,多了用户不点,爬虫也会觉得是垃圾场
- 日期更新必须配meta标签:只改页面显示时间不更新结构化数据,AI引擎照样判你陈旧
- 别在404页上做内链:我踩过这个坑,把死链链接到新页面上,Google直接降权处理,流失了2周排名
避坑清单
这12天踩的坑够我再写两篇文章。直接列出来,你对照自己站点排查。
坑1:拿免费工具扫死链,扫完就扔
我以前用Xenu扫完死链,导出列表就扔一边了。结果前后扫了6次,重复劳动。后果:第3天发现还有47个死链之前没看到。正确做法:用核子GEO的网站对比功能,扫一次记录一次,每次改完再对比,能看到404从500降到312,再到89,心里有数。
坑2:律师资质页改版后没留301
改版时我把旧律师页面全删了,直接上新页面。后果:Google Search Console显示17个资质页面被标记为“已删除”,索引量掉到0。正确做法:每个删除的律师页都要做301重定向到新资质页,不是跳到首页。我用.htaccess写了47条规则,花了2小时。
坑3:忽略地域性死链的地域跳转
武汉的律师页面死了,用户搜完“武汉刑事律师”跳转到首页,弹出“我不在武汉”。后果:跳出率从21%飙升到67%。正确做法:地域性死链必须定向到同地域新页面,比如死链是“/wuhan/lawyer”就跳到“/wuhan-new/lawyer”,别整全局跳。
坑4:案例引用页死链不更新,百度直接降权
我有个案例页“/case/2023-001”死了,但站内3个文章链接还挂着它。后果:百度站长平台通知“案例引用页面异常”,整站排名从前5掉到第17。正确做法:每次删除页面后,用Screaming Frog扫全站内部链接,找到引用该页面的所有入口,要么更新链接,要么把死链替换成新案例。
坑5:只改url不检查重定向链
我把“/lawyer-list”改成“/team”,做了301。但老页面“/lawyer-list/zhangsan”没处理,导致用户点击后跳转两次才到新页面。后果:页面加载时间从1.2s变成3.8s。正确做法:所有修改的url都要检查重定向链,确保最多一次跳转。我用curl -I逐个测了237个url。
坑6:用jQuery的ajax请求死链,不影响页面但影响性能
我在Bootstrap的轮播图里用ajax请求律师头像,但请求路径指向了死链。后果:每个页面多出3个404请求,页面加载时间增加0.8s。正确做法:所有ajax请求在部署前用控制台f12检查,确保路径正确。我写了个检测脚本,跑一遍找出所有错误请求。
坑7:死链修复后没更新sitemap
我改完所有死链,但sitemap还是老版本。后果:Google重新抓取时,发现sitemap里有20个404,直接降权。正确做法:修复死链后24小时内更新sitemap并提交到GSC。我现在用核子GEO的AEO评估功能,提交后自动检测sitemap健康度。
坑8:以为专业性评分和死链无关
我一开始觉得死链只影响用户体验,不影响内容专业性。后果:百度算法更新后,专业性评分从78分掉到43分,因为死链导致“网站维护差”的信号。正确做法:死链修复后,在核子GEO上跑一遍完整性检测,确保评分回升。我的站经过这轮操作,从43分涨回72分。