squirrelscan
GitHub

Lorem ipsum in production: placeholders and leftovers

Filler copy, unrendered template syntax and a visible undefined all mean something shipped unfinished. squirrel names the family and shows a sample.

What placeholder text is

Placeholder text is anything on a live page that was never meant to be read: lorem ipsum, a theme’s demo copy, a template expression that never evaluated, a JavaScript value that was concatenated into a sentence, a TODO note.

Each family points at a different break in the publishing pipeline. Filler copy means the page was published before the copy was written. Unrendered template syntax means the engine never ran over that string. A visible undefined means the code printed a value it did not have; a visible [object Object] means it printed one it did have and coerced an object to a string on the way. All of them are visible to readers and to search engines exactly as written.

What squirrel checks

The rule runs on every crawled page over the prose in <body>, excluding scripts, styles and code-like elements, and over the page’s <title>. It emits a check named placeholder-content for the body, and a second one named placeholder-title only when the title shows a value:

  • 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 placeholder or template leftovers in visible text.
  • Warn or fail otherwise. Message: 3 placeholder occurrence(s) in visible text: lorem ipsum filler (lorem), naming each family with the marker token that matched rather than a passage excerpt. Each family is listed as an item with its own count and samples.
  • placeholder-title warns when a whole segment of the title is exactly undefined, null or NaN, the way ${title} | Acme renders when the value is missing, and fails when the title holds [object X] anywhere. Segments are split at |, -, –, —, ·, •, », ›, / and ::. Message: Title shows a JavaScript value: {value} or Title shows a stringified object: {value}, with the title as the value. A page whose <h1> or one of whose <code> elements is exactly that word is about it, as MDN’s undefined - JavaScript | MDN is, and is not reported. A clean title adds no row.

Six families are detected, reported under these labels: lorem ipsum filler, theme boilerplate, unrendered template syntax, stringified object in copy, JavaScript value in copy and source-comment marker. The status is fail when lorem ipsum, unrendered template syntax or a stringified object was found, because none of those has an innocent reading, and warn for the other three. Severity for the rule is warning, weight 6. The rule is skipped on soft 404 pages.

This rule is the one that reports a stringified value in the title. core/meta-title judges whether the title is there and how long it is, not what it says.

How to fix it

Replace the copy, and add the affected fields to whatever check gates publishing. A theme’s demo text usually survives because nobody knows which fields still hold it.

For unrendered template syntax, render server-side or delete the stale copy. For a visible undefined or NaN, guard the field at the point of render rather than hiding it in CSS. For a TODO marker, finish it or remove it.

Rule IDcontent/placeholder-text
CategoryContent
ScopePer-page
Severitywarning
Weight6/10

Enable / disable

Disable this rule

[rules]
disable = ["content/placeholder-text"]

Disable all Content rules

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

Enable only this rule

[rules]
enable = ["content/placeholder-text"]

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 placeholder families found and a sample of each. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.

Type to search…

↑↓ navigate↵ openesc close