To make a phone number clickable, put a tel: URI in an HTML anchor’s href attribute:
<a href="tel:+1-212-555-0101">+1-212-555-0101</a>
The link is standard HTML. When a visitor activates it, the browser or operating system hands the number to an available phone or calling application. The markup cannot guarantee that every device can place a call.
The basic click-to-call link
An ordinary anchor becomes a phone link when its destination starts with tel:. The telephone URI scheme is defined by RFC 3966, and MDN lists telephone numbers as valid anchor destinations.
<a href="tel:+1-212-555-0101">+1-212-555-0101</a>
Replace the example number with the real number for your business, office, or support team. No JavaScript is required, and there is no special HTML element for phone calls.
#1 Best Overall
- HTML CSS Design and Build Web Sites
- Comes with secure packaging
- It can be a gift option
Use an international number in the URI
For a public page, put the number in global form in the href, beginning with a plus sign and country code. You can still show a locally familiar format to visitors. RFC 3966 gives this pattern:
<a href="tel:+1-201-555-0111">(201) 555-0111</a>
The URI and the visible label serve different purposes. The URI is machine-readable and internationally addressable; the label can match the conventions of the audience reading the page. Do not publish the RFC’s example numbers as your own contact details.
Make the link label clear and accessible
Use the number itself or a phrase that tells users what will happen. A visitor who encounters the link through keyboard navigation or a screen reader should not have to guess where it leads.
- Good:
+1 201 555 0111 - Good:
Call +1 201 555 0111 - Less informative:
Click here
MDN’s anchor guidance recommends link text that indicates the destination, while RFC 3966 recommends enclosing the telephone number in the link. If your design displays a heading such as “Sales,” include the number in the link text or an accessible name rather than relying only on surrounding context.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minuteA complete HTML example
This standalone page includes a heading, visible number, and a second link with an action-oriented label. Replace both the displayed and URI values with your real contact number.
Rank #2
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Contact us</title>
</head>
<body>
<main>
<h1>Contact our team</h1>
<p>Phone: <a href="tel:+1-201-555-0111">+1 (201) 555-0111</a></p>
<p><a href="tel:+1-201-555-0111">Call +1 201 555 0111</a></p>
</main>
</body>
</html>
The two anchors point to the same telephone URI. Keeping the number in both the destination and the visible text also makes the intended action obvious when styles are unavailable.
Optional styling without changing the link
You can style a phone link as text, a button, or a card. Styling does not change how the telephone URI works.
.phone-link {
display: inline-block;
padding: .65rem 1rem;
border-radius: .35rem;
background: #0b63ce;
color: #fff;
text-decoration: none;
font-weight: 600;
}
.phone-link:focus-visible {
outline: 3px solid #111;
outline-offset: 3px;
}
<a class="phone-link" href="tel:+1-201-555-0111">
Call +1 201 555 0111
</a>
Do not remove the text label merely because an icon is present. If an icon is decorative, hide it from assistive technology with the appropriate markup and keep the action in text.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →What happens on different devices
A tel: link requests telephone handling; it does not itself dial a number. The device and its configured applications decide what happens next. MDN describes several possible outcomes:
| Visitor’s setup | Possible result |
|---|---|
| Mobile device with a phone application | The phone application may open and offer or begin dialing. |
| Desktop with a calling application | The operating system may offer an application such as Skype or FaceTime, depending on configuration. |
| No suitable handler | The browser may show an error, offer another application, save the number, or pass it to another device. |
| iOS device without the Phone app | Apple’s archived Phone Links guidance says a warning is displayed; this is historical platform guidance, not a promise for every current iOS release. |
Test the link on the operating systems and browsers your audience actually uses. A successful navigation to a calling application is the expected result; a web page cannot force a call on a device that has no telephone handler.
Rank #3
User consent and safety
Activating a phone link must remain a deliberate user action. RFC 3966 states that web clients and similar tools MUST NOT use the “tel” URI to place telephone calls without the explicit consent of the user of that client.
A normal click or tap that opens the device’s call confirmation flow respects that requirement. Do not trigger a tel: navigation automatically on page load, through an unsolicited timer, or from background code.
Testing checklist
- Open the page over the same protocol and domain used in production.
- Inspect the rendered anchor and confirm that
hrefbegins withtel:, nothttp:or a text-only number. - Check that the URI contains the global number, including country code.
- Check the visible label at normal zoom and with CSS disabled.
- Activate it on a phone with a working cellular or calling app.
- Activate it on a desktop with the calling software your organization supports.
- Confirm that the user receives the operating system’s normal confirmation or application chooser rather than an unexpected automatic call.
Common problems and fixes
The number is not clickable
Inspect the HTML source or browser developer tools. The number must be inside an <a> element with an href beginning with tel:. A phone number written only as text has no activation behavior.
The link opens the wrong application
This is controlled by the visitor’s operating-system and browser associations, not by alternative HTML syntax. Ask the user to choose or configure the preferred calling application, then test the link again.
The URI contains local punctuation or a local-only number
Keep local formatting in the visible label if desired, but use the global form in href as recommended by RFC 3966. For example, display (201) 555-0111 while linking to tel:+1-201-555-0111.
A desktop visitor sees no call prompt
A desktop may not have a telephone handler. The markup is still valid; provide an alternate contact method, such as an email link or a copyable number, for visitors whose systems cannot process telephone URIs.
Rank #4
- Brand: Wiley
- Set of 2 Volumes
- A handy two-book set that uniquely combines related technologies Highly visual format and accessible language makes these books highly effective learning tools Perfect for beginning web designers and front-end developers
An iPhone displays a warning
Apple’s archived documentation records a warning on iOS devices without the Phone app. Treat that message as a platform safeguard, not as evidence that the HTML is malformed.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →The page tries to call without a click
Remove automatic navigation or scripts that assign a tel: URL without a user gesture. Explicit consent is required by RFC 3966.
When a generated site or CMS creates the link
Site builders often have a “Phone,” “Call,” or “Telephone” field. Regardless of the editor’s label, verify the final rendered HTML. The result should be equivalent to:
<a href="tel:+1-201-555-0111">+1 (201) 555-0111</a>
Do not paste tel:+1-201-555-0111 into the visible text and assume it will become a link automatically; the editor must output an anchor or provide an explicit link control.
Or skip the browser setup
If you need a clean image or PDF of the page that contains your phone link, ScreenshotNeo can capture the URL through one request. Its consent step accepts the cookie banner like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be disabled. Only clean shots are billed: bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and response headers identify the page verdict and billing status. Its MCP server provides take_screenshot, get_page_info, and capture_pdf tools to Claude, Cursor, and other MCP clients.
See the ScreenshotNeo documentation for request options. The following cURL request captures a page as WebP:
Best Value
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com/contact -o shot.webp
The same request in Python:
import requests
r = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={"access_key": "YOUR_API_KEY", "url": "https://example.com/contact"},
timeout=90,
)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
And in Node.js:
const q = new URLSearchParams({
access_key: 'YOUR_API_KEY',
url: 'https://example.com/contact'
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot failed: ${res.status}`);
const fs = await import('node:fs/promises');
await fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));
ScreenshotNeo supports full-page captures with lazy images loaded, CSS-selector element shots, dark mode, 12 device presets and custom viewports, retina scale, PDF paper and page-range controls, custom CSS and JavaScript, pre-capture clicks, hidden selectors, selector or network-idle waits, request and resource blocking, custom headers, cookies, user agents, authorization, timezone and geolocation, transparent backgrounds, resizing, chosen cache TTLs, signed image links, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API, an OpenAPI specification, and parameter names used by other screenshot APIs. Free accounts include 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account.
Performance, reliability, and maintenance
A telephone anchor is static markup, so it adds no network request and has negligible page overhead. Keep the destination number in one source of truth when possible: if a business number changes, update the URI and the visible label together. After publishing, re-run the device tests because calling-app associations can change independently of your page.
Frequently Asked Questions
Can I use a telephone link in an email or PDF?
Only if the destination environment preserves and supports the tel: URI. In an HTML page, use the anchor form shown above; for documents or email clients, verify that the exported file or client keeps the link and has a configured calling application.
Does a tel link reveal the visitor’s phone number to the website?
The anchor sends the visitor to the device or calling application. It does not provide your page with a completed-call result. Any additional analytics or call-tracking behavior would require separate software and should be documented independently.
Should I create separate links for mobile and desktop visitors?
Usually no. One standards-based tel: link lets each device choose its configured handler. Add an alternate contact method for visitors whose devices do not have a telephone application.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




