Как запретить автоматическое формирование ссылок вида tel:?

Проблема: в футере сайта есть ссылка href="tel:8800...", но в метрике формируются URL вида /catalog/tel:.../, и вебмастер сообщает, что страница /catalog/ исключена из индекса как дубликат /catalog/tel:.../. <br/> <br/> Я добавил rel="nofollow" и в robots.txt прописал Disallow: /tel:, но это не помогает — каждую неделю приходит отчёт, что та или иная страница удалена из индекса из‑за дубля с tel. <br/> <br/> ИИ советует проверить sitemap, редиректы и прочее, но у меня ничего этого нет: ссылка статична и не участвует ни в каких обработчиках или генерациях. Что можно сделать?
  • 1 июля 2026 г. 9:00
Ответы на вопрос 3
Коротко — проблема не в rel="nofollow" и не в том, что ссылка «статична». Явный и надёжный выход — не давать поисковым ботам возможность получать страницу по адресу с «tel:…» (отдавать 404/410 или 301 на канонический URL) и/или исправить сам HTML так, чтобы парсеры не воспринимали это как ссылку на путь вашего сайта. Ниже — план действий и конкретные варианты исправления.

Почему это происходит
- Бот запрашивает URL вида /catalog/tel:8800... — сервер возвращает ту же страницу /catalog, получается дубликат и поисковик исключает одну из версий.  
- rel="nofollow" не мешает ботам запрашивать URL — он только уменьшает «вес» ссылки.  
- Disallow: /tel: не сработал, потому что у вас путь содержит /catalog/tel:… — правило не совпало (robots.txt сравнивает префиксы).  

Что можно сделать (по приоритету)

1) Самое надёжное — на сервере ловить запросы с "tel:" в пути и возвращать 404/410 или делать 301 на каноническую страницу
- Nginx (в server{}):
  if ($request_uri ~ "tel:") { return 410; }
  — это сразу прекратит индексацию таких URL и поисковики перестанут видеть дубликаты.

- Apache (.htaccess):
  RewriteCond %{REQUEST_URI} tel:
  RewriteRule .* - [G]
  — выдаёт 410 Gone.

2) Альтернатива — редирект 301 с /.../tel:... → правильный URL (или на корень), если хотите явно указывать канонику.

3) Правильно блокировать через robots.txt (как временная мера)
- Чтобы закрыть любые URL, содержащие "tel:" в любом месте, используйте шаблон (Yandex/Google поддерживают *):
  User-agent: *
  Disallow: /*tel:
  Но: robots.txt запрещает обход/сканирование, но не всегда удаляет URL из индекса, если на него есть ссылки. Лучше совмещать с пунктом 1.

4) Исправить отображение номера в HTML
- Убедитесь точно в исходнике: href="tel:+7800..." (с + и без лишних пробелов/слэшей). Проверьте отсутствие base href, который может влиять на разрешение ссылок.
- Если хотите полностью исключить возможность парсинга, можете не использовать href, а сделать кликабельность через JS:
  <span class="phone" data-tel="+7800...">8 (800) ...</span>
  и навесить onclick для мобильных: location.href = 'tel:' + this.dataset.tel;
  (Боты, не выполняющие JS, тогда не увидят «ссылку».)

5) Канонические теги
- На страницах ставьте rel="canonical" на главный адрес (/catalog). Если бот всё же скачивает /catalog/tel:..., canonical укажет, какую версию считать основной.

Диагностика — что проверить прямо сейчас
- Просмотрите исходный код страницы (view-source) и точно скопируйте значение href — нет ли опечаток, лишних слэшей, base href.
- Попробуйте вручную запросить URL, который в отчёте (например https://site.ru/catalog/tel:8800…) — какая ответ сервера (200/301/404)? Если 200 — отсюда и проблема.
- В Yandex.Webmaster можно посмотреть, когда бот заходил по такому адресу и какой код ответа получал.

Резюме
- Лучшее решение — настроить сервер: при запросе путей с "tel:" отдавать 404/410 или редиректить на правильную страницу. Это быстро и надёжно решит проблему с дубликатами.  
- Дополнительно: проверить HTML (правильный href), поставить canonical и/или временно закрыть с помощью robots.txt/*tel:.
Скорее всего, у тебя на сайте SPA (React, Vue) или какой-то самописный роутер на JS <br/> Робот Яндекса видит клик по ссылке с протоколом tel, твой JS-роутер перехватывает событие, пихает путь в history (получается /catalog/tel) и только потом открывает звонилку. Метрика это ловит как просмотр страницы и шлет в вебмастер <br/> <br/> Как чинить: <br/> 1. В JS-роутере добавь проверку. Если атрибут начинается с tel или mailto, не меняй URL <br/> 2. На саму ссылку повесь onclick с event.stopPropagation, чтобы твои глобальные листенеры не дергались <br/> 3. В robots.txt сделай Disallow для /tel (со звездочкой в конце) <br/> 4. В Вебмастере зайди в Индексирование -> Удалить URL и вручную снеси эти урлы. robots.txt только запрещает обход, но не выкидывает страницы из индекса моментально <br/> <br/> атрибут rel nofollow тут вообще бесполезен, он только вес не передает, но саму ссылку робот все равно парсит
дело может быть не в самом tel:, а в фиче вебмастера «обход по счётчику метрики» — робот подтягивает новые урлы прямо из хитов метрики, если счётчик привязан к сайту. если где-то в js клик по tel: улетает в <code>ym(id, 'hit', ...)</code> с конкатенацией текущего пути и href — вот и получается фантомный <code>/catalog/tel:.../</code> , никакой spa-роутер тут не нужен. поищи в коде вызовы ym с 'hit' рядом с обработчиками телефонных ссылок, и в вебмастере в индексировании → настройках проверь, включен ли обход по счётчикам.
Похожие вопросы