В GeneratePress часто проблема не в отсутствии Open Graph, а в его дублировании. Тема сама по себе не обязана добавлять OG-разметку, но на практике она нередко появляется из нескольких источников: SEO-плагин, отдельный плагин для шаринга, настройки темы, а иногда ещё и код в дочерней теме. В итоге в исходнике оказываются два og:image, несколько twitter:card или конфликтующие meta property="og:title".
Для пользователя это выглядит как «картинка в соцсетях не та» или «Telegram/WhatsApp берут не тот заголовок». Для разработчика задача проще: найти источник дубля и оставить один контролируемый набор тегов.
Когда это действительно проблема
Сначала стоит убедиться, что речь именно о дублях, а не о том, что соцсеть кэшировала старую версию страницы. Проверять нужно исходный HTML, а не только предпросмотр ссылки.
Типичные симптомы
- в коде страницы два и больше блока с
meta property="og:*; - в Facebook Debugger или в превью Telegram подтягивается не та картинка;
- после смены изображения в записи соцсети продолжают показывать старый вариант;
- в исходнике есть и
twitter:card, и дубли от другого плагина; - SEO-плагин настроен, но тема или дополнительный плагин добавляют свои мета-теги поверх него.
Как быстро диагностировать источник
Откройте исходный код страницы и найдите строки og: и twitter:. Если теги повторяются, посмотрите, какой плагин отвечает за разметку. Обычно это видно по набору тегов: Yoast, Rank Math, All in One SEO, плагин для шаринга или кастомный код в functions.php.
Если GeneratePress используется вместе с дочерней темой, проверьте ещё и такие места:
functions.phpдочерней темы;- плагины для сниппетов кода;
- настройки SEO-плагина;
- кастомные вставки в шапку через хук
wp_head; - кэш плагина и CDN.
Что именно отключать в GeneratePress
Если OG-теги добавляет не сама тема, а ваш код или сторонний плагин, задача сводится к тому, чтобы убрать лишний генератор мета-тегов. В GeneratePress удобнее всего работать через хуки, потому что это не ломает обновления темы.
Ниже два рабочих сценария: отключить собственную вставку и оставить SEO-плагин, либо полностью убрать конфликтующий код и отдать разметку одному источнику.
Вариант 1: убрать кастомные OG-теги из дочерней темы
Если в functions.php уже есть код, который печатает Open Graph вручную, его лучше удалить или обернуть в условие. Пример типичной вставки, которую часто приходится вычищать:
add_action( 'wp_head', 'mytheme_open_graph_tags', 5 );
function mytheme_open_graph_tags() {
if ( is_singular() ) {
global $post;
$title = get_the_title( $post );
$url = get_permalink( $post );
$image = get_the_post_thumbnail_url( $post, 'full' );
echo '<meta property="og:title" content="' . esc_attr( $title ) . '" />' . "\n";
echo '<meta property="og:url" content="' . esc_url( $url ) . '" />' . "\n";
if ( $image ) {
echo '<meta property="og:image" content="' . esc_url( $image ) . '" />' . "\n";
}
}
}Если SEO-плагин уже формирует OG-разметку, этот код нужно удалить. Если нужен только один тег, например og:image для особого типа записей, лучше не печатать весь набор вручную, а точечно фильтровать данные в SEO-плагине.
Вариант 2: оставить один источник мета-тегов
Нормальная схема — один плагин отвечает за Open Graph и Twitter Cards, а всё остальное молчит. Это особенно важно, если у вас уже работает Yoast SEO, Rank Math или All in One SEO. GeneratePress в таком случае не должен добавлять ничего поверх.
Если дубли создаёт ваш собственный код, можно отключить его через условие:
add_action( 'wp_head', 'mytheme_open_graph_tags', 5 );
function mytheme_open_graph_tags() {
if ( defined( 'WPSEO_VERSION' ) || defined( 'RANK_MATH_VERSION' ) || defined( 'AIOSEO_VERSION' ) ) {
return;
}
if ( ! is_singular() ) {
return;
}
$post_id = get_queried_object_id();
$title = get_the_title( $post_id );
$url = get_permalink( $post_id );
$image = get_the_post_thumbnail_url( $post_id, 'full' );
echo '<meta property="og:title" content="' . esc_attr( $title ) . '" />' . "\n";
echo '<meta property="og:url" content="' . esc_url( $url ) . '" />' . "\n";
if ( $image ) {
echo '<meta property="og:image" content="' . esc_url( $image ) . '" />' . "\n";
}
}Это не универсальный рецепт для всех сайтов, но для типовой связки GeneratePress + SEO-плагин он помогает быстро убрать конфликт.
Пошаговое решение без лишнего риска
- Откройте исходный код страницы и найдите все вхождения
og:иtwitter:. - Определите, какой плагин или код их печатает.
- Оставьте один источник Open Graph-разметки.
- Очистите кэш сайта, сервера и CDN.
- Проверьте страницу в валидаторе соцсети или через повторный просмотр исходника.
Если у вас есть доступ к staging-копии, сначала проверьте изменения там. Это особенно полезно, когда OG-теги завязаны на шаблоны записей, а не на одну страницу.
Что делать, если дубли идут из SEO-плагина
В этом случае не нужно пытаться «победить» GeneratePress через хаки в теме. Проще отключить лишнюю разметку в самом SEO-плагине или убрать сторонний плагин шаринга. GeneratePress должен остаться нейтральным слоем, а не вторым генератором мета-тегов.
Если вы используете Clearfy Pro, там удобно чистить лишние элементы и дубли на уровне сайта, но принцип тот же: один источник мета-данных, остальные — выключены. Для GeneratePress это особенно важно, потому что тема часто используется в минималистичных сборках, где любой лишний код заметен сразу.
Как проверить, что решение сработало
Проверка должна быть не визуальной, а технической. Иначе легко принять старый кэш за рабочий результат.
- в исходнике страницы должен остаться один набор
og:title,og:description,og:imageиtwitter:card; - в DevTools на вкладке Elements не должно быть повторяющихся
meta property="og:*; - после очистки кэша соцсети должны подтягивать актуальную картинку и заголовок;
- при повторной публикации ссылки не должно быть скачков между разными изображениями;
- если есть CDN, проверьте, что он отдал уже обновлённый HTML, а не старую версию.
Полезно открыть страницу в режиме инкогнито и сравнить исходник до и после очистки кэша. Если дубли исчезли в HTML, но превью всё ещё старое, проблема уже не в GeneratePress, а в кэше самой соцсети.
Сравнение подходов
| Подход | Что делаем | Плюсы | Минусы |
|---|---|---|---|
| Плагин SEO | Оставляем OG и Twitter Cards в одном SEO-плагине | Меньше ручного кода, проще поддержка | Нужно следить за настройками плагина |
| Код в дочерней теме | Пишем мета-теги вручную через wp_head | Полный контроль над выводом | Легко получить дубли и ошибки при обновлениях |
| Комбинированный вариант | SEO-плагин для базовых тегов, код — только для исключений | Гибко для сложных шаблонов | Нужна дисциплина, чтобы не задвоить вывод |
Частые ошибки и как их исправить
Оставили старый код в дочерней теме
Самая частая причина дублей — забытый хук в functions.php или в плагине для сниппетов. Удаляйте не только функцию, но и сам add_action, иначе код может продолжать выполняться.
Очистили не весь кэш
Если на сайте есть кэш плагина, серверный кэш или CDN, изменения в HTML могут не попасть в браузер сразу. После правки очистите все уровни кэширования, иначе вы будете проверять старую версию страницы.
Пытаются отключить OG через CSS или шаблон записи
Open Graph — это мета-теги в <head>, а не элементы интерфейса. CSS здесь не поможет. Нужен либо отключаемый источник разметки, либо фильтр, либо удаление хука.
Смешивают несколько SEO-плагинов
Если одновременно активны два плагина, которые умеют генерировать OG и Twitter Cards, конфликт почти гарантирован. В GeneratePress это особенно заметно, потому что тема сама не маскирует проблему лишними слоями.
Практика безопасности и поддержки
Не редактируйте родительскую тему GeneratePress напрямую. Любое обновление затрёт изменения, и вы снова получите дубли или потеряете нужные теги. Для кода используйте дочернюю тему, mu-plugin или плагин для сниппетов, если он уже принят в проекте.
Если правка касается только одной группы страниц, лучше ограничить её условием is_singular() или проверкой типа записи. Так вы не сломаете архивы, главную и служебные страницы.
Когда нужно не просто убрать дубли, а системно почистить SEO-слой сайта на GeneratePress, имеет смысл смотреть в сторону инструментов, которые умеют отключать лишние элементы точечно. Но даже в этом случае сначала проверьте, кто именно печатает мета-теги, а уже потом меняйте конфигурацию.