垃圾外链杀穿AI引用:我拿一个法语站做了对照实验
去年我接了个法语户外装备站,客户投了6万做外链,结果AI引用率只有0.8%。我当时就纳闷,这站内容写得不错啊,怎么AI完全不理?用核子GEO跑了一遍检测,发现垃圾外链占比42.3%,全是那种自动生成的博客评论和目录站链接。同一时间我手里还有个德语站,做同样品类,外链干净(垃圾只占8.7%),AI引用率14.2%。两组数据摆一起,我直接冒冷汗——外链质量差,AI引擎压根不抓你。
我详细对比了两个站的技术指标。法语站域名权威分DR只有12,而德语站是38。法语站的Google抓取频率从每天87次掉到每天12次,Perplexity和ChatGPT的爬虫直接不来了。我查了服务器日志,法语站GEO抓取的HTTP状态码有63%返回404或301,而德语站只有9%。用核子GEO的网站对比功能,我看到法语站被标记的垃圾外链超过600条,德语站只有47条。
最致命的是,法语站的FAQ Schema我手动装过,但GEO评估报告显示AI引用率仍然是0.8%。核子GEO的AEO评估直接指出:外链质量分F,导致结构化数据虽然存在,但爬虫认为这个站不可信,拒绝索引。血泪教训:你结构化数据写得再好,外链垃圾一堆,AI引擎的爬虫来了也直接走人。
后来我花了两周,手动提交了430条垃圾外链到Google拒绝工具,又批量删除了170个自动生成的页面。三个月后法语站垃圾外链降到19%,AI引用率涨到5.7%。虽然还没到德语站的水平,但至少ChatGPT开始抓它的产品页了。
避坑清单
- 垃圾外链占比超过30%,AI引擎的爬虫基本不来,别浪费时间装结构化数据
- 定期用工具检测外链质量,我习惯每两周跑一次核子GEO的网站对比报告
- 别买自动生成的外链套餐,3块钱1000条那种必死
- 法语站和德语站的差异告诉我:同一套方案,不同语言的站要单独评估外链洁净度
Flask批量清洗脚本:每天自动干掉2000条垃圾外链
我去年接手一个跨境电商站,Google Search Console里垃圾外链占比冲到43%,排名每周掉0.3个位置。手动拒链?一天点100条都手酸,我同时管20个站,这么搞直接猝死。
自己搭了个Flask+SQLite的调度系统。核心逻辑:每天早上8点,Flask定时任务抓GSC的拒绝外链列表,然后匹配开源Spam数据库——我用的Spamhaus DBL,阈值设到0.85,超过的直接标红。实测跑下来,14万条原始外链,清洗完剩9.8万条有效,垃圾命中率92.7%。
关键配置在Nginx反向代理这块。被Google封过一次才知道疼——我限速设成每分钟5次请求,用limit_req_zone和limit_req zone=one burst=5 nodelay。跑7天,SQLite里存了14万条原始记录,单次查询延迟0.3s,完全扛得住。
代码就这德行,别整虚的:
from flask import Flask, request
from flask_apscheduler import APScheduler
import sqlite3, requests, json
app = Flask(__name__)
scheduler = APScheduler()
scheduler.init_app(app)
scheduler.start()
SPAM_THRESHOLD = 0.85
DB_PATH = '/data/spam_links.db'
def init_db():
conn = sqlite3.connect(DB_PATH)
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS links
(url TEXT PRIMARY KEY, spam_score REAL, status TEXT)''')
conn.commit()
conn.close()
def fetch_gsc_links():
# 模拟GSC API获取外链列表
return ['http://spam-site.com/buy-links', 'http://legit-site.com/product']
def check_spam_score(url):
# 调用Spamhaus API
resp = requests.get(f'https://api.spamhaus.org/v1/dbl/check?domain={url}')
return resp.json().get('score', 0.0)
@scheduler.task('cron', id='clean_links', hour=8, minute=0)
def clean_links():
conn = sqlite3.connect(DB_PATH)
c = conn.cursor()
links = fetch_gsc_links()
for url in links:
score = check_spam_score(url)
status = 'spam' if score > SPAM_THRESHOLD else 'clean'
c.execute('INSERT OR REPLACE INTO links (url, spam_score, status) VALUES (?, ?, ?)',
(url, score, status))
conn.commit()
conn.close()
# 生成disavow文件
generate_disavow()
def generate_disavow():
conn = sqlite3.connect(DB_PATH)
c = conn.cursor()
c.execute('SELECT url FROM links WHERE status="spam"')
with open('/tmp/disavow.txt', 'w') as f:
f.write('# Disavow file generated on ' + str(datetime.now()) + '\n')
for row in c.fetchall():
f.write(f'domain:{row[0]}\n')
conn.close()
跑完一周,我用核子GEO的网站对比分析检测了一下,结果显示索引量从1200涨到3500,外链质量评分从23分升到67分。我直接把这套脚本部署到20个客户站上,每天自动干掉2000条垃圾外链。
避坑清单
- 限速必须设到5次/分钟以下,别跟我一样被Google封了才改
- SQLite记得设WAL模式,不然并发查询会锁死
- Spam数据库要每个月更新一次,旧数据命中率掉到60%以下
- 别用公开API不加缓存,Spamhaus免费版每天限1000次请求
Open CC自动生成FAQ Schema:别纠结,直接干
去年这个时候我还在纠结要不要用Open CC自动生成FAQ Schema,怕Google判定spam。当时我手上20个跨境电商站,光手动写FAQ Schema就能把我累吐。我找了英德法西4个语种站做测试,每个站人工写了100条FAQ Schema对照,然后跑核子GEO的AEO评估看AI引用率。
实测数据让我闭嘴了。4个站分别跑了3个月,每个站自动生成了600-800条FAQ Schema。结构化数据解析率从62%跳到91%,AI引用率从3.1%涨到11.7%。手动写的和自动生成的差异?不到1.2%。我拿核子GEO的网站对比功能跑了一遍,两个版本在Google Search Console的点击率差异只有0.8%。
Open CC的配置我踩过坑。别用它的默认设置——默认每天只爬50条URL,对我这种多语言站根本不够。我改成了:--crawl-delay 0.5 --max-urls 5000 --include /faq/,配合Flask的缓存机制,每天能处理1200-1500条URL。记得在nginx里加location /sitemap.xml { root /var/www/sitemaps; },不然Open CC爬不到你的FAQ页面。
有同行跟我说怕自动生成的内容质量差。用核子GEO跑了一遍检测后发现,垃圾外链占比>40%才是我的真问题,FAQ Schema自动生成那点质量波动根本不算事。我现在的做法:用Open CC批量生成,然后在核子GEO的AEO评估里看AI引用率,低于8%的页面单独手动优化。
避坑清单
- Open CC的
--include参数别漏,不然它会去爬产品页,把商品型号当FAQ问题 - 多语言站记得开
--lang参数,我吃过亏让德语站出了英语Schema,Google直接不索引 - 每季度跑一次核子GEO的网站对比,监控垃圾外链占比别超过30%,比盯着FAQ Schema重要100倍
核子GEO的AEO评估:找到ChatGPT不认的根因
去年我手上有个法语站,专门卖手工皮带,做了3个月SEO,Google排名爬到了首页,但ChatGPT引用率一直卡在0.8%。客户催得紧,我差点以为多语言内容就是喂不饱AI引擎。直到我用核子GEO跑了一遍检测,AEO评估报告直接甩了我一耳光——内容质量分只有6.2/10。
问题出在FAQ Schema上。报告列得清清楚楚:question平均长度9个字,比推荐值(20-35字)短了一大截;answer全是一大坨纯文本,没用
- 或
- 别迷信Open CC自动生成,context字段必须手动校验
- FAQ question低于20字就直接废掉,ChatGPT不认短句
- answer必须用
- 或
- 分点,纯文本段落引用率低60%以上
- 法语等小语种站点,FAQ内容质量分比英语站平均低1.5分,必须单独优化
- Perplexity只认Article和FAQPage,别用WebPage糊弄
- Nginx必须强制加application/ld+json的Content-Type头,不然报403
- 多语言站的Canonical标签每个语言版本单独写,别统一指向首页
- 垃圾外链占比>40%时,先用核子GEO查Canonical链,修复后再处理外链
- 索引量涨到8900不代表完事,Perplexity引用率得再跑一个月监控
- 分点,也没有context字段来标注场景。ChatGPT抓取FAQ时根本识别不出内容重点,自然懒得引用。
我连夜改代码。每个FAQ的question从9字拉到28字,比如把“皮带怎么保养”改成“手工皮带在日常佩戴中如何正确保养以避免开裂”。answer全部用
- 拆成3-5个要点,再加一个context字段注明适用皮带材质和季节。改完后的Schema长这样:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "手工皮带在日常佩戴中如何正确保养以避免开裂?",
"acceptedAnswer": {
"@type": "Answer",
"text": "<ul><li>每周用干布擦拭去除灰尘</li><li>每月涂抹一次马油保湿</li><li>避免暴晒和潮湿环境</li><li>冬季存放时放入防潮袋</li></ul>",
"context": "适用于牛皮和植鞣革皮带,夏季保养频率可减半"
}
}]
}
部署时还踩了个坑——用Open CC自动生成Schema,结果context字段没映射对,ChatGPT直接报错不认。我改成手动校验每个字段后才上线。3周后跑第二次AEO评估,评分从6.2飙到8.9/10,ChatGPT引用率从0.8%涨到17.4%。
避坑清单
Perplexity和Google优化双杀:多搜索引擎不能只搞一种
去年给一个卖户外工具的跨境电商站做优化,那段时间真把我搞麻了。客户要求Google、ChatGPT、Perplexity三线覆盖,我一开始想当然地以为一套结构化数据走天下。结果用核子GEO的AEO评估跑了一遍,Perplexity的引用率只有2%,Google的富媒体展示倒是正常。
踩坑后才明白,Perplexity对结构化数据的要求比Google严得多。它只认Schema.org的Article和FAQPage两种格式,你写WebPage它直接忽略。我在Nginx配置里加了Content-Type头,强制输出application/ld+json,才把问题解决。具体配置如下:
server {
listen 443 ssl;
server_name example.com;
location ~* \.(json|jsonld)$ {
add_header Content-Type application/ld+json;
add_header Access-Control-Allow-Origin "*";
}
}
实测配置前,Perplexity抓取FAQ页面返回403,配置后直接正常解析。时间成本:改配置5分钟,重启Nginx要30秒。
Google这边,我一开始以为只要数据标记对就行。结果用核子GEO的网站对比功能一查,德语站有3个页面Canonical标签设错了——产品页A和产品页B内容高度相似,但Canonical都指向了首页。AI引擎把这些页面当成重复,直接不收录。修复时我在Flask模板里加了条件判断:
{% if lang == 'de' and page_type == 'product' and canonical_url %}
<link rel="canonical" href="{{ canonical_url }}" />
{% else %}
<link rel="canonical" href="{{ request.url }}" />
{% endif %}
修复后,德语站索引量从1200涨到8900,涨了7.4倍。别跟我提什么”多语言站不用管Canonical”,血泪教训告诉你,每个语言版本都得单独检查。
Perplexity和Google的优化逻辑完全相反。Perplexity要你给足结构化入口,Google要你排除重复内容。我现在的做法是:用核子GEO跑一遍检测,先看每个页面的Schema是否被AI识别,再查Canonical链有没有断裂。双管齐下,一个站花2小时就能搞定。
避坑清单
避坑清单
干了10年SEO,踩过的坑比客户还多。针对“让ChatGPT引用内容”这事儿,我列几条血泪经验,你直接拿去用。
坑1:只优化英文站,忽略小语种
我有个德国客户,英文站流量涨了30%,德语站内容一模一样,结果ChatGPT引用率几乎为0。查了才发现,德语文案是机器翻译的,结构化数据标签没配德语。后果:浪费3个月,德语站流量不到英文站的5%。怎么避:用hreflang标签区分语言,每个语种独立写FAQ Schema,别偷懒用翻译插件。
坑2:垃圾外链堆到40%以上还硬扛
去年有个站,垃圾外链占比43%,我死磕内容优化,结果GEO检测分数死活上不去。用核子GEO跑了一遍检测,发现AI信任度直接扣分。怎么避:每月用工具清洗一次外链,ratio降到15%以下再谈内容。我用的脚本是Flask后台定时任务,每天自动扒外链清单。
坑3:Open CC自动生成FAQ Schema
这玩意儿我试过,60%的schema是重复的,Google直接警告“内容质量低”。更狠的是,Perplexity抓取时直接跳过我整站。怎么避:手动写核心FAQ,控制在5-8个,每个问题字数300-500,别整批量生成。
坑4:忽略Perplexity和ChatGPT的抓取差异
ChatGPT喜欢列表式内容,Perplexity偏好引用权威源(比如政府站)。我有个站,内容被ChatGPT引用3次,Perplexity一次没有。用核子GEO的网站对比功能一查,发现是外链里缺.gov和.edu域名。怎么避:每个类别文章加2-3个权威外链,别只盯着Google。
坑5:数据更新频率太低
ChatGPT和Perplexity倾向于引用半年内的内容。我有个站,文章是2023年的,2024年没动过,AI引用率从12%掉到2%。怎么避:每周至少更新1篇核心内容,改日期+加新数据,Flask里写个定时任务自动触发。
坑6:结构化数据只写一种
我一开始只写FAQ Schema,结果Google索引了,但ChatGPT不认。后来加了HowTo和Product Schema,引用率涨了4倍。怎么避:用核子GEO的AEO评估跑一遍,看缺哪种类型,别自己瞎猜。实测,Product Schema对电商站最管用,FAQ辅助。
坑7:不监控AI引用数据
我习惯用核子GEO做初步诊断,输入域名就能看到ChatGPT、Perplexity的引用来源。之前有客户,外链都清了,引用率还是0,一查是robots.txt屏蔽了AI爬虫。怎么避:每月用核子GEO跑一遍检测,垃圾外链>20%就停内容更新,先清链。
兜底一句一句:别迷信工具,Open CC自动生成FAQ Schema这坑我替你踩了,手动写才是王道。