Кейс: Zamin.uz — многоязычный новостной портал с 2014 года

Zamin.uz — мой новостной портал, запущенный в 2014 году. В 2015 году он занял почётное 2-е место на Национальном интернет-конкурсе Узбекистана. На сегодняшний день мои авторские материалы прочитаны более 155 миллионов раз.

В этой статье я расскажу о технической стороне проекта — какие решения работали более 10 лет и какие оказались ошибочными.

Задача

Новостной сайт отличается от обычного сайта тремя вещами:

  1. Объём контента постоянно растёт — сегодня 200 тысяч страниц, завтра 210 тысяч
  2. Скорость публикации новостей решающая — для Google Discover и «Top stories» материалы должны попасть в индексацию в течение минут
  3. Многоязычность — один материал выходит на нескольких языках, и они должны быть правильно связаны друг с другом

Многоязычная архитектура

Сайт работает на нескольких языках. Самая частая ошибка здесь — указывать hreflang-теги в HTML и sitemap по-разному. В таком случае Google игнорирует оба.

Правило простое: набор hreflang в HTML <head> должен символ в символ совпадать с набором в sitemap. Должен быть и x-default.

Для каждого языка ведётся отдельный новостной sitemap (news_latest_<til>.xml) — Google News ожидает именно этот формат.

Индексация архива: главная ошибка здесь

При миграции новостного сайта люди обычно добавляют в sitemap «последние 1000 статей». В результате 10-летний архив становится невидимым для Google, и органический трафик резко падает.

Правильное решение — весь архив через sitemap-index:

  • В каждом сегменте не более 40 000 URL
  • Сегменты собираются в файле sitemap-index
  • Для новостей отдельный короткий sitemap (последние 48 часов) — для Google News

Сейчас в sitemap Zamin более 190 000 URL, и все они открыты для индексации.

Скорость: стратегия кэша

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

Рабочее решение:

  • Короткий кэш для HTML — 3–10 минут, а не час. Для Google Discover новизна (freshness) критична
  • Долгий кэш для статических ассетов — 30 дней, immutable, с версией в URL
  • При публикации нового материала очищаются только соответствующие URL из кэша

Последний пункт важен: очистка всей зоны (purge_everything) создаёт на origin большую нагрузку одновременно — это «cache stampede». Очищайте только изменённые URL.

Изображения

На новостном сайте изображение — половина трафика. В Zamin все изображения отдаются через одну точку (/uploads/mini/WxH/...) и конвертируются в WebP.

Важная деталь: не полагайтесь на собственные оптимизаторы изображений фреймворка (например, Next.js /_next/image) — на уровне CDN или Apache они могут неожиданно возвращать 403. Свой путь надёжнее.

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

Каждый новый материал автоматически публикуется в Telegram-канал. Это даёт две вещи: дополнительный трафик и более быстрое распространение материала.

Что было ошибкой

Не удалить старый sitemap при миграции. Если старый sitemap остаётся в Google Search Console, Google продолжает запрашивать старые URL, и crawl budget тратится впустую.

Редирект несуществующих страниц на главную. Это считается «soft 404» и наказывается. Правильный путь: если контент есть на другом языке — 307, если это старый тег — fallback на поиск, если его нет вообще — честный 404 или 410.

Не обновлять dateModified при изменении контента. В эпоху AI-поиска это особенно дорого обходится — страница, не обновлявшаяся более 6 месяцев, теряет право на цитирование.

Заключение

Новостной сайт — это постоянная техническая дисциплина. Нельзя просто один раз правильно построить: архив растёт, требования Google меняются, политика кэша пересматривается.

Три вещи дали наибольший эффект: полная индексация архива, короткий кэш HTML и последовательный hreflang.