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-titlewarns when a whole segment of the title is exactlyundefined,nullorNaN, the way${title} | Acmerenders 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}orTitle 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’sundefined - JavaScript | MDNis, 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 ID | content/placeholder-text |
| Category | Content |
| Scope | Per-page |
| Severity | warning |
| Weight | 6/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.
Related rules
- content/unrendered-markup: markup that reached the reader as literal text.
- content/dev-leakage: development hosts in the same production copy.
- content/mojibake: encoding corruption in the same body text.
- content/word-count: pages that are short because the copy was never written.
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.