Как сделать поддомены по городам на Modx Revolution с помощью плагина SEODomains

Коллеги, привет, это очередной маленький мануал по теме Modx Revo, а именно - как сделать поддомены по городам на modx быстро и без танцев с бубном, все мероприятия с бубном я уже сделал (за вас) поэтому вот готовое решение.

Будем использовать SEODomains, он немного платный 490 рублей где-то (ты кофе покупаешь дороже), и он работает!

Как сделать поддомены по городам на Modx Revolution с помощью плагина SEODomains

Итак, вот здесь он продается https://modstore.pro/packages/other/seodomains.

Вот FAQ по модулю https://docs.modx.pro/components/seodomains#vybor-goroda-na-sayte. Демо здесь https://seodomains.tyrsyna.ru/.

Автор Mikhail Tyrsyna , я связывался с ним в ТГ, но грит - не занимается больше Modx, поэтому я это все пишу. Есть возможность импорта доменов из XLSX файла, но я не использовал.

1. Установка SEODomains на Modx

Коннектимся к поставщику-репозиторию https://modstore.pro/, как это сделать - здесь https://modstore.pro/faq#help/1.
Дальше - оплачиваем, получаем ключ, загружаем в движок... как обычно устанавливаем плагин, там ничего сложного.

2. Wildcard *.site.ru

Идем в хостинг и создаем вот такой поддомен *.site.ru, это Wildcard, - своего рода подключение возможности использовать SSL для всех поддоменов сразу - это надо.

3. Добавляем поддомены spb.site.ru, msk.site.ru и т.д.

Создаем для домена в хостинге поддомены по городам, регионам и т.п. типа: spb.site.ru, samara.site.ru и т.д. - вручную сделать быстрее (15-20мин), если у тебя например города списком заранее сделаны в екселе, то добавить руками быстрее чем выдумывать автоматизацию пол дня.

4. Добавляем поддомены в плагине

Идем в плагин и так же делаем с поддоменами, добавляем плейсхолдеры.

Доступные плейсхолдеры:

[[!+sd.domain]] — Домен [[!+sd.city]] — Город [[!+sd.city_r]] — Город (склонение) [[!+sd.phone]] — Телефон [[!+sd.email]] — E-mail [[!+sd.address]] — Адрес [[!+sd.address_full]] — Полный адрес [[!+sd.coordinats]] — Координаты

Есть здесь маленький нюанс: если в плейсхолдере написано например Телефон или Адрес - это совсем не значит что мы прям обязаны его так использовать, мы можем туда любые свои данные записать.

Можно менять контент для каждого ресурса под каждый город отдельно вставкой данных из пх.

Как сделать поддомены по городам на Modx Revolution с помощью плагина SEODomains

//В плагине есть возможность внедрения доп полей если вам нужно.

5. Добавляем плейсхолдеры в контент, тайтлы, дескрипшны и т.д.

Идем в шаблоны и дописываем нужный плейсхолдер, для какого-то города я делал просто добавление типа такого: "Услуги по ремонту кровли[[!+sd.city_r]]" , где в плейсхолдере [[!+sd.city_r]] было записано: " в г.Самара" - пробел впереди чтобы он подставлялся. Получится: "Услуги по ремонту кровли в г.Самара".

Итак, на этом этапе у нас должны уже работать поддомены (рекомендую сначала сделать только часть от всех городов), детально все настроить, чтобы поддомен давал соответствующие заголовки.

6. Вызов модального окна выбора города (поддомена)

Дальше нам нужно куда то разместить вызов сниппета SeoDomainsList, чтобы выпадающий список появлялся, создаем например div блок, и вставляем вот это:

[[SeoDomainsList? &tpl=`SeoDomains.City.tpl` &sortby=`city` &sortdir=`ASC` &activeClass=`active` &limit=`150` &showLog=`0` ]]

И тут может возникнуть проблема)) - модальное окно может не появляться или отображаться криво, потому что ОН ТРЕБУЕТ jquery и bootstrap, подключаем в таком порядке в хедер:

<script src="/assets/js/jquery.min.js"></script> <script src="/assets/js/bootstrap.min.js"></script> <link rel="stylesheet" href="/assets/css/bootstrap.min.css">

У автора в демо (https://seodomains.tyrsyna.ru/) есть эти файлики, если с демкой случится что - напишите коммент я выложу их.

7. Редактирование внешнего вида модального окна

На этом этапе у нас уже должна появиться ссылка-кнопка, которая вызывает окно выбора города. Я его немного подредактировал под себя - добавил прокрутку, увеличил лимит городов в вызове снипета SeoDomainsList поставил например &limit=`150` и вынес отдельно города, которые часто ищут. В ссылку-кнопку я добавил <span>, чтобы город как-то выделялся.

Как сделать поддомены по городам на Modx Revolution с помощью плагина SEODomains

Файл редактирования модального окна находится в чанках SeoDomains/SeoDomains.City.tpl

Как сделать поддомены по городам на Modx Revolution с помощью плагина SEODomains

8. Каноникалы для поддоменов

Вот это очень важный этап, обычные[[+++base]] и тп не дают правильного результата, я например хочу чтобы каждый поддомен имел свои канонические ссылки, поэтому я формировал их снипетами отдельно для главной и отдельно для всех остальных внутренних страниц.

Отдельно потому что для главной цепляется alias, а он нам не нужен. Да у меня шаблоны для главной и других страниц - разные, [[$block_header_main]] - для главной, а [[$block_header]] для остальных, поэтому в [[$block_header_main]] у меня 1 снипет а в другом - [[$block_header]] другой снипет.

каноникал главной
<link rel="canonical" href="[[!getCanonicalUrlMain]]" />
каноникал остальных
<link rel="canonical" href="[[!getCanonicalUrl]]" />

[[!getCanonicalUrlMain]] и [[!getCanonicalUrl]] это снипеты, которые создаем в снипетах:

Идем в снипеты, создаем снипет для главной [[!getCanonicalUrlMain]]:

<?php // Получаем текущий протокол (http или https) $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://'; // Получаем текущий хост (домен или поддомен) $currentHost = $_SERVER['HTTP_HOST']; // ID главной страницы сайта (обычно 1) // Вы можете получить его из настроек MODX: $modx->getOption('site_start') $siteStartId = $modx->getOption('site_start', null, 1); // Получаем ID текущего ресурса $currentResourceId = $modx->resource->get('id'); // Формируем базовый URL, используя текущий протокол и хост $baseUrl = $protocol . $currentHost; // Если текущая страница является главной (по ID) if ($currentResourceId == $siteStartId) { // Для главной страницы возвращаем только базовый URL без алиаса return rtrim($baseUrl, '/'); } else { // Для остальных страниц получаем URI ресурса $uri = $modx->resource->get('uri'); // Для остальных страниц формируем полный URL с URI // Убираем возможные двойные слэши return rtrim($baseUrl, '/') . '/' . ltrim($uri, '/'); }

//снипет сделан нейронкой, поэтому если что-то не так, то можете предложить лучшее решение

Снипет для остальных страниц [[!getCanonicalUrl]]

<?php $siteUrl = $modx->getOption('site_url', null, MODX_SITE_URL); // Получаем site_url из текущего контекста $uri = $modx->resource->get('uri'); // Если это главная страница (uri пустой или "/"), возвращаем site_url без завершающего слэша if (empty($uri) || $uri === '/') { return rtrim($siteUrl, '/'); } else { // Для остальных страниц формируем полный URL return rtrim($siteUrl, '/') . '/' . ltrim($uri, '/'); }

Для og тегов я просто вставлял нужные конструкции.

ИТАК, на этом этапе все должно отображаться правильно, когда вы все это отладите можно уже добавлять все остальные домены по городам, как в хостинге поддомены, так и в самом движке, я не заморачивался с автоматизацией, т.к. в данном случае руками - быстрее.

Если есть что добавить, пишите!

1
1 комментарий