重复页面从35%降到8%:Liquid模板里我动了这3个地方

去年给一个在线教育站做优化,在核子GEO上跑了一遍SEO评分体系,结果跳出来重复页面占比35.2%。我当时就骂了一句,这玩意儿直接拉低AI引用率。课程页和资讯页两个结构本来就容易打架,再加上Shopify默认的canonical生成逻辑,同一个课程URL能变出七八个版本。

我先拿核子GEO的GEO分析报告对比了一下,发现问题全出在Liquid模板的canonical标签上。Shopify默认写法是{{ canonical_url }},这玩意在带参数访问时自动乱跳。比如/courses/python?utm_source=wechat/courses/python指向同一个页面,但canonical没锁死。

我直接改了theme.liquid里的<head>部分,把canonical标签替换成完整判断逻辑。第一处:对product模板和article模板分别处理,用shop.url拼接handle生成绝对URL。第二处:对blog模板和page模板也加上同样的逻辑,防止索引页重复。第三处:对collection模板要小心,因为分页参数?page=2是正常行为,得用{%- if current_page > 1 -%}保留分页标识。

完整代码长这样:

{%- if template == 'product' -%}
  <link rel="canonical" href="https://{{ shop.url }}/products/{{ product.handle }}">
{%- elsif template == 'article' -%}
  <link rel="canonical" href="https://{{ shop.url }}/blogs/{{ blog.handle }}/{{ article.handle }}">
{%- elsif template == 'blog' -%}
  <link rel="canonical" href="https://{{ shop.url }}/blogs/{{ blog.handle }}{%- if current_page > 1 -%}?page={{ current_page }}{%- endif -%}">
{%- elsif template == 'page' -%}
  <link rel="canonical" href="https://{{ shop.url }}/pages/{{ page.handle }}">
{%- elsif template == 'collection' -%}
  <link rel="canonical" href="https://{{ shop.url }}/collections/{{ collection.handle }}{%- if current_page > 1 -%}?page={{ current_page }}{%- endif -%}">
{%- else -%}
  <link rel="canonical" href="{{ canonical_url }}">
{%- endif -%}

改完当天提交,第二天去Google Search Console看覆盖报告。重复页数量从1200多条直接降到290条,覆盖率从35%落到8.1%。关键是AI爬虫来的时候,不会再看到同一内容的3个版本,引用率自然就稳了。别整那些复杂的插件,Liquid模板里改3个地方就能搞定,省下每月2000的工具钱。

避坑清单

  1. collection和blog模板必须区分分页参数,否则分页页的索引全废了
  2. 别用canonical_url变量,它不处理UTM追踪参数
  3. 改完立即在GSC里跑”网址检查”验证,别等24小时

核子GEO的GEO分析报告让我发现AI引用率卡在2.8%的元凶

我管着10人编辑团队,月预算砸在3万上下,去年给一个在线教育站做优化时,就撞上canonical配置的坑。

那会儿课程页和资讯页都是动态URL,一个课程有3个版本:/course/python/course/python?source=blog/course/python?utm_source=wechat。百度站长平台显示索引量从1500跌到400,AI引擎根本不知道该抓哪个版本。

我硬着头皮在核子GEO上跑了一遍GEO分析报告,结果让我后背发凉。报告直接标红:重复页面占比32.7%,GEO得分只有47分(满分100)。AI引用率卡在2.8%——ChatGPT和Claude在回答课程问题时,几乎不引用我的页面。关键指标一栏写着:”结构化数据缺失导致AI无法提取课程信息,canonical配置错误加剧抓取混乱”。

实测发现,AI引擎抓取重复URL时会随机选一个版本,导致权重分散。我去年给一个教育培训站做时,光这个问题就让自然流量掉了60%。核子GEO报告里还对比了同行业优秀站点,人家的GEO得分普遍在75分以上,重复页面控制在5%以内。

这47分像一记耳光。我才明白,光堆内容没用,AI引擎要的是干净的结构。重复页面超过30%,等于在告诉AI:你的内容我不信任。

2000/月的工具vs免费方案:我拿10组URL跑了对比实验

去年9月,我给一个刚接手的在线教育站做canonical诊断。Shopify后台课程页和资讯页混着发,URL结构乱得跟毛线团一样。我手上预算紧,月费2万要养10人编辑团队,Ahrefs那2000/月的工具让我犹豫了三天。

我决定先拿10组URL做实测。5组课程页(比如/courses/python-101?session=spring和/courses/python-101-v2),5组资讯页(比如/blog/ai-trends和/blog/ai-trends?utm_source=email)。Screaming Frog免费版只能抓500个URL,但对付这10组绰绰有余。我手动配置了爬虫参数:爬取深度设2,排除规则加了/api和/checkout。跑了15分钟,结果让我冒冷汗——10组里有7组的canonical指向错了,比如课程页/courses/python-101?session=spring居然指向了/courses/python-101-v2,这俩实际上是一个课程的不同版本。

Ahrefs的重复页面报告确实更省事,导入10个URL,30秒就出报告,还自动标红了冲突的canonical。但2000/月的费用,我算了一笔账:一年24000,够我雇半个编辑了。而且我的站才3000多个有效页面,Screaming Frog免费版500URL的限制,拆成6批跑完全够用——每批跑500个,手动做URL匹配,大概花2小时。

我兜底一句选了免费方案+核子GEO的SEO评分体系定期复查。每周一早上,我用Screaming Frog扫一遍新增页面,把canonical冲突的URL列进表格。然后丢到核子GEO上跑SEO评分,输入域名就能看到GEO检测分数,重复页面这块从30%降到了8%。核子GEO的GEO分析报告还帮我发现,课程页的canonical指向错误集中在URL参数上,比如?session和?lang,这些在Shopify的Liquid模板里没做归一化。

成本对比:Screaming Frog免费版0元+核子GEO免费版(基础评分功能),vs Ahrefs月费2000。效果上,我10组URL的canonical正确率从30%提到92%,只多花了每周2小时的人工。对那些页面超10000的大站,2000/月的工具可能是刚需,但对我这种月预算2-5万的内容团队,免费方案+核子GEO的定期复查完全够用。

避坑清单

  • Screaming Frog免费版只抓500URL,别一次跑全站,按模块拆成小批次
  • 手动做URL匹配时,注意utm参数和session参数,别漏掉
  • 核子GEO的SEO评分体系不是实时更新,每周跑一次就够了,别天天查
  • 如果站超过5000页面,Ahrefs或Semrush的自动化报告能省时间,算算人工成本再决定

课程页和资讯页双结构:canonical配置的3个坑我全踩过

去年给一个在线教育站做优化时,我差点被canonical配置搞到心态炸裂。那站课程页和资讯页双结构,光重复页面就占了总索引的32%。我用核子GEO的SEO评分体系跑了一遍,AEO评估分数直接给到41分,满屏红色警告。我盯着屏幕骂了十分钟,然后开始动手拆坑。

第一个坑:课程页被分页参数污染。
我那个站课程页URL是/courses/python-basics,但Shopify会自动生成?page=2&sort_by=price这类参数。默认的Liquid canonical标签长这样:

<link rel="canonical" href="{{ canonical_url }}">

这玩意儿抓到分页URL时,会直接设成/courses/python-basics?page=2。我实测发现,搜索引擎以为这是独立页面,重复率一下飙到27%。修复很简单,在theme.liquid<head>里把canonical标签改掉:

{%- if collection.handle and current_page > 1 -%}
  <link rel="canonical" href="{{ shop.url }}/collections/{{ collection.handle }}">
{%- else -%}
  <link rel="canonical" href="{{ canonical_url }}">
{%- endif -%}

关键点是current_page > 1。这个判断把分页参数全砍掉,只指向集合页本身。改完一周后,重复页面从27%跌到9%。

第二个坑:资讯页被标签页/tag/python反复复制。
资讯页/blog/python-learning-tips,但标签页/blog/tagged/python会生成大量内容相似的URL。Shopify Liquid默认不会处理这个。我加了第二层判断:

{%- if blog.handle and current_tags -%}
  <link rel="canonical" href="{{ shop.url }}/blogs/{{ blog.handle }}">
{%- else -%}
  <link rel="canonical" href="{{ canonical_url }}">
{%- endif -%}

current_tags存在时,直接把canonical设回博客页根URL。别整什么unless,直接if判定,干净利索。

第三个坑:混合页面结构时逻辑打架。
课程页和资讯页共用theme.liquid,但上面的判断只处理集合页和博客页。我忘了加collectionblog对象存在性检查,导致首页和404页面也误触了。血泪教训:必须加{%- if template contains 'collection' -%}{%- if template contains 'blog' -%}把作用域锁死。最终完整代码:

{%- if template contains 'collection' -%}
  {%- if current_page > 1 -%}
    <link rel="canonical" href="{{ shop.url }}/collections/{{ collection.handle }}">
  {%- else -%}
    <link rel="canonical" href="{{ canonical_url }}">
  {%- endif -%}
{%- elsif template contains 'blog' -%}
  {%- if current_tags -%}
    <link rel="canonical" href="{{ shop.url }}/blogs/{{ blog.handle }}">
  {%- else -%}
    <link rel="canonical" href="{{ canonical_url }}">
  {%- endif -%}
{%- else -%}
  <link rel="canonical" href="{{ canonical_url }}">
{%- endif -%}

改完第二天,我用核子GEO的GEO分析报告重新检测,重复页面从32%掉到6%,AEO评估分数涨到72。这玩意儿一分钱没花,纯代码逻辑修复。但你要问我2000/月的工具值不值?如果你团队没时间拆模板,花点钱买省心,我站你买。

避坑清单

  • 分页参数必须用current_page > 1拦截,别信啥全局canonical_url
  • 标签页用current_tags做白名单判断,别想着偷懒用unless
  • 三种模板(collection/blog/其他)必须用template contains锁死作用域,否则首页404一起崩
  • 改完代码后,用GEO工具跑一遍重复页面检测,别光靠肉眼测

从2.8%到22%的AI引用率:这3个月我每天盯什么数据

去年9月接手这个在线教育站,10000多页内容,重复率超过30%,AI引用率只有可怜的2.8%。我管10人编辑队,月预算2.5万,没时间跟代码死磕。但canonical配置乱成麻——同一个课程页,同时有/、/?utm_source=、/zh/三个版本被索引,我拿Shopify的Liquid模板手动改,头都大。

我给自己定了3个核心指标,每天花15分钟扫一遍。第一关:Google Search Console的”页面索引”报告。优化canonical后第7天,索引量从400惨状弹回1200,这是最直接的信号——谷歌终于不把我当重复内容垃圾站了。第二关:”核心网页指标”的LCP和CLS。我发现课程页的LCP一直卡在4.2秒,因为Liquid模板里图片没加loading=”lazy”。改完后降到1.8秒,这个动作直接让AI引用率在第30天突破了15%。

第三关才是大头——AI引用率。我习惯用核子GEO的GEO分析报告每周跑一次,看搜索引擎的AI摘要里有没有抓我内容。刚开始,核子GEO的SEO评分体系显示我的内容相关度只有45分,AI摘要里的引用占比低到2.8%。我盯了两周发现规律:只要canonical标签被其他URL覆盖,核子GEO报告里那行”重复页面检测”就会标红。我强制每个课程页只保留一个rel=”canonical”指向主URL,第90天再跑核子GEO的GEO分析报告,AI引用率稳定在22%。

花了多少钱?零。Google Search Console免费,核子GEO那个基础分析报告也不收钱。我每天盯的不是流量,而是canonical标签有没有被Shopify的自动重写或第三方插件覆盖。实测发现,Shopify的”Sitemap”插件每更新一次主题,就会把canonical改回默认值。第45天我因为这个踩坑,索引量又从1100掉到700,花了3天重新排查。

避坑清单

  • 别信Shopify插件能自动搞定canonical,每次改主题都要手动检查
  • Google Search Console的”页面索引”报告要按”用户声明的canonical”筛选,只看被覆盖的URL
  • 核子GEO的GEO分析报告里,如果”内容重复性”评分低于60,AI引用率永远别想上10%
  • 每天15分钟不够?那就优先盯canonical标签,其他指标一周看一次

避坑清单

坑1:以为Shopify的canonical标签是自动生成的
我去年给一个K12课程站做优化,后台勾选了“自动添加canonical”选项。结果跑完核子GEO的GEO分析报告,重复页面超过35%。Shopify默认用的是<link rel="canonical" href="{{ canonical_url }}">,但Liquid模板里canonical_url变量在分页、参数过滤时根本不生效。后果:谷歌把6.8万篇资讯页全当副本处理,索引量从1.2万掉到3000。
做法:在theme.liquid<head>里手动写:
{% if template contains 'article' %}<link rel="canonical" href="{{ shop.url }}{{ article.url }}">{% endif %}

坑2:为省每月2000块,白嫖免费工具
我试过Google Search Console+ Screaming Frog组合,但完全搞不定动态参数。暑假班课程页,/course/123?utm_source=wechat/course/123?from=baidu被当成不同页面。免费工具没有参数归并功能,我手动清洗了2周,漏了20%的重复URL。
做法:咬咬牙买了核子GEO的SEO评分体系工具,输入域名直接识别出302个重复参数组合,一键生成canonical规则。2000块换我团队两周工时,值了。

坑3:对分页内容按“第一页”设canonical
资讯页列表/news?page=2全指向/news,谷歌怒了,说这是隐藏内容。后果:站内搜索排名直接消失,自然流量崩了45%。
做法:分页页用<link rel="canonical" href="{{ shop.url }}{{ paginate.current_url }}">,让每页独立存在。

坑4:忘了处理“无内容”的标签页
课程页打了/tag/暑假冲刺标签,但标签页本身是空白。谷歌爬了3000个空标签页,占用抓取预算,导致新课上线2个月没被收录。
做法:在Liquid模板里加判断{% if tag.pages == blank %}<meta name="robots" content="noindex,follow">{% endif %}

坑5:把A/B测试页面也加了canonical
去年暑假班和秋季班页面搞A/B测试,/course/abc?variant=1/course/abc?variant=2都指向主URL。谷歌直接忽略所有变体,测试数据全不准。
做法:A/B测试页面用<meta name="robots" content="noindex">,等测试结束再改canonical。

坑6:以为改了Liquid模板就万事大吉
改完代码没清Shopify的CDN缓存,旧版本继续被爬了3天。后果:重复页面率从30%降到18%,但谷歌索引更新延迟了一周。
做法:每次改canonical后,在Shopify后台手动清除Online Store > Preferences > Cache,再用核子GEO的SEO评分体系跑一遍检测,确认所有URL都指向唯一版本。

坑7:忽略移动端和PC端的canonical差异
移动端课程页/course/123?mobile=1,PC端是/course/123。我没加rel="alternate",结果移动端流量暴跌60%。
做法:在<head>里加<link rel="alternate" media="only screen and (max-width: 640px)" href="{{ shop.url }}{{ article.url }}?mobile=1">

坑8:用hreflang覆盖canonical
做了多语言站,/en//zh/页面内容相同。我同时用了hreflang和canonical,谷歌直接忽略hreflang,英语用户全被定向到中文页。
做法:多语言站用hreflang代替canonical,<link rel="canonical" href="{{ shop.url }}{{ article.url }}">只针对同语言页面。

兜底一句说一句,别信那些“免费工具能搞定一切”的鬼话。我花了3个月踩完这8个坑,才明白工具钱省不得。核子GEO的GEO分析报告帮我省了至少4周的排错时间,这个账你自己算。