← Все задачи

📐 Стандарты Bestonline-tour.ru

Единый источник правды. Всё что мы решили, договорились и обкатали — здесь. Перед новой задачей сверяйся. Живой документ — обновляется при каждом изменении.
📅 Создан 22.04.2026 🔄 Обновлён 28.04: Master Template Registry + Region + Homepage + валидаторы 👤 Для всей команды

🆕 Что обновлено 28.04

📐 Master Template Registry

Единая карта всех типов посадочных. Каждая ссылка ведёт на canonical-эталон на preview.bestonline-tour.ru. Перед работой над страницей — открой эталон, сверься со структурой.

Тип Canonical эталон Статус Schema @graph Подробно
🏠 Homepage designs/homepage/
10 секций · от прогера
design draft WebSite + Organization + ItemList → §7a Homepage
🌍 Country designs/country/turkey/
12 секций · 1246 строк
design draft TouristDestination + ItemList + FAQPage → §7 Country
🌏 Region ⭐NEW turtsiya/antalya/
11 секций · pilot 28.04
production-ready TouristDestination + Place + AggregateOffer + 14 типов → §5a Region
🏨 Hotel hotels-preview-5/club-prive...
10 секций · свежий эталон
prod-pilot Hotel + AggregateRating + GeoCoordinates + FAQPage → §5 Hotel
🏷 Brand destinations/turkey/brand/hilton/
8 секций · 14 эталонов
production-ready ItemList + Organization + FAQPage + BreadcrumbList → §6 Brand

🗂 Хаб всех артефактов preview: preview.bestonline-tour.ru (Basic Auth bestonline / BestonlineTour2026@)

📑 Содержание

  1. Миссия и модель сайта
  2. Стек
  3. URL-структура
  4. SEO-обёртка: принцип «наше vs виджет Tourvisor»
  5. Страница отеля (single-hotel)
  6. ⭐ Региональный лендинг (region landing) — pilot 28.04
  7. Страница бренда (brand-archive)
  8. Страница страны (country-archive)
  9. Главная страница (homepage)
  10. Валидаторы и анти-паттерны
  11. Бокс «Главное» — факты и шаблоны по типу отеля
  12. FAQ: правила и источник вопросов
  13. Schema.org @graph паттерн
  14. Внутренняя перелинковка и cross-linking
  15. Таксономии
  16. Нишевые страницы (SPA/аюрведа/дайвинг)
  17. Правила контента и правовая граница
  18. Skyscraper + Content Gap подход
  19. Полнота данных и пробелы
  20. Связь с портфелем (cross-fire)

1Миссия и модель сайта

Миссия: создать SEO-машину турагентства с ~16 700 посадочных страниц (отели + страны + регионы + субрегионы + бренды + ниши) для захвата всего спектра travel-запросов в РУ-рынке.

Модель: наша SEO-обёртка (Title, H1, факты, FAQ, Schema) + виджет Tourvisor (фото, цены, бронирование). Мы — SEO-слой, Tourvisor — контент и транзакция.

2Стек (утверждён)

СлойРешение
CMSWordPress 6.x
Page builderBricks Builder (Unlimited лицензия на портфель)
Custom fieldsACF Pro
SEORank Math Pro
CacheRedis + WP Rocket
HostingBeget (PHP 8.2, Nginx)
WP-CLIДля массового импорта из Tourvisor API
CloudflareНЕ используем (РФ-аудитория, Яндекс лучше индексирует)

📦 Bricks-аддоны (для расширения)

АддонЗачемПриоритет
Bricksforge Conditional visibility — скрывать секции если поле пустое (description пустой → не показывать «Об отеле»). Критично из-за empty-cohort 33% по long-tail Tourvisor 🔴 must
Structeezy Сохранять и переиспользовать структуры. Наши 5 типов страниц (Hotel/Region/Country/Brand/Homepage) = 5 шаблонов которые надо собрать раз и применять везде 🔴 must
Automatic.css (ACSS) или Core Framework Управление типографикой и цветами через CSS-переменные. Унификация дизайна всего портфеля 6 проектов. Один из двух — выбрать 🟠 strongly recommended
Advanced Themer Расширенные настройки CSS, цветовые палитры, синхронизация с OpenAI прямо в админке (полезно контент-менеджеру) 🟠 nice to have
BricksExtras или Max Addons Доп элементы (карусели, табы, аккордеоны). Один из двух, не оба 🟢 optional
GutenBricks НЕ используем — у нас нет Gutenberg, всё на Bricks ❌ skip
Bricks Widget Creator НЕ используем — нам нужны Tourvisor виджеты, не свои ❌ skip
Перед покупкой — спросить программиста что у него уже есть
Bricks-аддоны коммерчески пересекаются. Многие WP-разработчики имеют 1-2 аддона в активе. Не дублировать покупку — использовать его лицензии где можно.

🔌 WP REST API + Application Password (для контроля DevOps)

Программисту: создать в WP админке Application Password для пользователя «devops-claude» (Users → Profile → Application Passwords). Передать username + token (24 символа) в защищённом канале.

Зачем: AyurTour-Claude (DevOps) сможет проверять состояние сайта через REST API — какие плагины активны, какие ACF поля созданы, сколько hotels импортировано, валиден ли Schema. Алерты при поломках.

EndpointЧто отдаёт
GET /wp-json/wp/v2/pluginsСписок всех плагинов + статус (active/inactive)
GET /wp-json/wp/v2/themesАктивная тема + все установленные
GET /wp-json/acf/v3/field-groupsACF поля по CPT (требует ACF Pro REST endpoints)
GET /wp-json/bricks/v1/templatesBricks шаблоны
GET /wp-json/wp/v2/settingsPermalinks, timezone, language
GET /wp-json/wp/v2/hotelИмпортированные hotels (с ACF полями)

3URL-структура

Английский slug для стран/регионов — стандарт тревел-индустрии
Turkey не turtsiya, Alanya не alaniya. Словарь в Python-скрипте COUNTRY_SLUG_EN, REGION_SLUG_EN.
СущностьURL-шаблонПример
Страна/destinations/{country}//destinations/turkey/
Регион/destinations/{country}/{region}//destinations/turkey/alanya/
Субрегион (атолл/район)/destinations/{country}/{region}/{subregion}//destinations/maldives/male/raa-atoll/
Отель/destinations/{country}/{region}/{hotel-slug}//destinations/turkey/alanya/hilton-alanya/
Отель (когда region=country)/destinations/{country}/{hotel-slug}//destinations/maldives/alila-kothaifaru/
Бренд (чистый)/destinations/brand/{brand}//destinations/brand/hilton/
Бренд × страна/destinations/{country}/brand/{brand}//destinations/turkey/brand/hilton/
Ниша/niches/{niche}//niches/spa/
Ниша × страна/destinations/{country}/{niche}//destinations/maldives/spa/
Slug отеля: без ID, с дизамбигуатором при коллизии
Чистый alila-kothaifaru-maldives вместо alila-kothaifaru-maldives-79690. При коллизии в пределах (country, region) — добавляем суффикс -{id} младшим отелям. Проверено: 36 коллизий из 7 194.

4SEO-обёртка: «наше» vs «виджет»

🟢 Наше (SEO-слой)🟣 Виджет Tourvisor
Title, Meta Description, H1Фото отеля (галерея)
Breadcrumbs + SchemaОписание отеля (их авторский текст)
Бокс «Главное» (факты)Услуги, номера, типы размещения
Концентрат / intro 2-3 фразыПитание детально
FAQ 5-7 вопросов (FAQPage schema)Актуальные цены (онлайн)
OG-теги, canonical, hreflangФорма бронирования
Похожие отели / перелинковкаКарта расположения
Блог-лента по теме 
НИКОГДА не упоминать бренд «Tourvisor» в клиентских текстах
Только в служебных плейсхолдерах/ТЗ. На прод-страницах — «виджет бронирования», «партнёр-поставщик». Grep-тест обязателен перед деплоем.

5Страница отеля (single-hotel)

Структура (сверху вниз)

  1. Breadcrumbs
  2. Hero: звёзды + H1 «{Отель} — {формат} {локация с предлогом}»
  3. Бокс «Главное» (формат, год, рейтинг, атолл/район, пляж, питание, сезон, перелёт, виза)
  4. Концентрат / intro (2-3 фразы, шаблон по типу отеля)
  5. Виджет Tourvisor (tv-hotels={id}) — фото, цены, бронь
  6. CTA-блок
  7. FAQ (7 вопросов)
  8. Похожие отели (3-4, того же региона/бренда)
  9. Блог-лента по теме
  10. Footer
H1 формула
«{Название} — отель {на/в} {локация}», где «на» для островов/архипелагов (Мальдивы, Пхукет), «в» для остальных. Словарь ISLAND_COUNTRIES/ISLAND_REGIONS.
Title формула
«Отель {название} {★} {на/в} {локация} — отзывы, цены, туры {YEAR}». YEAR — всегда динамический через date('Y'), никогда не хардкодим.

5a⭐ Региональный лендинг (region landing) — pilot 28.04

Эталон: Анталья (turtsiya/antalya/) — первая полная реализация по 19-block структуре из SERP research 27.04.

Реализовано 13/19 блоков, включая 8/10 GAP-блоков, которых нет ни у одного конкурента.

Структура (сверху вниз)

  1. Hero + H1: «Туры в {Регион} {YEAR} от {N}+ отелей — всё включено»
  2. BLUF — концентрат фактов в первых 100 словах (сезон, цена, перелёт, виза)
  3. 🎧 Audio-версия — mp3-плеер 4-5 мин (стандарт портфеля, +E-E-A-T, +retention)
  4. Sticky TOC — навигация с подсветкой активной секции, % прогресса
  5. О регионе — описание 400-500 слов
  6. 🗺 Карта — Google Maps lazy-load через IntersectionObserver (НЕ Static, НЕ Yandex)
  7. 🌤 Погода и сезонность — open-meteo.com (free, без ключа), таблица по месяцам
  8. 🏨 Топ-6 отелей региона — карточки с рейтингом, ценой, ссылкой
  9. ✈️ Как добраться — рейсы из Москвы/СПб, время, трансфер
  10. 🛂 Виза — нужна/не нужна, срок, стоимость; cross-link на evisa24
  11. 📍 Другие курорты страны — sister regions с количеством отелей
  12. ⭐ Отзывы туристов — AggregateRating + 3-5 отзывов
  13. 💬 FAQ 7-10 вопросов из автокомплита Google + Яндекс

Schema @graph (17 типов)

TouristDestination + Country + Place + GeoCoordinates + AggregateOffer + AggregateRating + Product + ItemList + ListItem + TouristAttraction + Organization + WebPage + WebSite + BreadcrumbList + FAQPage + Question + Answer
Универсальный скрипт для любого региона
render_region_preview.py {country_id} {region_id} — берёт данные из БД и генерит HTML по этому шаблону. Из 568 регионов в БД работает на любом seeded.
Карта — только Google Maps JS lazy-load
Загружается только когда пользователь доскроллил до секции (IntersectionObserver). НЕ использовать Static Maps API (не работает на preview-домене), НЕ использовать Yandex (стандарт портфеля — Google).

6Страница бренда (brand-archive)

Полный brief: bestonline-brand-brief-22-04-2026.html. 12 блоков, 9 преимуществ перед конкурентами.

12 обязательных блоков

  1. SEO meta + Schema @graph (ItemList + Organization + FAQ + Breadcrumb)
  2. Breadcrumbs
  3. Hero с H1 «Отели {Бренд} в {Стране} — {N} курортов»
  4. Бокс «Главное»: число отелей, регионы, sub-бренды, сезон, виза, перелёт
  5. Концентрат 2-3 фразы
  6. Листинг отелей с фильтрами (цена/рейтинг/регион)
  7. Кросс-линки по курортам внутри страны
  8. Кросс-страны «{Бренд} в других странах» (с цифрами отелей)
  9. Виджет Tourvisor с пре-фильтром brand+country
  10. FAQ 5-7 вопросов (никто у конкурентов не делает!)
  11. Блок «О бренде» (факты: год, страна, sub-бренды, программа лояльности)
  12. CTA + блог-лента по бренду

✅ Живой пример

Hilton × Турция — 59 отелей — все 12 блоков, включая sub-бренд DoubleTree (21), кросс-страны (Катар, Бахрейн, Кения), бокс «Главное», FAQ 7 вопросов, Schema @graph.

Генерация: python3 generate-brand-page.py hilton turkey

Sub-бренды обязательно отдельным блоком
Doubletree by Hilton, Hampton by Hilton, Club Prive by Rixos — у каждого свой поисковый запрос. Показываем в блоке «Главное» и отдельным разделом листинга.

7Страница страны (country-archive)

Гибридная: авто-листинг отелей + ручной SEO-контент (intro, FAQ, «когда ехать», «виза», «перелёт»).

Обязательные блоки

  1. Hero + H1 «Отели {Страны} — {N} курортов и {N} отелей 2026»
  2. Бокс «Главное»: сезон, виза, перелёт, валюта, средний чек
  3. Intro 400-500 слов (копирайтер)
  4. FAQ 7 вопросов: когда ехать, виза, перелёт, топ-курортов, средний чек, нужна ли страховка, что привезти
  5. Топ-курорты (кросс-линки на регионы)
  6. Топ-отели с фильтрами
  7. Топ-бренды представленных в стране (Hilton 38, Marriott 18, Doubletree 21...)
  8. Карта страны
  9. Виджет поиска туров
  10. Блог-статьи по стране

7aГлавная страница (homepage)

Эталон-дизайн: designs/homepage/ — мокап от прогера, 10 секций, 1028 строк. Используется как визуальный baseline для WP+Bricks.

Структура (сверху вниз)

  1. Hero: H1 «Туры в {N} стран мира — прямые контракты со 150+ туроператорами»
  2. Поиск туров — глобальный виджет (страна + даты + кол-во людей)
  3. Популярные направления — 6-8 карточек стран с минимальной ценой
  4. Без визы для россиян — отдельный блок (Турция, Мальдивы, ОАЭ, Куба)
  5. Быстрый старт — в отпуск за 3 дня — горящие предложения с близкой датой
  6. Горящие туры — обновляется каждые 15 минут
  7. По типу отдыха — пляжный, городской, SPA, активный, семейный
  8. Почему Bestonline — 6 преимуществ + социальные доказательства
  9. Из блога — 3-4 свежие статьи
  10. Туры по странам и курортам — облако всех стран (SEO-блок)
  11. Quiz — «Расскажи куда и когда — подберём 5 вариантов» (квиз > баннер)

Schema @graph

WebSite + Organization + ItemList (популярные направления) + BreadcrumbList

8Бокс «Главное» — факты по типу отеля

Шаблоны акцентов

Тип отеляАкценты в боксе «Главное»
Остров-резорт (Мальдивы)Атолл, расстояние до аэропорта, трансфер (гидроплан/катер), тип пляжа, бренд/сеть
Остров-курорт (Пхукет, Фукуок)Район, пляж, удалённость от центра, климат
Приморский курорт (Анталья, Хургада)Линия пляжа, всё включено, для семей/молодёжи, питание
Городской (Стамбул, Дубай)Район, близость к метро, для бизнеса/туризма, wifi/workspace
Пещерный (Каппадокия)Уникальный формат, воздушные шары, сезон, романтика
SPA / велнесПрограммы, специализация (аюрведа/детокс), мед.лицензия

Источники данных

9FAQ: правила и источник вопросов

Ключевое преимущество над конкурентами: никто из РУ-travel (coral.ru, level.travel, hotels.ru, pegast) не делает FAQ на бренд- и country-страницах. Это наш захват PAA (People Also Ask) и Featured Snippets.

Правила

5-7 вопросов на странице — не больше
Больше размывает концентрат. Меньше — слабый сигнал для FAQPage schema.
🔥 Источник 1: Автокомплит Google + Яндекс (низ страницы)
Подсказки снизу SERP — это реальные вопросы людей. Часть (2-3 из 7) обязательно берём оттуда.

Пример «rixos турция» даёт: «rixos турция цены», «rixos турция туры», «rixos турция анталия/белек/кемер», «rixos турция концерты 2026». Из этого формулируем:

Источник 2: семантический кластер (по теме страницы)
Остальные 4-5 вопросов — по шаблону под тип страницы (отель/страна/бренд). Ответы 40-100 слов каждый, BLUF-структура (главное в первой фразе).

Шаблон FAQ по типу страницы

СтраницаОбязательные 4-5 вопросов+2-3 из автокомплита
ОтельЦена, расположение, питание, детский, как забронироватьПо имени отеля из Яндекс-подсказок
СтранаКогда ехать, виза, перелёт, средний чек, страховкаПо «туры в {страну}» подсказкам
БрендСколько отелей, sub-бренды, программа лояльности, цены, бронированиеПо «{бренд} {страна}» подсказкам
РегионОсобенности курорта, лучший пляж, транспорт, топ-отелиПо «{регион} отели» подсказкам

Schema

Каждый FAQ — FAQPage schema. Проверка через Rich Results Test.

10Schema.org @graph паттерн

Один <script> с @graph объединяющий Hotel/Organization/BreadcrumbList/FAQPage/ItemList. Google любит cleaner structure.
СтраницаТипы в @graph
ОтельHotel + FAQPage + BreadcrumbList + (Organization если бренд)
БрендItemList + Organization + FAQPage + BreadcrumbList
Страна/регионTouristDestination + ItemList + FAQPage + BreadcrumbList
Блог-статьяBlogPosting + FAQPage + BreadcrumbList
Правило 1: «Похожие отели» в пределах региона
На странице отеля — блок 3-4 «Похожие отели» из того же региона (не страны!).
Правило 2: Бренд × страна кросс-линки
На странице /{country}/brand/{brand}/ блок «{Бренд} и в других странах» с количеством отелей (минимум 2 страны для показа).
Правило 3: Бренд на странице отеля
Если отель принадлежит бренду — в боксе «Главное» строка «🏷 Сеть: Hilton» + в конце страницы блок «Другие Hilton в каталоге» (по стране или по бренду в целом).
Правило 4: Breadcrumbs всегда
Главная → Страна → Регион → Отель. Schema BreadcrumbList.
Правило 5: Блог → коммерческие страницы
Каждая блог-статья про страну/отель/бренд обязана ссылаться на соответствующую коммерческую посадочную (как на ayurtour). Анти-каннибализация.

12Таксономии

ТаксономияSlugИерархияПримеры
Странаcountryturkey, maldives, egypt
Регионregionparent: countryalanya → turkey
Субрегионsubregionparent: regionraa-atoll → male → maldives
Звёздыstars1-5
Тип отеляhotel_typeisland-resort, city-hotel
Брендhotel_brandhilton, marriott
Sub-брендhotel_sub_brandparent: hotel_branddoubletree → hilton
Нишаhotel_nichespa, diving, honeymoon

13Нишевые страницы

Детали: см. карту сайта + memory project_bestonline_niche_taxonomies. 15 ниш × 38 стран = 570 потенциальных посадочных.

ТОП-5 приоритетных ниш

  1. SPA / велнес — широкая входная аудитория (cross-fire ayurtour)
  2. Аюрведа — прямой cross-fire с ayurtour.ru
  3. Дайвинг — массовый (Мальдивы, Египет, Таиланд)
  4. Свадебные / honeymoon — премиум-чек
  5. Семейные — крупнейший сегмент

14Правила контента и правовая граница

❗ Правовая граница

Факты (не охраняются): год постройки, атолл, количество вилл, расстояние до аэропорта, звёздность, цены — можно использовать свободно.

Авторский текст (охраняется): описания, маркетинговые формулировки Tourvisor/Booking/бренда — копировать нельзя. Парсим поля → собираем свой шаблонный текст.

Год в Title/Meta/FAQ/Schema — только динамический
{date('Y')}, никогда не хардкодим «2026». Иначе придётся перегенерировать тысячи страниц 31 декабря.
Никаких внешних ссылок с посадочных
Не уводим трафик на поставщиков/отзовики/карты. Виджет внутри нашей страницы — всё. Не ссылаемся на Tripadvisor, Booking, Яндекс.Карты, Google Maps.
Фото: только свои / whitelist
Whitelist: Unsplash/Pexels/Pixabay/Wikimedia/купленные подписки/виджет Tourvisor. Никогда не берём с других сайтов. Штраф Getty $3-8k.
hero.jpg convention
Один canonical hero-файл в папке сущности, все превью ссылаются на него. Замена одного файла = обновление всех точек без ручной синхронизации.

15Skyscraper + Content Gap подход

Принцип каждой новой посадочной:

  1. Смотрим ТОП-10 Google + Яндекс по целевому запросу
  2. Фиксируем что есть у конкурентов: H1, blocks, FAQ, фильтры, Schema
  3. Находим пробелы — чего ни у кого нет (часто: FAQ, Schema, sub-бренды, cross-linking)
  4. Собираем всё что есть у всех + наши уникальные блоки
  5. Цель: пользователь зашёл и получил всю информацию, что хотел — больше нигде искать не надо
Исключение: агрегаторы в SERP-анализе
При анализе конкурентов исключать аккрегаторы (Aviasales, Tutu, Sravni) — смотрим нишевых туроператоров.

16Полнота данных

Живой трекер: bestonline-data-tracker.html. Сверяться перед каждой новой задачей.
Правило data audit
Перед началом работ по bestonline — открываем Data Tracker, отмечаем пробелы, уведомляем пользователя. Не начинаем вёрстку на неполных данных.

17Связь с портфелем (cross-fire)

С какой страницы bestonlineКуда cross-linkЗачем
/niches/ayurveda/ayurtour.ru (Индия/Шри-Ланка туры)Аудитория «серьёзной аюрведы»
/niches/spa/ayurtour.ru (программы)Углубление SPA-интереса
/destinations/india/, /sri-lanka/ayurtour.ru + panchakarma-india.ruТематическая синергия
Любая country-landingevisa24.ru (визы в эту страну)Визовая услуга
/corporate/evisa24.ru/business/ (бизнес-визы)B2B кросс-sell

18Валидаторы и анти-паттерны

Жёсткое правило: перед wrangler pages deploy public-preview и перед массовым render через render_region_preview.py/generate-brand-page.py — обязательно прогнать валидаторы. Если хоть один Exit 1 — фиксим, потом деплой.

🚨 Анти-паттерны (нарушения стандарта)

Анти-паттернГде появляетсяGrep-проверкаSeverity
Yandex карты вместо GoogleНагенерированные hotel-pagegrep -l "yandex.*map\|api-maps.yandex"🔴 критично
Google Static Maps API ключ в HTMLhotels-preview-5grep -l "maps.googleapis.com/maps/api/staticmap"🟠 security
Tourvisor / Booking / Tripadvisor в DOMЛюбая клиентская страница./scripts/check-brands.sh public-preview/🔴 критично
Хардкод года (2025/2026 в Title/Desc)Шаблоны, JSON-LDgrep -l "20[0-9][0-9]" --include=*.html + manual review🟠 поддержка
Внешние ссылки на отзовики/карты/агрегаторыFooter, контентgrep -E 'href="https://(tripadvisor|booking|aviasales|yandex)\.'🔴 уводит трафик
Отсутствие Schema @graphРегиональные/брендовыеgrep -L '"@graph"'🔴 SEO
Нет canonical / OG imageЛюбая страницаgrep -L 'rel="canonical"' · grep -L 'og:image'🟠 SEO
tourvisor_id в URL/slugSlug отеляgrep -E '/[a-z-]+-[0-9]+/'🟡 чистота URL

🛡 Обязательные скрипты

СкриптКогда запускатьЧто проверяет
./scripts/validators/run-all.shПеред любым «готово» по импорту/Data Tracker/тирамТиры стран, дубли, prod vs local divergence
./scripts/check-brands.sh public-preview/Перед wrangler pages deploy public-previewБренды поставщиков (Tourvisor/Booking/Tripadvisor) в DOM
python3 /WORKJET/scripts/audit.py https://bestonline-tour.ruПеред релизом, раз в месяц на prod15 категорий / 113 пунктов: meta, Schema, OG, footer, leaked brands
Why: 24.04 инциденты
Забытая Турция в тирах · дубль Португалии в T3 · расхождение prod vs local (28 308 vs 10 976). Валидаторы ловят 95% таких ошибок. Без них ошибки повторяются.

✅ Чеклист перед публикацией любой страницы