66 lines
5.1 KiB
Markdown
66 lines
5.1 KiB
Markdown
# SEO для Яндекса и Google
|
||
|
||
Публичные страницы главной и новостей отдают метатеги и основной HTML до запуска
|
||
JavaScript. При переходах Inertia обновляет тот же набор тегов через `serverHead`.
|
||
Заголовок, описание и текст главной ориентированы на PvP сервер WoW Vanilla,
|
||
версию клиента и рейты из `config/moonwell.php`. Название проекта также берётся
|
||
из конфигурации. Позиции в поиске зависят и от содержания, ссылок и конкуренции;
|
||
SEO-настройки обеспечивают техническую готовность к индексации.
|
||
|
||
## Настройка production
|
||
|
||
```dotenv
|
||
APP_ENV=production
|
||
APP_URL=https://moon-well.online
|
||
MOONWELL_SEO_INDEXABLE=true
|
||
GOOGLE_SITE_VERIFICATION=
|
||
YANDEX_SITE_VERIFICATION=
|
||
```
|
||
|
||
`APP_URL` — единственный источник домена для canonical, sitemap и разметки.
|
||
Используйте основной HTTPS-адрес без `www`, если сайт работает именно на нём.
|
||
На уровне внешнего nginx настройте постоянный редирект HTTP и альтернативного
|
||
домена на этот адрес. Для стендов задайте `MOONWELL_SEO_INDEXABLE=false`:
|
||
robots.txt запретит обход, а HTML получит `noindex`. По умолчанию индексация
|
||
включается только при `APP_ENV=production`.
|
||
|
||
В `GOOGLE_SITE_VERIFICATION` и `YANDEX_SITE_VERIFICATION` вставляются только
|
||
значения `content` из проверочных метатегов соответствующего сервиса.
|
||
Пустые значения не создают метатеги. После изменения `.env` пересоздайте
|
||
production-контейнер приложения, чтобы загрузить переменные, и обновите кеш:
|
||
|
||
```bash
|
||
docker compose -f compose.prod.yaml up -d --no-deps --force-recreate app
|
||
docker compose -f compose.prod.yaml exec -T --user app app php artisan config:cache
|
||
```
|
||
|
||
## Подключение поисковых систем
|
||
|
||
1. Добавьте сайт в [Google Search Console](https://search.google.com/search-console)
|
||
и [Яндекс Вебмастер](https://webmaster.yandex.ru/). Для проверки метатегом
|
||
выберите ресурс по URL в Google и заполните переменные выше. Можно также
|
||
подтвердить домен через DNS средствами самих сервисов.
|
||
2. Отправьте `https://moon-well.online/sitemap.xml` в оба сервиса. Карта
|
||
автоматически содержит главную, список новостей и опубликованные статьи
|
||
с датами последнего изменения. Черновики, личный кабинет, вход, юридические
|
||
документы и административные страницы в карту не попадают.
|
||
3. Проверьте главную и одну новость инструментом проверки URL Google и
|
||
инструментами проверки страниц Яндекса, затем запросите переобход главной.
|
||
4. Проверьте robots.txt: ресурсы `/build/`, изображения и `/storage/` доступны
|
||
роботам. Закрыты API, файлы лаунчера и техническая проверка состояния.
|
||
Страницы входа, кабинета и администрации имеют `noindex`; robots.txt
|
||
не запрещает их обход, чтобы робот мог прочитать запрет индексации.
|
||
|
||
У страниц новостей `?page=2` и далее собственный canonical и номер страницы
|
||
в заголовке. Метки рекламы и другие параметры в canonical не включаются.
|
||
Несуществующие страницы пагинации и неопубликованные новости возвращают 404.
|
||
|
||
Разметка JSON-LD описывает сайт и страницы, а для новостей — `NewsArticle`
|
||
с заголовком, изображением и датами. Open Graph и Twitter Card поддерживают
|
||
превью ссылок. Проверочные коды для поисковых систем остаются на всех HTML-страницах.
|
||
|
||
Реализация учитывает рекомендации
|
||
[Google по JavaScript SEO](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics),
|
||
[Google по sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)
|
||
и [Яндекса по robots.txt](https://yandex.ru/support/webmaster/ru/controlling-robot/robots-txt).
|