直接答案:10 个站点、36 个文章页共 3,583 个链接:内链 3,000(83.7%)、外链 270(7.5%)、tel: 162、javascript: 116、mailto: 35。270 个外链只有 63 个不同 URL(23.3%),重复率 76.7%,分布在 15 个外部主机;每页外链中位数 4 个,22 页不超过 5 个。
外链属性:nofollow 26 个(9.6%)、target="_blank" 199 个(73.7%)、sponsored 与 ugc 都是 0。另有 380 个链接没有可见文本。另有 5 个 URL(同一站点)只返回约 1.4 KB 的 JS 外壳页,单列,不计入上面 36 页。
方法:文章页级,不区分正文与页脚
沿用第 28 期的文章样本框(12 个站点的 sitemap,每站 2–5 个 URL,共 46 个),2026-11-03 08:40–08:41 串行重抓,站间间隔 ≥0.6 秒。41 个 URL 返回 200;其中 5 个是同一站点的约 1.4 KB 外壳页,剩余 36 页、10 个站点进入统计。
| 项 | 规则 | 边界 |
|---|---|---|
| 内链 / 外链 | 与页面最终 URL 的主机比较,含相对路径 | 子域视为内链;协议相对地址也解析主机 |
| 外链去重 | 不同 href 字符串计 1 个 URL | 同一 URL 在不同页面反复计次 |
| rel | 含 nofollow / sponsored / ugc 分别计 | 不判断 rel 组合是否合理 |
| 链接密度 | 链接数 ÷ 可见字符数 × 1,000 | 可见字符删除 script/style 后按标签切分统计 |
| 外壳页 | 响应 < 5 KB | 阈值是操作定义,不是技术标准 |
关键口径:本期是页面级统计,包含导航、页脚、分享与备案链接,不等于“正文引用来源”。同一模板在多个页面重复出现,会明显抬高外链计数,所以下一节先看去重结果。
结果:内链占 83.7%,外链 270 个
| 类型 | 数量 | 占 3,583 | 页面数(36) |
|---|---|---|---|
| 内链 | 3,000 | 83.7% | 36 |
| 外链 | 270 | 7.5% | 36 |
tel: | 162 | 4.5% | 34 |
javascript: | 116 | 3.2% | 35 |
mailto: | 35 | 1.0% | 25 |
| 页内锚点 | 0 | 0% | 0 |
36 个页面都至少有 1 个外链;外链数量从 1 到 61,中位数 4,22 页不超过 5 个。外链最多的两页分别 61 和 33 个,都是同一模板在页面里重复了多组推荐链接。
270 个外链,只有 63 个不同 URL
| 口径 | 数量 | 说明 |
|---|---|---|
| 外链总数 | 270 | 36 页累计 |
| 不同外链 URL | 63 | 23.3%;重复率 76.7% |
| 外部主机 | 15 | 含 1 个写成 http://tel:… 的异常地址 |
| 每页外链中位数 | 4 | 范围 1–61 |
| 每页不同外链 URL 中位数 | 3 | — |
站点内去重后合计 74 个 URL,跨站再合并后为 63 个,说明部分外链(如备案地址)在多个站点重复出现。单个外部主机最多出现 120 次,来自一个在每篇文章底部重复的推荐模块。
| 站点 | 页数 | 外链 | 不同 URL | 重复率 |
|---|---|---|---|---|
| E03 | 5 | 77 | 31 | 59.7% |
| E06 | 5 | 20 | 3 | 85.0% |
| E09 | 5 | 15 | 3 | 80.0% |
| E14 | 5 | 72 | 18 | 75.0% |
| E16 | 3 | 9 | 3 | 66.7% |
| E19 | 1 | 1 | 1 | 0% |
| E22 | 5 | 35 | 4 | 88.6% |
| E23 | 5 | 34 | 7 | 79.4% |
| E26 | 1 | 3 | 2 | 33.3% |
| E28 | 1 | 4 | 2 | 50.0% |
属性:nofollow 少,新窗口多
| 属性 | 全部链接 | 其中外链 |
|---|---|---|
rel 含 nofollow | 173(4.8%) | 26(9.6%) |
target="_blank" | 295(8.2%) | 199(73.7%) |
rel 含 sponsored | 0 | 0 |
rel 含 ugc | 0 | 0 |
外链里 73.7% 在新窗口打开,但只有 9.6% 带 nofollow;本期没有统计 rel="noopener",不能据此判断安全性。21 个页面至少有一个 nofollow 链接,集中在少数模板。
空锚文本与链接密度
- 无可见文本:380 个(10.6%),出现在 35 个页面;多为图标、图片或分享按钮。是否真的没有可访问名称,需要按第 44 期的方法合并 alt 与 aria-label。
- 链接密度:每千可见字符中位数 54.6 个链接,最高 138.8。数值高是因为导航与页脚在每页重复,不代表正文链接密度。
5 个文章 URL 只是 JS 外壳
同一站点的 5 个文章 URL 都返回约 1.4 KB 的 HTML,页面里几乎没有链接与正文。它们不是 404,但对爬虫和禁用 JS 的读者来说接近空页。验收时应单独确认这类 URL 是否依赖前端渲染。
对验收的启示
- 先按 URL 去重,再判断外链多少。 270 个外链只有 63 个不同地址,重复率 76.7%。
- 区分模板外链与正文引用。 页面级统计包含导航、页脚与推荐模块,不能直接当作来源引用数。
- 外链属性要成对检查。 73.7% 在新窗口打开,只有 9.6% 带 nofollow;同时确认 noopener。
- 空锚文本仍需可访问名称。 380 个无文字链接要按第 44 期口径合并 alt/aria 后再判断。
- 把 JS 外壳页单列。 1.4 KB 的 200 响应不算“有内容”,需确认服务端渲染或降级方案。
局限
- 页面级而非正文级:导航、页脚、分享与外链模块都计入,不能等同于“引用来源”。
- 单次快照:2026-11-03 08:40–08:41 抓取一次,未做 12/24 小时复测。
- 正则解析:不执行 JS,脚本插入的链接与分享组件不可见。
- 外壳阈值:5 KB 是操作定义;少于 5 KB 不一定都是外壳,本期由人工抽查确认。
- 样本框:10 个站点、36 页 pilot,不外推行业。
数据与复算
匿名数据:equipment-article-links-2026.csv(36 行 × 22 列:链接类型、target/rel、外链去重、可见字符、链接密度、状态与字节数)。仓库内为 docs/research/2026-11-article-links.csv。原始 HTML 与抓取记录只留在站外,不随站点部署。
解析:scripts/article_link_probe.py;单元测试 scripts/test_article_link_probe.py(10 项,无网络)。运行:
python -m unittest scripts.test_article_link_probe
配套:首页链接结构 pilot、首页链接可访问名称 pilot、文章页可见日期 pilot、首页锚文本 pilot。
数据来源与口径
- 样本框:第 28 期文章页样本(12 站、46 URL),本期 41 个 200。
- 抓取:2026-11-03 08:40–08:41(Asia/Shanghai),串行、站间 ≥0.6 秒。
- 统计:页面级 href 分类、target/rel 属性、外链 URL 去重与可见字符。
- 外壳页:响应小于 5 KB 的 5 个同站 URL,单列不计入 36 页。