squirrelscan
GitHub

Fake phone numbers and example.com emails in production

A 555-01xx phone number or an address at example.com means a theme's contact block shipped unedited. squirrel flags template-default contact details and fails them on contact and checkout pages.

What placeholder contact details are

Placeholder contact details are the values a theme or template ships so the contact block has something in it: info@example.com, (212) 555-0123, 123 Main St, @yourhandle. They are meant to be replaced, and when nobody does, the page tells visitors to call a number that cannot ring and write to a mailbox that cannot exist.

That is a conversion bug, because nobody can reach the business, and a trust signal, because the page looks abandoned. It matters most on a contact page or a checkout, where the visitor is about to act on what the page says.

What squirrel checks

The rule runs on every crawled page over the visible prose in <body> and the href of every link outside a code sample, so <a href="mailto:info@example.com">Email us</a> is caught even though the link text looks fine. It emits a single check named placeholder-contact:

  • 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.
  • Skipped on documentation pages (a path under /docs, /developers, /api, /reference, /guides, /tutorials, /learn, /sdk or /examples), where these values are samples. Skip reason: documentation-page.
  • Pass when nothing matched. Message: No placeholder contact details in visible text or links.
  • Fail when something matched on a contact or checkout page. Message: 2 placeholder contact detail(s) on a contact or checkout page: placeholder phone number ((212) 555-0123), placeholder email address (info@example.com).
  • Warn when something matched on any other page.

Four families are detected, each listed as an item with its own count and samples:

FamilyMatches
placeholder email addressAddresses at example.com, example.org, example.net, test.com and yourdomain.com (subdomains included), and email@email.com. user@example.com.au is a real domain and is not matched.
placeholder phone numberThe fictional US range 555-0100 to 555-0199, the UK Ofcom drama range 07700 900000 to 900999 (also as +44 7700 900xxx), and 0000000000 or 000-000-0000.
placeholder postal address123 Main St, 1234 Street Address and City, State 12345.
placeholder social handle@yourhandle, @username, and profile URLs such as facebook.com/yourpage or linkedin.com/company/yourcompany.

A contact page is a page whose URL matches a contact pattern (in any of the languages squirrel recognises) or whose type is detected as a contact page. A checkout page has checkout, cart, basket, payment, billing or order as its last path segment.

Text inside <pre>, <code>, <samp>, <kbd>, a <template> and syntax-highlighted code containers is never judged, on any page. A developer page that shows user@example.com in a code block stays clean, even on a contact page. Plain prose that mentions @username on an ordinary page does warn, so keep sample values in a code block.

Severity for the rule is warning, weight 5. The rule is skipped on soft 404 pages.

How it relates to other rules

This rule only reports a placeholder that is on the page. A missing contact page, phone number or address is still reported by eeat/contact-page and eeat/physical-address, and this rule never emits an absence finding, so one missing real address is not reported twice.

How to fix it

Replace each value with a real one, or remove the block. Check the footer, the contact page, structured data, and every mailto: and tel: link, because themes repeat the same default in all of them.

If the page is documentation that shows these values as samples, put them in a code block.

Rule IDcontent/placeholder-contact
CategoryContent
ScopePer-page
Severitywarning
Weight5/10

Enable / disable

Disable this rule

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

Disable all Content rules

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

Enable only this rule

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

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.

Type to search…

↑↓ navigate↵ openesc close