// [SEO 30.10.2026] Теги для соцсетей и мессенджеров: og:title и og:description. // // Зачем: это то, что видит человек, когда кидает ссылку в WhatsApp, Telegram или ставит // её в пост. На части страниц они разъехались с обычными мета-тегами: // — карточки товара: в og:description уходило сырое название из 1С // («265/55R20 113T XL S360 TRACMAX зима/фр»); // — разделы каталога и страницы фильтра: og:title оставался старой длинной фразой, // потому что модуль собирает соцсетевые теги РАНЬШЕ, чем применяется SEO-правило. // // Решение: на выходе страницы приводим og:title и og:description к тому, что реально // стоит в и в описании. Одно место вместо правок по каждому шаблону, // вендорский код модуля не трогаем. // // Почему это надёжно, в отличие от подмены <title>: соцсети и мессенджеры читают // готовый HTML, а композитный кэш, который когда-то перебивал нам заголовок, // правит только document.title в браузере и до og-тегов не добирается. function seoSyncOpenGraph(&$content) { if(defined('ADMIN_SECTION') && ADMIN_SECTION === true) return; if(strpos($content, 'og:') === false) return; // итоговые значения страницы if(!preg_match('~<title>(.*?)~is', $content, $mT)) return; $title = trim($mT[1]); if($title === '') return; $descr = ''; if(preg_match('~]*property="'.$prop.'"[^>]*content=")[^"]*(")~is', '~(]*content=")[^"]*("[^>]*property="'.$prop.'"[^>]*>)~is', ); foreach($re as $pattern) { $n = 0; $content = preg_replace($pattern, '${1}'.str_replace('$', '\\$', $value).'${2}', $content, 1, $n); if($n > 0) { $replaced += $n; return; } } // тега не было — добавляем после $content = preg_replace('~()~i', '$1'."\n".'', $content, 1); $replaced++; }; $sync('og:title', $title); $sync('og:description', $descr); } AddEventHandler('main', 'OnEndBufferContent', 'seoSyncOpenGraph');