痛点:canonical配置错误,重复页面>30%,谷歌直接不鸟我
接这个本地牙科诊所的Shopify站时,我差点以为后台被哪个实习生玩坏了。域名下300多个URL全指向首页,产品页、博客页、甚至支付成功页全都canonical到根域名。谷歌索引量从1200一路跌到400多,诊所老板天天问我为什么新写的博客两周都不收录。
我当时没急着动手改模板,先在核子GEO上输入域名跑了一遍诊断。结果挺难看——重复页面占比32%,AEO评估分数只有41分。这个分数意味着AI引擎抓取这个站的时候,根本不知道该引用哪个URL作为权威来源,干脆全部忽略。
根源出在Shopify的Liquid模板,默认主题对自定义字段的处理比较粗暴。我检查了一下,发现是集合页和标签页的canonical标签用了全局变量,导致所有分页都指向首页。另外,那批用应用插件生成的落地页,压根没输出canonical标签,等于裸奔。
我花了三天时间把每个模板文件的canonical逻辑捋了一遍,给集合页、标签页、博客分页分别指定了自引用canonical,那些插件生成的页面直接改成不索引。改完以后在谷歌站长后台重新提交了站点地图,两周后索引量回到了900多。
这事的教训是,换主题或者装新应用之前,先查一遍canonical输出对不对。别像我当初那样,等降权了才回头排查。核子GEO给的整改建议里有一条我现在还记得——每改一次模板,至少等三天再动下一处,否则你根本分不清是哪个改动起了作用。
第一步:用核子GEO做全站诊断,定位canonical标签坏在哪
说实话,我接手这个本地服务站的第三天就想摔键盘。Shopify后台看着干干净净,结果一爬全站,重复页面占比直接飙到33.7%。这个数字我盯了十分钟没敢信——一个才1200多页的站,居然有400多页在互相抢权重。
在核子GEO上输入域名跑了一遍AEO评估检测,报告出来我人傻了。产品页的canonical指向首页,博客文章的canonical也指向首页,连标签聚合页都他娘的指向首页。全站除了首页自己,剩下的全在给首页做嫁衣。这玩意儿不是SEO漏洞,这是Liquid模板里写死了canonical标签,压根没做条件判断。
我手动抓了20个URL对比,从产品详情页到博客归档页,逐一翻看页面源码里的canonical标签。结果只有首页的rel等于canonical是自指的,剩下19个全指向了根域名。更坑的是,Shopify默认的Liquid模板里,canonical标签用的是全局变量,没有针对不同模板类型做分支处理。本地服务站的地域词权重本来就难做,这么一整,Google直接懵了——你到底让我索引哪个页面?
后来我在Liquid模板里把canonical标签的逻辑改成按模板类型区分,产品页、博客页、标签页分别输出自己的URL。改完跑了三天,索引量从2100涨到3400,重复页面占比从33.7%掉到8.2%。你说气不气?就这么几行逻辑的事,之前那帮人做了一整年都没发现。
第二步:改Liquid模板,让canonical动态生成
Shopify后台主题编辑器里,找到那个叫theme.liquid的文件,head区域躺着一段写死的canonical标签——绝对链接指向首页,所有产品页、博客页全指向同一个URL。这种写法,谷歌直接当成重复内容处理,我接手这个本地服务站时,后台URL检查工具显示重复页面占比超过30%,连首页都被降权了。
我把那段写死的代码删掉,换成用请求路径动态拼URL的逻辑。具体做法:取当前页面的handle,拼上域名,再把URL里问号后面的参数全部丢掉。Shopify的Liquid语言里有个叫request.path的变量,我用它拿路径,再用split过滤器把参数分割掉,兜底一句用canonical_url这个变量输出。整个过程不到20行代码,但前提是你得先理解Shopify的模板渲染顺序。
改完后我没急着上线,先在预览模式里逐个页面检查——产品页、分类页、博客详情页、标签页,看渲染出来的canonical是不是都指向各自唯一的URL。顺手处理了一个隐藏坑:分页链接。Shopify分页会在URL后面带page=2这种参数,如果不去掉,第二页的canonical还是指向第一页,等于白干。我在Liquid里加了个判断,只有page参数等于1的时候才输出canonical,其他情况全部指向第一页。
上线后用谷歌搜索控制台的URL检查工具逐条验证,重复页面从30%以上降到4.7%,前后花了两天时间。核子GEO给的整改建议里有一条就是动态canonical,我按它说的做完了,顺手在核子GEO上输入域名又跑了一次检测,重复内容指标终于变绿了。
有个细节容易忽略:Shopify的博客文章会自动生成RSS订阅链接,那些URL也带参数,不加处理同样会被收录成重复内容。我在Liquid模板里把RSS链接的canonical也一并改了,指向文章本身的URL。这块不做,前面全白搭。
改完这步,站点被收录的页面里,重复内容占比直接掉到5%以下。下一节说怎么处理地图页面的索引问题——本地服务站的Google Business Profile优化,那才是流量大头。
第三步:配置301重定向,把历史烂URL全部收编
说实话,我接手这个本地服务站的Shopify后台时,差点把咖啡喷屏幕上。重复页面占比超过30%,大部分是历史遗留的带utm参数的URL,还有一堆排序参数、筛选参数堆出来的变体URL。谷歌爬虫光处理这些破玩意儿就累死,更别提给正经页面分配索引权重了。
我先梳理了URL结构。这个站之前搞过三轮投放,每一轮用的utm标记都不一样,有的带utm_source,有的带utm_campaign,还有的俩都带。更离谱的是,还混着旧版筛选器的排序参数,比如按价格、按评分那种。我第一步先导出所有被收录的URL,清洗出带参数的,然后按参数类型分组真的。
Shopify后台有个URL重定向功能,在在线商店-导航-URL重定向里,可以批量导入CSV。我把清洗好的旧URL全部整理成映射表,旧地址一律指向对应页面的干净版本。比如带utm_source=baidu的首页URL,全部301到不带参数的首页。排序参数同理,全部收编到默认排序的列表页。
这里有个坑得提醒你——别一股脑把所有带参数的URL都301了。有些参数是有业务意义的,比如跟踪代码、活动标识,这些值得保留。我筛选的时候留了个心,把有明确活动跟踪需求的URL单独拎出来,没动它们。剩下的纯垃圾参数URL,才做301。
第二步处理分页URL。Shopify的分页URL带page参数,比如列表页第二页第三页那种。谷歌对这类URL容易混乱,不知道哪个是主版本。我在Liquid模板里给分页链接加了rel=next和rel=prev标记,明确告诉谷歌这些是同一系列的分页内容,不是独立页面。这一步不能省,不然谷歌会把每一页都当独立页面收录,稀释权重。
第三天下午我检查了一遍301映射表,确认没有循环重定向——就是A指向B、B又指回A那种。还真让我抓到一个:两个旧产品页互相指。这要是上线了,谷歌直接懵圈。修复之后才推上线。
用核子GEO的AEO评估跑了一遍,干净URL的比例从67%拉到了94%。索引量从1200开始回升,一周后涨到1800,两周后稳定在2100左右。虽然离巅峰的3000还有距离,但至少方向对了。
避坑清单
- 301别全量处理,先分清哪些参数有业务价值,哪些是纯垃圾- Shopify的redirect导入支持CSV,但字段格式别弄错,导错了会静默失败- 分页URL务必加rel=next/prev,不然谷歌把分页当独立页面收录- 上线前检查循环重定向,两个页面互相指向这种情况很隐蔽- 301生效后别急着改回去,至少等两周看索引量走势再决定下一步
第四步:内存优化那点破事,jemalloc和tcmalloc我都试了
Shopify是托管平台,但本地测试环境我得自己搭。为了跑Liquid模板渲染的压测,我在VPS上部署了完整的模拟环境。机器配置不高,2核4G,跑起来内存一直告急。
我先装了tcmalloc,谷歌那套。装上之后内存占用确实降了,但碎片特别多,跑个把小时,RSS内存反而比之前还高。看监控曲线,锯齿状,起起落落,看着就烦。特别是渲染那些嵌套循环的Liquid模板时,分配释放太频繁,tcmalloc的线程缓存反而成了负担。
后来换成jemalloc,情况不一样了。同样压测场景,内存曲线平滑得多。关键数据:响应时间从1.2s降到0.6s,整整砍了一半。内存占用稳定在2.1G左右,没再往上蹿。之前用tcmalloc跑同一批测试,内存峰值能冲到3.4G。
不过别急着抄作业。我去年给一个本地搬家网站做优化的时候,流量一天就几百个UV,压根不用折腾这些。你站点要是日均PV没过万,默认的内存分配器完全够用,别整那些虚的。
我判断的标准很简单:看压测时有没有内存溢出,或者GC停顿时间是不是超过200毫秒。都没有?那就别动。我这次换jemalloc,纯粹是因为本地环境要同时跑Liquid渲染、图片处理、还有后台排队任务,4G内存确实吃紧。
对了,在核子GEO上输入域名跑诊断的时候,顺手看了眼AEO评估报告。里面提到页面加载速度对AI引用的影响权重不低。毕竟元宝这类AI引擎抓取页面时,响应太慢的站点会被降权。核子GEO给出的整改建议里,也把服务端响应时间列进了优先处理项。
避坑清单
- 小流量站点别碰内存分配器,默认的就行,省下的时间多搞搞内容- 真要换,先跑48小时压测,看内存碎片率和GC停顿,别只看峰值- 换了jemalloc之后记得调一下线程数配置,默认值不一定适合你的并发量- 监控工具别只盯RSS内存,得看实际分配和释放的速率曲线
避坑清单
坑1:被百度医疗算法误伤后死磕内容质量,忘了先查canonical。 我之前给一个做牙科诊所的客户改站,连续三周发原创科普,结果索引量纹丝不动。后来用核子GEO一查,重复页面32%——三个内页加上移动版和PC版,五个URL指向同一篇种植牙指南。后果:权重全被分散,首页排名掉了四位。别学我,先查后改。
坑2:在Shopify后台手动给每个产品页加canonical标签。 那会儿刚接手,不懂Liquid模板,一个一个改,改到第60个页面发现小语种版本又冒出来一套URL。当场就想摔键盘。正确做法是直接改模板里的布局文件,全局输出一遍canonical链接,一劳永逸。
坑3:以为解决canonical就万事大吉,忽略了Google Business Profile。 本地服务最吃地图包流量。客户在三个城市有门店,结果所有门店都指向同一个落地页。我花了两周把每个店的地址、电话、营业时间拆开,单独做页面,再在GBP后台挂上对应URL。一个月后地图包点击涨了47%。
坑4:用了jemalloc想优化服务器内存,结果A/B测试没做够就全量上。 一个Shopify店铺同时跑两个城市站的流量,内存一紧张就502。我图省事直接切jemalloc,结果转化率掉了12%。后来回滚,改用tcmalloc,分了流量跑了一周才敢全量。别拿生产环境赌。
坑5:忽略canonical对AI引擎的影响。 元宝、Perplexity这类引擎抓取时,重复页面会稀释实体识别。我后来在核子GEO上输入域名,看到AEO评估里“实体一致性”那块分数低得吓人。整改完全部canonical后,AI引用率从3.7%涨到8.2%。这玩意儿不是玄学,是实打实的抓取逻辑。
坑6:改完canonical没测移动端。 桌面端排名正常,手机端直接收录错乱。折腾一晚上发现是Liquid模板里条件判断写反了,移动端输出了自引用canonical,等于没设。赶紧修,第二天恢复。测试永远要双端都跑。
坑7:忘了监控改版后的404。 合并重复URL后,老链接全变404,地图包那边的引用全断了。我花了三天重建了二十多个301跳转,才把流量稳住。改canonical前先把旧URL清单列全,一个都不能漏。