Link telefoniczny w HTML: klikalny numer i meta format-detection

Jak zrobić klikalny numer telefonu poprawnym linkiem tel:, dołożyć do niego link SMS albo WhatsApp i jak powstrzymać Safari, widoki WebView czy dawnego Edge przed samodzielną zamianą numerów w linki dzięki meta format-detection.

Edge: jak wyłączyć automatyczne wykrywanie numerów telefonu
Szybka odpowiedź

Klikalny numer zapisujemy tak: <a href="tel:+33612345678">06 12 34 56 78</a> — numer kierunkowy kraju, żadnej spacji w href, czytelny numer w treści linku. Odwrotnie, żeby przeglądarka sama nie zamieniała twoich numerów w linki, dodaj <meta name="format-detection" content="telephone=no"> w sekcji head i twórz linki tel: ręcznie.

Numer telefonu na stronie stawia dwa przeciwstawne pytania. Pierwsze: jak zrobić go klikalnym, żeby odwiedzający na telefonie zadzwonił jednym gestem? Drugie: jak powstrzymać niektóre przeglądarki przed samodzielną zamianą go w link, ze stylem, nad którym nie masz kontroli? Odpowiedzią na pierwsze jest link tel:, na drugie znacznik meta format-detection, pierwotny temat tego artykułu. Poniżej oba, w kolejności, w jakiej się ich potrzebuje.

Tworzenie klikalnego linku telefonicznego

Schemat URL tel:, opisany w RFC 3966, mówi przeglądarce, że kliknięcie ma wybrać numer. Na smartfonie otwiera się aplikacja Telefon z wpisanym numerem; na komputerze system proponuje aplikację do połączeń, jeśli jakąś ma (FaceTime, Teams, Skype), a jeśli nie ma, nie dzieje się nic.

html
<a href="tel:+33612345678">06 12 34 56 78</a>

Trzy zasady linku, który zadziała wszędzie:

  • Format międzynarodowy w href: +33, a po nim numer bez początkowego zera. Numer krajowy nie zostanie poprawnie wybrany z zagranicy ani z części aplikacji.
  • Żadnych spacji ani kropek w href. RFC dopuszcza myślniki i kropki jako separatory wizualne, ale nie wszystkie urządzenia je tolerują: najbezpieczniejszy jest ciąg samych cyfr. Czytelne formatowanie (06 12 34 56 78) trafia do tekstu linku.
  • Numer wprost w tekście. Sama ikona nie pomoże ani osobie czytającej stronę na komputerze bez telefonii, ani czytnikowi ekranu.

Dla numeru z wewnętrznym RFC przewiduje parametr ext: tel:+33123456789;ext=204. Obsługa w aplikacjach bywa różna; podaj numer wewnętrzny również w tekście.

Dobre praktyki wyświetlania

html
<p>
  Service client :
  <a href="tel:+33123456789" class="tel">01 23 45 67 89</a>
  (du lundi au vendredi, 9 h à 18 h)
</p>
css
/* Na dużym ekranie, gdzie bezpośrednie połączenie jest mało prawdopodobne, można zneutralizować wygląd linku */
@media (min-width: 64rem) {
  a.tel {
    color: inherit;
    text-decoration: none;
    pointer-events: none;
  }
}

Reguła CSS to wybór redakcyjny, a nie obowiązek: komputer z aplikacją do połączeń zadzwoni bez problemu. Wiele serwisów zostawia link aktywny wszędzie.

Ta sama zasada dotyczy wiadomości. Schemat sms: otwiera aplikację do wiadomości, a parametr body wypełnia z góry ich treść (zakoduj spacje i znaki specjalne).

html
<a href="sms:+33612345678">Envoyer un SMS</a>
<a href="sms:+33612345678?body=Bonjour%2C%20je%20souhaite%20un%20devis">SMS avec message</a>

WhatsApp udostępnia link uniwersalny wa.me, a po nim numer międzynarodowy bez + i bez zer:

html
<a href="https://wa.me/33612345678?text=Bonjour" rel="noopener" target="_blank">Écrire sur WhatsApp</a>

Na telefonie otwiera aplikację, na komputerze WhatsApp Web. Otwarcie linków sms: i wa.me zależy od zainstalowanych aplikacji: zawsze podawaj obok numer wprost.

Jak zablokować automatyczne wykrywanie numerów

To problem odwrotny i pierwotny temat tego artykułu. Niektóre środowiska wypatrują ciągów cyfr przypominających numer telefonu i same zamieniają je w linki tel:, podkreślone i kolorowe, choć twój HTML o to nie prosił. Numer katalogowy produktu, kod pocztowy z numerem ulicy albo identyfikator potrafią w ten sposób stać się klikalnymi „numerami” i rozbić układ strony.

Kto dziś co wykrywa:

  • Safari na iPhonie i iPadzie: wykrywanie domyślnie włączone na wszystkich stronach.
  • Widoki WebView w aplikacjach mobilnych (i część przeglądarek na Androidzie): zachowanie zmienne, często aktywne.
  • Klienty poczty: Apple Mail i aplikacja Mail w iOS wykrywają w e-mailach HTML numery, daty i adresy.
  • Dawny Microsoft Edge (silnik EdgeHTML, 2015-2020) powiązany ze Skype’em zamieniał numery w Windows 10: to właśnie ten przypadek opisywała pierwsza wersja artykułu. Dzisiejszy Edge oparty na Chromium już tego nie robi, podobnie jak Chrome i Firefox.

Znacznik, który wyłącza to zachowanie, umieszcza się w sekcji head:

html
<head>
  <meta charset="UTF-8">
  <meta name="format-detection" content="telephone=no">
  …
</head>

Od tej chwili przeglądarka nie tworzy już sama żadnego linku telefonicznego na stronie, a klikalne pozostają wyłącznie twoje jawne linki tel:. To zalecane połączenie: automatyczne wykrywanie wyłączone, a każdy numer, który ma być klikalny, oznaczony ręcznie i w poprawnym formacie międzynarodowym. Zachowujesz kontrolę nad stylem i unikasz fałszywych trafień.

Pozostałe wartości

Spotyka się zapis content="telephone=no, date=no, address=no, email=no", zwłaszcza w szablonach e-maili HTML, żeby Apple Mail nie podkreślał dat i adresów. Apple dokumentuje wyłącznie wartość telephone=no; pozostałe Safari i Mail tolerują, ale bez gwarancji. Przeglądarkom, które ich nie znają, nie przeszkadzają.

W e-mailu HTML

Najczęstszym przypadkiem nie jest już dziś strona, tylko e-mail: numer zamówienia albo kwota zamienia się w niebieski link w Apple Mail. Ten sam znacznik w sekcji head wiadomości załatwia sprawę. Dla klientów poczty, które go ignorują, rozpowszechniona sztuczka polega na owinięciu numeru linkiem w kolorze tekstu, co ustala styl, zamiast zostawiać go programowi.

html
<a href="#" style="color: #333333; text-decoration: none;">Commande n° 2026 0907 4512</a>

Dostępność i dane strukturalne

Dwa dodatki, każdy za jedną linijkę:

  • Atrybut aria-label potrafi uczytelnić numer czytnikom ekranu, które czasem odczytują go mało naturalnie, w rodzaju „zero sześć dwanaście…”: <a href="tel:+33612345678" aria-label="Appeler le 06 12 34 56 78">06 12 34 56 78</a>.
  • Na stronie firmowej właściwość telephone w danych Schema.org (Organization albo LocalBusiness) podaje wyszukiwarkom numer w formacie międzynarodowym, niezależnie od tego, jak jest wyświetlany: "telephone": "+33123456789".

Ściągawka

Cel Kod
Klikalny numer <a href="tel:+33612345678">06 12 34 56 78</a>
SMS z gotową treścią <a href="sms:+33612345678?body=Bonjour">…</a>
WhatsApp <a href="https://wa.me/33612345678">…</a>
Blokada automatycznego wykrywania <meta name="format-detection" content="telephone=no"> w sekcji head

Link telefoniczny to szczególny przypadek znacznika a; pozostałe atrybuty i schematy URL opisuje 20 znaczników HTML5, które warto znać.

Częste błędy

Spacje albo kropki w href href="tel:06 12 34 56 78" działa na jednych urządzeniach, a na innych nie. W href zostają wyłącznie cyfry, znak + i ewentualnie myślniki; formatowanie zostaje w tekście linku.
Numer krajowy bez kierunkowego tel:0612345678 nie wybierze poprawnego numeru z zagranicy. Zawsze pisz +33 i usuwaj początkowe zero.
Wstawienie format-detection w przekonaniu, że wyłącza link we wszystkich przeglądarkach Ten znacznik działa tylko tam, gdzie numery są wykrywane automatycznie (Safari iOS, widoki WebView, dawny Edge). Chrome i Firefox na komputerze niczego nie wykrywają, więc ich to nie dotyczy.
Pominięcie numeru w tekście Link, którego treścią jest sama ikona, jest nieczytelny dla kogoś, kto nie może kliknąć (komputer bez telefonii, czytnik ekranu). Numer musi być widoczny wprost.

CSSHTML

Damien Flandrin Web developer od 2010 roku, twórca Gekkode i Email Impact. Każdy artykuł jest sprawdzany na prawdziwym projekcie przed publikacją. Kontakt
Newsletter

Nowe testy, poradniki i projekty, e-mailem.

Powtarzalne testy, wersjonowany kod, datowane wyniki. Nigdy spamu.