Code blocks have language annotations
What it checks
AI agents use language annotations on code blocks to apply the correct syntax understanding and provide accurate code explanations. Without them, agents must guess the programming language, which can lead to incorrect interpretations in AI-generated code answers.
Why it matters
An HTML-to-Markdown converter of the kind that feeds page text to LLMs emits a fenced code block whose info string names the language only when the <code> element carries a language-* class. Without that class the fence is emitted unlabeled, and the language must be inferred from the code text itself.
Evidence
- WHATWG HTML Standard §4.5.15 (
codeelement): “There is no formal way to indicate the language of computer code being marked up. Authors who wish to markcodeelements with the language used, e.g. so that syntax highlighting scripts can use the right rules, can use theclassattribute, e.g. by adding a class prefixed with “language-” to the element.” The spec’s own example is<pre><code class="language-pascal">…</code></pre>— the exactpre > codeidiom the audit queries. Note the named consumer is “syntax highlighting scripts”, not AI agents — html.spec.whatwg.org/…/text-level-semantics.html (verified 2026-08-21) - Turndown, the widely used HTML→Markdown library, derives the fence language from precisely this class in its
fencedCodeBlockrule:const className = node.firstChild.getAttribute('class') || ''thenconst language = (className.match(/language-(\S+)/) || [null, ''])[1]— raw.githubusercontent.com/…/commonmark-rules.js (verified 2026-08-21) - Jina Reader, an HTML-to-Markdown service built for LLM consumption, uses Turndown as its conversion engine; it exposes
x-md-*headers to “fine-tune markdown output” viasrc/dto/turndown-tweakable-options.ts. It returns markdown, frontmatter and chunked output for language models. Thelanguage-*class is therefore a real, traceable input to at least one production agent-facing pipeline — github.com/…/reader (verified 2026-08-21)
Limits
No AI vendor documentation states that any agent reads code-block language classes, and no published study measures a change in AI answer quality attributable to them. The causal step from “fence is labeled” to “agent explains the code correctly” is untested. Modern LLMs also identify programming languages from source text without an annotation. The convention is also not the only one in use. The HTML Standard itself concedes “there is no formal way”. Shiki’s data-language on <pre>, GitHub-style lang-* and Prism’s class-on-<pre> are all in live use. Turndown’s language- regex on node.firstChild matches none of them. That weakens the practical reach of the one traceable consumer path as much as it weakens the audit’s detector.
How it scores
The convention is explicitly described in the HTML Standard, and mechanically consumed by the Markdown converter behind common LLM-facing readers. But no vendor documents an AI agent reading it, and no study measures an effect on answer quality. The mechanism is plausible and unproven.
Sources
- HTML Standard — the code element — WHATWG, spec (verified 2026-08-21)
- turndown — commonmark-rules.js — mixmark-io, repo (verified 2026-08-21)
- jina-ai/reader — Jina AI, repo (verified 2026-08-21)