Tel & Mailto Links
Validates that phone numbers use the tel: scheme and email addresses use the mailto: scheme for one-click contact on mobile devices.
- Wrap phone numbers in `<a href="tel:+15551234567">` for click-to-call on mobile devices
- Wrap email addresses in `<a href="mailto:contact@example.com">` for one-click email compose
- Use E.164 format for `tel:` links: `+` followed by country code and number, no spaces or dashes
- Plain text phone numbers and emails require users to copy-paste — a UX and conversion friction point
Rule Details
The tel: and mailto: URI schemes are standard HTML link types that invoke native device capabilities such as the phone dialer and email client. RFC 3966 (opens in new tab) defines the tel: syntax, and the same crawlable-link expectations in invalid links still apply even when the goal is contact UX rather than page discovery.
Code Examples
<!-- ✅ Correct: E.164 format in href, human-readable in link text -->
<a href="tel:+442071234567">+44 (0)20 7123 4567</a>
<!-- ✅ US number -->
<a href="tel:+15551234567">(555) 123-4567</a>
<!-- ❌ Wrong: spaces in href value -->
<a href="tel:+1 555 123 4567">...</a>
<!-- ❌ Wrong: number not linked at all -->
<p>Call us: +1 (555) 123-4567</p>E.164 Format
E.164 is the international standard for phone numbers:
- Starts with
+ - Followed by country code (1–3 digits)
- Followed by subscriber number (no spaces, dashes, or parentheses)
- Maximum 15 digits total
+12125551234 (US: +1, area 212, number 5551234)
+442071234567 (UK: +44, London 020, number 71234567)
+33123456789 (France: +33)Why It Matters
On mobile devices, tel: and mailto: links trigger the native phone dialer and email client with one tap; plain-text contact info forces copy-paste and measurably reduces contact conversion rates. MDN's tel-link reference (opens in new tab) is the practical implementation baseline here.
mailto: Links
<!-- ✅ Basic email link -->
<a href="mailto:hello@example.com">hello@example.com</a>
<!-- ✅ With subject and body pre-filled -->
<a href="mailto:support@example.com?subject=Help%20Request&body=Hello%2C%20I%20need%20help%20with...">
Contact Support
</a>
<!-- ✅ Multiple recipients (separate with comma) -->
<a href="mailto:one@example.com,two@example.com">Email both contacts</a>
<!-- ❌ Wrong: email as plain text -->
<p>Email: support@example.com</p>Schema.org + Contact Links
When combined with LocalBusiness schema or Person schema:
<script type="application/ld+json">
{
"@type": "LocalBusiness",
"name": "Acme Plumbing",
"telephone": "+15551234567",
"email": "info@acmeplumbing.com"
}
</script>
<!-- Ensure the visible page links match schema data -->
<a href="tel:+15551234567">(555) 123-4567</a>
<a href="mailto:info@acmeplumbing.com">info@acmeplumbing.com</a>Accessibility Note
For screen readers, the link text should be the human-readable number, not the E.164 format:
<!-- ✅ Screen reader reads: "plus one five five five one two three four five six seven" -->
<a href="tel:+15551234567" aria-label="Call us at 1 555 123 4567">
+1 (555) 123-4567
</a>Exceptions
- Necessary utility or compliance pages can be intentionally brief and should not be judged by the same editorial-depth expectations as ranking-focused content.
- AI-assisted drafting is not a failure by itself; flag unsupported claims, missing editorial review, or low-originality output instead.
- When a page has both trust-signal issues and crawl/index problems, make the page eligible to rank first and then improve the content quality signals.
Standards
- Use these references as the standard for the final search-facing HTML, metadata, and crawl behavior.
- Check the implementation against IETF RFC 3966: The tel URI for Telephone Numbers before treating the rule as satisfied.
- Check the implementation against MDN: tel URI scheme before treating the rule as satisfied.
Verification
Automated Checks
- Inspect rendered HTML and HTTP headers to confirm the expected metadata or crawlability signal is present.
- Test the affected URL with Google Search Console or equivalent tooling where relevant.
- Re-crawl a representative page set after deployment.
Manual Checks
- Confirm the change does not create conflicting canonical-url, robots, or structured-data signals.
Use with AI
Copy these prompts to use with your AI assistant, or install the MCP server to use directly from Claude, Cursor, or Windsurf.
Check
Verify implementation
Scan the HTML for phone numbers (patterns like `\+?[0-9\s\-().]{7,}`) and email addresses (`[\w.-]+@[\w.-]+\.[a-z]{2,}`). Verify that phone numbers are wrapped in `<a href="tel:...">` and emails in `<a href="mailto:...">`. Flag any that appear as plain text.
Fix
Auto-fix issues
Wrap each phone number in an anchor tag: `<a href="tel:+15551234567">+1 (555) 123-4567</a>`. Wrap each email in: `<a href="mailto:contact@example.com">contact@example.com</a>`. Format tel: values using E.164 (+[country][number]) without spaces.
Explain
Learn more
Explain how tel: and mailto: URI schemes work in HTML, why E.164 format is required for international compatibility, and how these links improve mobile UX and contact conversion rates.
Review
Code review
Review metadata generation, rendered HTML, structured data, and response headers related to Tel & Mailto Links. Flag exact routes or templates where search-facing output violates the rule, and describe how to verify the final page output.