При подключении комментариев Telegram к WordPress иногда вместо виджета появляется ошибка про отсутствие канонического URL. Текст сообщения обычно такой:
Discussion is not available at the moment. Please add a
<link rel="canonical" href="%page_url%">tag in the page header with the canonical URL of the current page.
Виджет не может привязать обсуждение к странице, пока в <head> нет канонического адреса текущей записи. Ниже: как добавить canonical и корректно подключить скрипт комментариев на single-страницах.
В чём суть проблемы
Canonical часто уже выводит WordPress или SEO-плагин (Yoast, Rank Math, SEO Framework и т.п.). Если тега нет (отключён в плагине, кастомная тема без вывода, конфликт шаблонов), Telegram Comments не находит URL страницы и отказывается показывать обсуждение.
Что такое канонический URL
Канонический URL: основной адрес страницы. Для поисковиков он задаёт предпочтительный вариант индексации (с www или без, со слешем или без). Для Telegram Comments тот же тег служит идентификатором: по нему система связывает тред с конкретной записью.
Добавление канонического URL
Если SEO-плагин canonical не выводит, его можно добавить вручную в functions.php дочерней темы. Пример для типов post и project (подставьте свои CPT при необходимости):
function add_canonical_url() {
if ( is_singular( 'post' ) || is_singular( 'project' ) ) {
echo '<link rel="canonical" href="' . esc_url( get_permalink() ) . '" />' . "\n";
}
}
add_action( 'wp_head', 'add_canonical_url' );
Кратко по коду:
is_singular( 'post' )/is_singular( 'project' ): только single записи и проектов, не архивы и не главная.get_permalink(): постоянная ссылка текущей записи; её и отдаём как canonical.esc_url()страхует вывод.add_action( 'wp_head', ... ): вставка в<head>страницы.
Важно: не дублируйте canonical. Если Yoast или другой SEO-плагин уже печатает rel="canonical", либо отключите вывод у плагина для нужных типов, либо не добавляйте свой хук. Два тега с разными URL хуже, чем один согласованный.
Подключение скрипта Telegram Comments
Сам виджет подключают скриптом с telegram.org. Имеет смысл грузить его только там, где нужны комментарии: на single постах и проектах, а не на всём сайте.
function add_telegram_script_before_comments() {
if ( is_singular( 'post' ) || is_singular( 'project' ) ) {
echo '
<script async
src="https://telegram.org/js/telegram-widget.js?21"
data-telegram-discussion="drslon_channel"
data-comments-limit="30"
data-color="5282FF"
data-dark="0"></script>
';
}
}
add_action( 'comment_form_before', 'add_telegram_script_before_comments' );
Параметры виджета:
data-telegram-discussion: username канала или ссылка на группу/топик, с которым связаны обсуждения (в примереdrslon_channel; замените на свой).data-comments-limit: сколько комментариев показывать (здесь 30).data-color: акцентный цвет виджета в hex без#.data-dark:0светлая тема,1тёмная.- Хук
comment_form_before: вывод перед стандартной формой комментариев WordPress. Если форма отключена или шаблон другой, можно повесить наwp_footerили вывести скрипт в шаблоне single.
Полный фрагмент для functions.php
Canonical + виджет в одном блоке:
// Канонический URL в head (если его ещё не выводит SEO-плагин)
function add_canonical_url() {
if ( is_singular( 'post' ) || is_singular( 'project' ) ) {
echo '<link rel="canonical" href="' . esc_url( get_permalink() ) . '" />' . "\n";
}
}
add_action( 'wp_head', 'add_canonical_url' );
// Скрипт Telegram Comments перед формой комментариев
function add_telegram_script_before_comments() {
if ( is_singular( 'post' ) || is_singular( 'project' ) ) {
echo '
<script async
src="https://telegram.org/js/telegram-widget.js?21"
data-telegram-discussion="drslon_channel"
data-comments-limit="30"
data-color="5282FF"
data-dark="0"></script>
';
}
}
add_action( 'comment_form_before', 'add_telegram_script_before_comments' );
Проверка
- Откройте single-запись, «Просмотр кода страницы» и найдите
rel="canonical"с URL этой записи. - Убедитесь, что на странице один такой тег, без расхождений с фактическим адресом.
- Проверьте загрузку
telegram-widget.jsи появление блока обсуждения (нужна привязка канала/группы к сайту в настройках Telegram). - После правок
functions.phpсбросьте кэш страницы и CDN, если они есть.
Краткий итог
Ошибка «Discussion is not available…» почти всегда лечится появлением корректного <link rel="canonical"> на single-странице. Дальше остаётся вывести виджет только там, где нужны комментарии, и указать свой data-telegram-discussion. Если canonical уже даёт SEO-плагин, достаточно проверить его наличие и подключить скрипт без дублирования тега.


