Плагин SEO + Микроразметка для Forum для Cotonti

Плагин автоматически формирует все необходимые мета‑теги (title, description, keywords), социальные карточки (Open Graph, Twitter Cards), структурированные данные Schema.org (DiscussionForumPosting), а также добавляет блок «Похожие темы»

Опубликовано в: Модули и Плагины для Cotonti

SEO Forum — SEO‑плагин для модуля форумов Cotonti

Автор: webitproff
Дата: 2026‑07‑04
Copyright: © webitproff, 2025‑2026
Репозиторий
Лицензия: BSD 3‑Clause License

Version Cotonti Compatibility PHP MySQL Bootstrap v5.3+ Font Awesome v7 License

1. Назначение плагина

SEO Forum — это комплексное SEO‑решение для модуля «Форумы» Cotonti.
Плагин автоматически формирует все необходимые мета‑теги (title, description, keywords), социальные карточки (Open Graph, Twitter Cards), структурированные данные Schema.org (DiscussionForumPosting), а также добавляет блок «Похожие темы», время чтения, информацию об авторе и гибко управляет каноническими URL.

Плагин работает на всех страницах форума:

  • список постов темы;
  • одиночный пост (с корректным canonical при активном forums_singlepost);
  • список тем раздела;
  • главная страница форума;
  • страницы отдельных категорий (секций).

2. Основные возможности

  • Умные мета‑описания
    meta name="description" формируется по схеме: Название категории. Текст описания. Текст описания обрезается без разрыва слов — до ближайшей точки, запятой, восклицательного или вопросительного знака после 160‑го символа, а если знак не найден — до последнего пробела.
  • Open Graph и Twitter Cards
    Автоматически выводятся og:title, og:description, og:image, og:url, og:type, og:site_name, og:locale, а также twitter:card, twitter:title, twitter:description, twitter:image.
  • Структурированные данные Schema.org
    Генерируется JSON‑LD типа DiscussionForumPosting с полями headline, description (до 2000 символов из текста поста), keywords, author, publisher, datePublished, dateModified, image, mainEntityOfPage.
  • Управление каноническими URL
    Для одиночного поста (при активном плагине forums_singlepost) канонический URL указывает на страницу конкретного поста, а не на всю тему. Для остальных страниц каноникал строится корректно (тема, раздел, категория, главная форума).
  • Похожие темы
    На странице темы выводится блок «Похожие темы» (до 3 тем, настраивается). Каждая тема показывает изображение (из вложений attacher или плейсхолдер), заголовок, описание (с умной обрезкой) и автора.
  • Время чтения и автор темы
    Рассчитывается время чтения первого поста (200 слов/мин, минимум 1 мин). Отображается автор темы (или автор конкретного поста для одиночной страницы).
  • Переопределение заголовков и мета‑тегов
    На страницах списка тем, разделов и главной форума устанавливаются кастомные title, description, keywords в соответствии с настройками категорий или общими настройками плагина.
  • Локализация
    Полная поддержка русского и английского языков. Предусмотрены дефолтные строки для пустых мета‑тегов.

3. Структура файлов

plugins/seoforums/
├── inc/
│   └── seoforums.functions.php          — functions (keyword extraction, reading time, image retrieval)
├── lang/
│   ├── seoforums.ru.lang.php            — Russian translation and stop words
│   └── seoforums.en.lang.php            — English translation and stop words
├── seoforums.setup.php                  — plugin registration and configuration
├── seoforums.forums.posts.main.php       — SEO tags for post list and single post (Open Graph, Twitter, Schema.org, canonical)
├── seoforums.forums.posts.tags.php       — template tags (related topics, reading time, author)
├── seoforums.header.tags.php             — override of meta tags in <head> for all forum pages
└── seoforums.global.php                  — (optional) additional global actions

 

4. Как это работает

Умная обрезка описаний

При формировании meta description и описаний в микроразметке применяется алгоритм:

  1. Берётся исходный текст (описание темы или текст поста).
  2. Если его длина больше 160 символов, ищется точка, запятая, ! или ? в диапазоне от 160 до 250 символов.
  3. Если знак найден — текст обрезается до него включительно (без разрыва слова).
  4. Если знак не найден — обрезаем до последнего пробела перед 160‑м символом, сохраняя целостность слова.
  5. В начало добавляется название категории с точкой: Категория. Описание….

Интеграция с forums_singlepost

При активном плагине forums_singlepost на странице одиночного поста:

  • og:url и canonical ссылаются на сам пост, а не на тему.
  • meta description и JSON-LD description формируются из текста конкретного поста.
  • Автор в микроразметке соответствует автору поста, а не первому сообщению темы.
  • Изображение подбирается из вложений поста, а если их нет — из темы.

Похожие темы

Блок RELATED_TOPICS выводится в шаблоне форума. Для каждой похожей темы:

  • Проверяется, есть ли описание (ft_desc) — если нет, берётся текст первого поста.
  • Описание умно обрезается (по тому же алгоритму, что и meta description) и дополняется названием категории.
  • Изображение получается из вложений attacher первого поста, либо используется плейсхолдер.
  • Автор определяется по ft_firstposterid.

5. Требования

  • Cotonti CMF версии 1.0 или новее (протестировано на 0.9.26+)
  • PHP 8.4 или выше
  • MySQL 8.0+ (или MariaDB с поддержкой InnoDB)
  • Модуль forums должен быть установлен и активирован
  • Рекомендуемые плагины:
    • attacher — для извлечения изображений из постов
    • urleditor — для SEO‑дружественных URL

6. Установка

  1. Скопируйте папку seoforums в директорию plugins/ вашего сайта.
  2. Перейдите в Админ‑панель → Расширения и установите плагин SEO Forum.
  3. Настройте конфигурацию:
    • placeholderlogo — путь к маленькому логотипу для микроразметки (например, themes/index36/img/logo.webp)
    • placeholderimagedefault — путь к большой картинке‑плейсхолдеру для тем без изображения
    • maxrelatedpostsperpage — количество похожих тем (0 — отключить блок)
  4. В шаблоне header.tpl убедитесь, что присутствуют теги {HEADER_META_DESCRIPTION}, {HEADER_META_KEYWORDS} и {PHP.out.meta}. пример:

    <!--
    	/********************************************************************************
    	* File: header.tpl
    	* Extension: Core'
    	* Description: HTML template for header.tpl.
    	* Compatibility: CMF/CMS Cotonti Siena v0.9.26[](https://github.com/Cotonti/Cotonti)
    	* Dependencies: 
    	* 		 Bootstrap 5.3.+[](https://getbootstrap.com/); 
    	* 		 Font Awesome Free 7.1[](https://fontawesome.com/)
    	* Theme: Index36  
    	* Version: 1.0.2 
    	* Created: 01 Feb 2026 
    	* Updated: 04 July 2026 
    	* Copyright (c) 2026 webitproff | https://github.com/webitproff
    	* Source: https://github.com/webitproff/index36-cotonti-theme
    	* Demo : https://freelance-script.abuyfile.com/ 
    	* Help and support: https://abuyfile.com/ru/forums/cotonti/original/skins/index36
    	* License: BSD (Free distribution with saving Copyright (c) 2026 webitproff)  
    	********************************************************************************/
    -->
    <!-- BEGIN: HEADER -->
    <!DOCTYPE html>
    	<!-- IF {HTML_LANG} -->
    	<html lang="{HTML_LANG}" data-bs-theme="light">
    	<!-- ELSE -->
    	<html lang="{PHP.usr.lang}" data-bs-theme="light">
    	<!-- ENDIF -->
    <!-- main header -->
    	<head>
    		<meta charset="UTF-8">
    		<meta name="viewport" content="width=device-width, initial-scale=1">
    		<!-- IF {I18N_HEADER_META_TITLE} --> 
    		<title>{I18N_HEADER_META_TITLE}</title>
    		<!-- ELSE -->
    		<title>{HEADER_TITLE} <!-- IF {MARKET_HEADER_XTRA_DEMO_COUNTRY} -->{MARKET_HEADER_XTRA_DEMO_COUNTRY_NAME} <!-- ENDIF --></title>
    		<!-- ENDIF -->
    	<!-- IF {I18N_HEADER_META_DESCRIPTION} --> 
    		<meta name="description" content="{I18N_HEADER_META_DESCRIPTION}" />
    	<!-- ELSE -->
    		<!-- IF {HEADER_META_DESCRIPTION} -->
    		<meta name="description" content="{HEADER_META_DESCRIPTION}" />
    		<!-- ENDIF -->
    	<!-- ENDIF -->
    		<!-- IF {HEADER_BASEHREF} -->
    		{HEADER_BASEHREF}
    		<!-- ENDIF -->
    		<!-- IF {HEADER_CANONICAL_URL} -->
    		<link rel="canonical" href="{HEADER_CANONICAL_URL}" />
    		<!-- ENDIF -->
    		<!-- IF {ALTERNATE_TAGS} -->
    		{ALTERNATE_TAGS}
    		<!-- ENDIF -->
    		<link rel="shortcut icon" href="favicon.ico" />
    		<link rel="icon" href="{PHP.cfg.themes_dir}/{PHP.theme}/img/icon.webp" type="image/svg+xml">
    		<link rel="apple-touch-icon" href="apple-touch-icon.png" />
    		<!-- IF {PHP.out.meta} -->
    		{PHP.out.meta}
    		<!-- ENDIF -->
    		<script>
    			(function () {
    				const storedTheme = localStorage.getItem('theme');
    				const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
    				const defaultTheme = storedTheme || (prefersDark ? 'dark' : 'light');
    				document.documentElement.setAttribute('data-bs-theme', defaultTheme);
    			})();
    		</script>
    		{HEADER_HEAD}
    	</head>
    		<body>
  5. В шаблоне forums.posts.tpl добавьте блок RELATED_TOPICS (пример есть в документации) и теги {TOPIC_READ_TIME}, {TOPIC_AUTHOR} при необходимости. например, после формы для ответов, вставить:

    <!-- IF {PHP|cot_plugin_active('seoforums')} -->
    <!-- BEGIN: RELATED_TOPICS -->
    <div class="container mb-4 mt-5">
        <h3 class="h4 mt-3">{PHP.L.seoforums_related}</h3>
        <div class="row g-3">
            <!-- BEGIN: RELATED_ROW -->
            <div class="col-12 col-md-6 col-lg-4">
                <a href="{RELATED_TOPIC_ROW_URL}" class="card border-0 shadow-sm text-decoration-none h-100 overflow-hidden">
                    <!-- Image cropped to 1200:630 aspect ratio -->
                    <div class="related-img-wrapper" style="aspect-ratio: 1200 / 630; width: 100%; overflow: hidden;">
                        <img src="{RELATED_TOPIC_ROW_IMAGE}" 
    					alt="{RELATED_TOPIC_ROW_TITLE}" 
    					class="related-img"
    					style="width: 100%; height: 100%; object-fit: cover; object-position: center;">
    				</div>
                    <!-- Card content -->
                    <div class="card-body">
                        <h5 class="fs-6 fw-semibold mb-1 text-body">{RELATED_TOPIC_ROW_TITLE}</h5>
                        <!-- IF {RELATED_TOPIC_ROW_DESC} -->
                        <p class="text-muted small mb-1">{RELATED_TOPIC_ROW_DESC}</p>
                        <!-- ENDIF -->
                        <p class="text-muted small mb-0">{RELATED_TOPIC_ROW_AUTHOR}</p>
    				</div>
    			</a>
    		</div>
            <!-- END: RELATED_ROW -->
    	</div>
    </div>
    <!-- END: RELATED_TOPICS -->
    <!-- ENDIF -->
  6. Очистите системный кэш.

7. Рекомендации

  • Для корректной вставки изображений из постов установите плагин attacher.
  • Настройте стоп‑слова в языковом файле, чтобы улучшить качество извлечения ключевых слов.
  • Если вы используете forums_singlepost для раздельных шаблонов одиночных постов, плагин автоматически подстроит канонические URL и мета‑теги.
  • При большом количестве постов убедитесь, что таблицы cot_forum_topics, cot_forum_posts и cot_structure имеют необходимые индексы.

8. Поддержка

помощь и обсуждение


9. Лицензия

BSD 3‑Clause License.
Автор: webitproff, Copyright © 2025‑2026.

Репозиторий: https://github.com/webitproff/cot-seoforums



Рейтинг на основе отзывов:
Звезд получено: 0
Oтзывов всего: 0
Средняя оценка: 0
6 минут чтения
Владелец: Carbonate Sodium

Отзывы к товарам

Отзывов пока нет


Добавить в корзину

Товар без файла для загрузки

 

Категория расширения
SEO и оптимизация, Социальная сеть и интеграции
Доступность
Бесплатно

Обсуждение страницы в Telegram

Автор контента

webitproff

Оффлайн

webitproff

Последняя авторизация: 18.07.2026 14:46

  • Чем могу помочь?

    Оказываю весь спектр услуг по CMF Cotonti. Разработка открытых и закрытых корпоративных интернет порталов, небольших социальных сетей, торговые площадки, маркетплейсы, биржи фриланса, каталоги товаров оптовых поставщиков, интернет-магазин под заказ, чтобы делать совместные покупки и групповые совместные продажи от имени нескольких продавцов.

  • Разработки на GitHub бесплатно
    • 04.07.2026 23:13
    • 04.07.2026 23:13

    Рекомендуемые товары и услуги

    Установка, интеграция и адаптация плагинов под Cotonti CMF

    Установка, интеграция и адаптация плагинов под Cotonti CMF

    профессиональные услуги по установке, глубокой интеграции и адаптации плагинов под Cotonti CMF, с
    Плагин подключения шаблона одиночного поста форума

    Плагин подключения шаблона одиночного поста форума

    Плагин позволяет для каждого раздела форума задать индивидуальный шаблон страницы одиночного поста

    Витрина Market PRO

    CMS, Скрипт и Движок - веб сайта онлайн-витрины, интернет магазина инфопродуктов и цифровых товаров. Разные цены в разных валютах на товар. Онлайн-оплата в криптовалюте за товары и услуги.