给网页做可引用性评分:判断内容够不够让 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 引用你的概率自然往上涨。

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

相关推荐
听风吹等浪起12 小时前
第30章:MobileNetV3全家桶实现MRI脑肿瘤四分类(含Streamlit网页推理+Mermaid结构图)
人工智能·分类·数据挖掘
如若12313 小时前
TRACER 论文解读与复现:面向 ICU 长时程患者监测的多模态 Harness 架构、时序证据建模与工具增强推理
人工智能·深度学习·计算机视觉
深蓝AI15 小时前
无头浏览器不必从 Chrome 改:Lightpanda 用 Zig 从零造,100 个页面只占 123MB 内存
人工智能·程序员
奈落2417 小时前
AI辅助的另一面:从2026年国际AI安全报告的“故障”清单到国内专家的可靠性短板,自主行动的Agent为什么更难及时干预
人工智能·安全·agent·本地部署·ai 办公
火山引擎开发者社区18 小时前
eMudhra 证书失陷:容器用户最容易忽略的镜像信任链漏洞
人工智能
LabVIEW开发19 小时前
LabVIEW 机载 DIAL:每秒万次甲烷测量
人工智能·labview·labview知识·labview功能·labview程序
1024奇点20 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
实名上网宋凯宣20 小时前
Django
后端·python·django
飞猫的边缘AI20 小时前
英特尔量子生意
人工智能·量子计算·边缘ai
深蓝AI20 小时前
桌面 Agent 缺的不是视觉:Vercel 开源 agent-desktop,用无障碍树 ref 替代截图坐标
人工智能·程序员