给网页做可引用性评分:判断内容够不够让 AI 引用(GEO 工具,附代码)

给网页做可引用性评分:判断内容够不够让 AI 引用(GEO 工具,附代码)

目录

一、为什么看重"可引用性"

GEO 里有个很实际的问题:AI 回答用户问题时,引用你的内容是有条件的。它偏好那些能直接回答问题、有具体事实、结构清晰的内容。一段"我们质量很好"的空话,AI 用不上;一句"执行 ASTM A182 标准,316L 材质,最小起订量 100 件",它拿过去就能用。

所以写完内容之后,与其凭感觉,不如给页面打个分,看它在 AI 眼里"可引用"的程度。这篇写个脚本,把这件事自动化。

二、评分看哪几项

我挑了八个信号,都是 AI 引用内容时更愿意看到的:

  1. 有没有标题
  2. 有没有 meta 描述
  3. 正文纯文本够不够长
  4. 有没有结构化数据(JSON-LD)
  5. 有没有 FAQ 问答
  6. 具体数字出现的次数
  7. 有没有作者信息
  8. 有没有发布时间

每一项打一分或两分,满分十分。这不是谷歌官方的指标,是我按经验整理的一套启发式评分,用来给自己找问题。

三、代码实现

python 复制代码
# -*- coding: utf-8 -*-
import re

import requests
from bs4 import BeautifulSoup

HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/120.0 Safari/537.36"
}


def score_page(url, timeout=10):
    resp = requests.get(url, headers=HEADERS, timeout=timeout)
    resp.raise_for_status()
    soup = BeautifulSoup(resp.text, "html.parser")

    title = soup.title.get_text(strip=True) if soup.title else ""
    desc = soup.find("meta", attrs={"name": "description"})

    for tag in soup(["script", "style", "nav", "header", "footer", "noscript"]):
        tag.decompose()
    text = soup.get_text(separator=" ", strip=True)

    jsonld = soup.find("script", type="application/ld+json")
    has_faq = bool(jsonld) and "FAQPage" in (jsonld.string or "")

    numbers = len(re.findall(
        r"\d+(?:\.\d+)?\s*(?:mm|cm|kg|件|天|%|个|years|days|pieces|pcs|USD|美元|元)",
        text))

    author = soup.find("meta", attrs={"name": "author"})
    published = soup.find("meta", attrs={"property": "article:published_time"})

    score = 0
    checks = []

    def add(cond, name, pts=1):
        nonlocal score
        if cond:
            score += pts
            checks.append("+%d  %s" % (pts, name))
        else:
            checks.append(" 0  %s(缺失)" % name)

    add(bool(title), "标题")
    add(bool(desc), "meta 描述")
    add(len(text) >= 300, "正文至少 300 字")
    add(bool(jsonld), "结构化数据")
    add(has_faq, "FAQ 问答", 2)
    add(numbers >= 3, "具体数字至少 3 处", 2)
    add(bool(author), "作者信息")
    add(bool(published), "发布时间")

    print(url)
    print("  总评分:%d / 10" % score)
    for c in checks:
        print("  " + c)
    return score


if __name__ == "__main__":
    score_page("https://example.com/")

四、结果怎么看

跑一遍,先看总分,再看每一项的加减分。缺哪项补哪项。

最容易补的是标题、描述、发布时间、作者,这些基本不费劲。正文长度和具体数字,靠写的时候往"有事实"的方向写。结构化数据和 FAQ 稍微要动点技术,但收益也高,FAQ 我直接给了 2 分。FAQPage 的规范见 Schema.org,结构化数据怎么标见谷歌文档。

五、几个要注意的点

  1. 这个分数是启发式的,不是谷歌或 OpenAI 的官方打分,作用是帮你自己找短板,别拿去跟别人比排名。
  2. 数字的匹配规则比较粗,单位就列了几个常用的,你的行业单位不一样,可以自己加。
  3. 抓的是 HTML 源码,JS 动态渲染的内容 requests 拿不到,那种页面得用浏览器渲染后再评。

六、写在最后

可引用性这件事,说穿了就是让 AI 抓取时,一眼能看懂你说了什么、有没有能直接用的东西。这个脚本把"看懂"这件事拆成了八个能自检的项,改起来有方向。分数上去了,AI 引用你的概率自然往上涨。

本文的脚本和思路都在实际项目里跑过,内容对你有用的话,欢迎点赞、收藏,有问题评论区或私信交流,我看到会回。

相关推荐
甲维斯1 小时前
戒断Claude之后,被GLM5.3蠢哭了!
人工智能
龙孚信息1 小时前
搜索算法的保质期,正在被AI刷新
人工智能·chatgpt
结构化知识课堂1 小时前
Axure产品原型设计:AI能画原型了,为什么你还得懂这些术语?
人工智能·axure·原型设计·ai产品经理
YH_Analytics1 小时前
2026 年二氧化碳气体回收设备产业链分析报告市场洞察
大数据·人工智能
橙色云-智橙协同研发1 小时前
电子高科技行业:机械与电子(MCAD & ECAD)如何协同?
大数据·运维·服务器·人工智能·安全
AI直播技术杂谈1 小时前
无人直播中控的硬件底线,旧电脑要满足哪些条件
网络·python·ai·云计算
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 产品定位、功能模块与客户端原型解读
java·开发语言·交友
美团技术团队1 小时前
SLM 生成式高并发推理引擎:延迟约束下的有效吞吐优化
人工智能
Helix2501 小时前
Python数据分析实战:Pandas清洗豆瓣短评与情感分析完整指南
python·pandas·数据清洗·情感分析··snownlp·文本数据处理