squirrelscan
GitHub

Literal **bold** on the page: markdown that never rendered

Visible asterisks, bracket links or escaped tags mean a value printed as text instead of markup. squirrel reads the prose and names the mistake.

What unrendered markup is

Unrendered markup is authored markup that reached the reader as literal text. Three different mistakes produce it, and they have different fixes.

Literal markdown, **bold** or [text](url) on screen, means a field stored as markdown was printed without a markdown-to-HTML pass. A visible <p> or <a href means HTML was escaped when it was meant to be rendered, which is one escape rather than two: the source said &lt;p&gt;. A visible &amp;nbsp; means the entity itself was encoded a second time on the way in.

What squirrel checks

The rule runs on every crawled page over the prose in <body>, excluding scripts, styles and the code-like elements <code>, <pre>, <samp> and <kbd>, so a page deliberately quoting markup is not reported. It emits a single check named unrendered-markup:

  • Skipped when there is no parsed document. Message: No document available.
  • Skipped when there is no <body>. Message: No body element to read visible text from.
  • Pass when nothing matched. Message: No unrendered markup in visible text.
  • Warn or fail otherwise. Message: 4 unrendered markup occurrence(s) in visible text (markdown-emphasis, markdown-link): example **bold**.

Seven families are detected: markdown-emphasis, markdown-link, markdown-heading, markdown-code-fence, markdown-inline-code, escaped-html-tag and double-encoded-entity. Inline code is corroborating only: it appears in the details when something else fires and never accuses on its own, and it is excluded from the count and the example in the message.

The status is fail when an escaped tag or a double-encoded entity was found, since nothing renders those on purpose outside a code block, or when three or more literal markdown occurrences were found. One stray asterisk pair is a typo; three is a template that never ran its markdown pass. Severity for the rule is warning, weight 5. The rule is skipped on soft 404 pages.

How to fix it

Find the field rather than the page. A CMS storing markdown and a template printing it raw produces the same literal text everywhere that field appears, so fixing one page leaves the rest broken.

For escaped HTML, trace the rendering path before changing anything. The value is being escaped somewhere it was meant to be rendered as markup, and the fix is to render it through a sanitising HTML path rather than to switch autoescaping off. For a double-encoded entity, re-import the affected content.

If the markup is meant to be on display, put it in <code> or <pre>, which this rule skips.

Rule IDcontent/unrendered-markup
CategoryContent
ScopePer-page
Severitywarning
Weight5/10

Enable / disable

Disable this rule

[rules]
disable = ["content/unrendered-markup"]

Disable all Content rules

[rules]
disable = ["content/*"]

Enable only this rule

[rules]
enable = ["content/unrendered-markup"]

enable replaces the default ["*"], so this is the only rule selected. Leave disable out: a rule that matches any disable pattern is skipped even when enable names it. Only an enabled setting under a rule’s own [rule_options] table overrides both lists.

Content findings ship in every audit next to the SEO, performance and agent experience rules. See Fix SEO issues with AI for how an agent works through a report.

References

Check your site

Run squirrel audit https://example.com and open the Content section of the report. Each page is listed with the markup families found and an example. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.

Type to search…

↑↓ navigate↵ openesc close