ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

内容质量检查流水线:从错别字到失效链接的全面校验

内容质量检查流水线:从错别字到失效链接的全面校验 前阵子我在整理自己博客后台时翻到一篇半年前阅读量还不错的旧文发现里面躺着一个前期完全没注意到的错别字还有一个早就失效的外部链接。那种感觉很难形容就像精心布置的客厅里墙角偏偏有一块没擦干净的污渍。也就是从那天开始我给自己立了个小目标所有内容在发布之前都必须达到 impeccable 的状态。这个词源于拉丁语原意是“无可指摘、没有瑕疵”放在内容创作里指的不是文采有多惊艳而是“没有低级错误、逻辑通顺、结构一致、链接和引用都站得住脚”。这篇文章就记录我是怎么把“无可挑剔”从一个感觉拆成具体可执行的检查流程并搭建了一套内容质量流水线。不管你是写博客、做技术文档还是日常发布运营文案这套思路都能直接套用。1. 项目立项为什么把“无可挑剔”当成工程问题大部分内容创作者都有过这样的体验发布之前检查了三遍发布之后第二天再看还是发现某个地方不顺畅。问题不在于你不够认真而在于“认真检查”本身是不可量化的。只要没有明确规则每一次校对都是在凭感觉碰运气。所以我当时的第一反应不是继续逼自己多读几遍而是把“impeccable”当成一个工程目标去拆解。1.1 所谓 impeccable到底指什么如果只说“高质量”“无瑕疵”这句话等于没说。因为每个人对质量的理解不一样作者觉得把话说通顺就够了编辑可能会盯着标点符号和术语一致性读者关心的则是信息是否准确、引用是否可靠。为了让全家人都在同一张桌子上吃饭我先把“impeccable”拆成了四个可验证的层次。第一层是拼写与语法。错别字、漏字、主谓不一致、标点误用这些是最容易被读者察觉的问题也是拉低信任感的头号杀手。第二层是风格与可读性。句子是否太长、被动语态是否过多、重点是否被埋在冗长表达里。第三层是结构与格式一致性。标题层级是否合理、代码块是否规范、列表是否统一、配图是否都有说明。第四层是事实与链接可靠性。引用的数据是否真实存在、外链是否还活着、内部锚点是否跳到了正确位置。这四个层次可以对应到不同的工具和检查手段。刚开始我列了一个简单对照表后面所有选型都围绕这张表展开。层次核心检查内容典型问题主要工具拼写与语法错别字、语法、标点“的地得”混淆、英文单词拼错LanguageTool、编辑器拼写检查风格与可读性句子长度、被动语态、用词长句堆砌、语气生硬Hemingway、Vale结构与格式Markdown规范、标题层级标题跳级、代码块缺语言标注markdownlint、prettier事实与链接外链有效性、内部锚点、数据来源链接404、引用数字失真lychee、自定义脚本1.2 为什么肉眼检查靠不住人眼对自家文字有一种“惯性忽略”。这是因为我大脑里装的不是文章本身而是“我想表达的意思”所以阅读时总会自动修正那些明显的错误。加上写作时的注意力集中在组织语言上校对属于第二任务大脑根本没有切换到纠错模式。我拿自己做了一次小样本对比一篇大约1500字的文章认认真真读一遍找出错别字和格式问题用时接近十分钟结果后来用工具跑一遍仍然能查出两处术语不一致和一个失效外链。不是说人工校对没用而是纯靠人眼做不到稳定复用状态好时能抓出很多问题状态差时基本白看。工具的作用不是替代作者而是充当一条兜底线把所有机械的、可枚举的检查点交给程序处理让作者把精力留给真正需要判断力的地方。2. 工具选型给文字装上质检仪说实话市面上能用的文字检查工具很多但没有任何一个能覆盖全部四个层次。我的选型原则很简单优先选能本地运行、规则可配置、跟主流编辑器与 CI 能顺利集成的工具。这样不依赖网络服务也不容易被商业产品的封闭格式绑架。目前我保留的主力工具就四个LanguageTool、Vale、markdownlint、lychee。2.1 拼写与语法层LanguageToolLanguageTool 是开源项目支持中文、英文、德文、法文等二十多种语言而且本地部署也很方便。它既可以作为桌面客户端使用也可以在 VS Code 里以插件形式跑甚至能通过 HTTP API 接入到自建流程中。我个人最喜欢的一点是它把“拼写错误”和“语法问题”分开报告方便我配置不同严重级别。实际使用中我发现它对英文语法的识别已经相当能打比如冠词缺失、主谓不一致、时态误用这些常见问题都能抓到。中文也能识别一部分错别字和搭配问题但准确率不如英文版本误报率也会偏高。所以我在配置里会把中文检查的严重级别调低一些只保留“明确错误”级别。Grammarly 我也试过体验很流畅尤其是浏览器插件几乎是无感存在。但它的致命问题有两个一个是文档长期存在云端对内容隐私敏感的场景不友好另一个是对中文几乎无能为力。如果你只写英文Grammarly 值得考虑但如果你和我一样是中英文混写LanguageTool 是更踏实的底座。2.2 风格与可读性Hemingway 和 ValeHemingway Editor 是一个风格检查工具核心逻辑就是“让句子更短、更直接”。它会把过长的句子标成黄色把特别拗口的句子标成红色还会统计被动语态、副词、复杂词数量。它很直观适合用来做内容修改的辅助阅读。但说实话Hemingway 更适合英文内容中文支持基本为零所以我通常只把它用在英文版本地化前的内容判断阶段。Vale 则完全不同它是一个基于规则的文本检查引擎不对语言本身做判断而是根据你写的规则去扫描文本。只要你能用 JSON 或 YAML 定义规则Vale 就能严格按规则执行。比如我可以规定“凡是产品名称出现时必须使用统一写法”“禁止使用‘非常’这种弱化表达”“每个标题长度不能超过40个字”。这就是它最强的地方把团队的风格规范变成机器能执行的检查项。Vale 的安装很简单在项目目录放一个.vale.ini配置文件里面定义样式规则包路径和目标文件后缀。启动时它会自动读取配置并扫描指定目录下的 Markdown 或 HTML 文件。后面我会展示一个最小可用配置初学者照抄也能跑起来。2.3 结构与链接完整性markdownlint 和 lychee很多人写 Markdown 容易忽略格式问题标题跳级了、列表缩进不一致、代码块没写语言类型、图片缺少替代文本。这些问题不会影响发布结果但是会严重影响文档质量和后续维护体验。markdownlint 就是为了治理这类问题存在的它遵循一套行业通用的 Markdown 规范校验规则非常细。检查链接是否有效用的是 lychee。它能递归抓取文本里的所有外链发出 HTTP 请求确认目标是否返回 200。这个工具是我在一次旧文排查中被刺激之后才加进工作流的——那篇文章里有一个链接指向的页面早就变成 404 了但发布时完全没人发现。加上 lychee 之后每次提交前跑一遍就能把这种低级问题直接挡在门外。3. 核心流程落地一条可复用的内容校验流水线工具选好了接下来就是把它们组织成一条稳定可执行的流程。我的原则是“三个阶段、三道防线”写作阶段靠编辑器实时提醒提交阶段靠 Git 钩子强制校验协作阶段靠 CI 统一跑全量检查。每一道防线目标不同互相之间不冲突也不重复。3.1 本地写作阶段让编辑器实时提醒在写作阶段我最看重反馈速度。只有在错误出现的那一刻就把它标出来作者才来得及一边写一边修。如果等写完整篇文章才去跑一次检查很多人会面对一堆错漏直接摆烂。我用 VS Code 作为主力编辑器配了三个插件LanguageTool 插件、markdownlint 插件、Prettier。LanguageTool 负责语法和错别字markdownlint 负责格式警告Prettier 负责格式统一。保存文件时自动格式化能解决掉一大半标点、空格、缩进的问题。需要注意一点不要把插件的警告级别全部拉满。刚开始我把 markdownlint 的所有规则都开了结果编辑器满屏都是黄色波浪线反而看不清重点。后来我调整策略只保留高价值的规则比如标题层级、代码块语言标注、列表缩进那些关于空行数量、行宽限制的规则直接关掉。工具是辅助不是用来制造焦虑的。3.2 提交阶段用 Git 钩子挡住低级错误编辑器实时提醒只能解决“作者愿意看提示”的场景。要是赶稿时昏了头完全可能忽略所有警告直接提交。这时候需要一道更加刚性的门禁提交时自动跑检查失败就不允许提交。我用 pre-commit 框架来管理 Git 钩子。只要在.pre-commit-config.yaml里声明要跑的检查工具每次执行git commit时它就会自动运行。路径很简单repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.6.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - repo: https://github.com/igorshubovych/markdownlint-cli rev: v0.41.0 hooks: - id: markdownlint args: [--config, .markdownlint.json] - repo: https://github.com/lycheeverse/lychee rev: v0.15.1 hooks: - id: lychee args: [--config, .lychee.toml]注意pre-commit 钩子只检查本次提交涉及的文件不会全量扫描整个仓库。这样设计是对的提交阶段要快、要轻只拦截当前改动可能引入的问题。把全量检查放在 CI 阶段才合理。3.3 CI 阶段全量校验合并到主分支前本地钩子只对做过了配置的人生效。如果团队协作其他成员可能没有安装 pre-commit或者干脆用不同编辑器那很多问题到了合并请求阶段才会暴露。所以我在 CI 里再增加一道全量校验由服务器统一执行。假设你正在用 GitHub可以在.github/workflows/quality.yml里配置这样一个任务name: content-quality on: pull_request: branches: [main] jobs: check: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Run markdownlint uses: DavidAnson/markdownlint-cli2-actionv15 with: globs: docs/**/*.md - name: Run Vale run: | curl -L --output vale.deb \ https://github.com/errata-ai/vale/releases/download/v3.2.0/vale_3.2.0_Linux_64-bit.deb sudo dpkg -i vale.deb vale sync vale docs/ --minAlertLevelerror - name: Check links run: lychee --config .lychee.toml docs/README.md docs/guide/*.mdCI 阶段一般比较慢因为要拉依赖、装工具、跑全量扫描但它在发布线路上可以接受。更重要的是它让质量门禁和具体某台电脑无关任何人在任何环境提交代码最终都要通过同一套标准。4. 实操过程中踩过的坑与排查记录任何流程优化真正有价值的往往不是顺利跑通的那一刻而是后续维护中不断涌现的坑。我在这套内容质量流水线跑了大半年中间至少推翻过三次配置也收到过来自同事的多次吐槽。这里挑几个最具有代表性的问题聊聊。4.1 误报太多导致检查形同虚设流水线刚上线的时候我几乎把 LanguageTool 的所有规则都打开了。结果第一次全量扫描出现了一千多处警告其中一半以上是无伤大雅的风格建议比如“这个词可以换一个更正式的同义词”“这个句子可以考虑拆分”。等到需要人工处理这些问题时几乎没人愿意碰那堆报告检查就慢慢流于形式。后来我明白了质量检查工具最怕的不是跑出来的问题太多而是问题里泥沙俱下导致真正严重的问题被淹没。解决办法很简单收缩规则集宁缺毋滥。我把 LanguageTool 的严重级别调到只保留错误级别关掉了大部分风格类建议markdownlint 也只保留不过关会被读者一眼发现的规则。第一次全量扫描的警告数从上千条降到几十条这个数量才是人可以也愿意处理的。4.2 中英文混排怎么处理我的博客和技术文档基本都是中英文混合的内容遇到的问题很典型LanguageTool 会把英文单词“impeccable”当成拼写错误因为它默认中文文档里不该出现英文同时它又把“VS Code”这种专有名词拆开检查导致误报。Vale 的默认规则对中文也几乎是白纸一张很多英文风格建议在中文本地化语境下根本不适用。我的解决方式是分语言配置。LanguageTool 里开启“多语言自动检测”让它识别当前句子的主语言而不是用单一语言规则去套所有内容。Vale 这边则完全放弃默认的英文风格包只保留我手工编写的、针对文档场景的自定义规则。另外中英文之间加空格的问题我直接交给 Prettier 解决保存时统一在中英文之间插入空格避免标题和段落里出现排版参差不齐的情况。4.3 规则配置的“最少够用”原则这条经验是从误报问题延伸出来的。很多工具给足了规则集新手容易陷入一种错觉规则开得越多质量就越有保障。实际操作中规则越多意味着误报越多、噪音越大、维护成本越高最终大概率会被人悄悄跳过。我后来给自己定了一条铁律每条规则都必须能回答“它到底预防了什么事故”。如果一条规则在三个月内都没有命中过我会直接删掉如果一条规则出现超过五次误报我会调整它的触发条件。做好记录很重要我每次调整规则都会随手在配置目录里留下备注说明改动原因。这里也分享一个小技巧当某篇需要特殊处理的文档出现例外情况时不要直接关掉工具而是用行内注释比如 markdownlint 支持!-- markdownlint-disable MD024 --Vale 支持!-- vale off --。这样既保证了极少数的合理例外又不会让整个文档失去检查覆盖。5. 从“措辞正确”到“内容可信”拼写、语法、格式、链接这些都属于“可枚举的问题”工具可以解决得很彻底。但 impeccable 还有一个层次是工具不太好覆盖的那就是内容本身是否可信可靠。尤其在今天大量内容都由 AI 参与生成表面顺滑的文字背后可能藏着根本没有依据的数据这个问题变得比以往更突出。5.1 给 AI 生成内容单独加一道核查工序我现在的工作流里有一个专门针对 AI 初稿的额外阶段。AI 生成的文本往往没有拼写错误语法也很漂亮但它会在最关键的地方一本正经地编造事实。比如它可能给出一个看起来很真实的数据引用但那个数据根本没有出处也可能把某个产品的发布时间说错到完全对不上。所以凡是 AI 参与生成或辅助的内容我会强制要求做到三件事第一所有主张、数据、结论必须能追到原文链接或可核对的来源第二涉及具体数量、日期、名称的信息单独建立一份清单逐项人工验证第三用 lychee 把所有引用链接跑一遍确认不是发布时才知道链接失效。这一步无法自动化替代但能通过流程把它变成强制动作而不是可选项。5.2 建立“发布前清单”把最后一道门留给人工具能检查的只是形式层真正判断“内容有没有价值”这件事只能由人来做。我在流程末尾放了一份发布前清单每次内容准备上线前都会逐项过一遍观点是否清晰逻辑是否完整有没有未验证的数据目标读者读完后能带走什么这些动作不依赖任何工具但它恰好是保证内容不至于沦为“语法正确却没有灵魂”的关键。我目前的建议是工具负责处理“看起来对不对”人负责处理“读起来有没有用”。两者配合才更接近真正意义上的 impeccable。这套内容质量流水线从搭起来到现在帮我挡掉的至少包括几十个错别字、十几个失效外链还有无数个格式不规范。更重要的是它让“认真校对”这件事不再是随状态起伏的主观动作而变成一个稳定执行的标准流程。如果你也经常发布内容我的建议是先别追求一步到位挑一个最容易让你感觉“丢脸”的检查项加进流程哪怕最开始只有一个工具也比没有强。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表