В этом руководстве мы рассмотрим наиболее распространённые проблемы кэширования многоязычных сайтов и объясним, как Cloudflare и Varnish обрабатывают переведённый контент. Читайте дальше, чтобы выбрать правильную стратегию кэширования, предотвратить попадания в кэш для разных языков и создать надёжную конфигурацию для вашего многоязычного сайта.
Ключевые моменты: многоязычное кэширование веб-сайта с помощью Cloudflare & Varnish
Отдельные языковые версии
Используйте URL-адреса или ключи кэша для конкретного языка, чтобы каждая переведённая версия сохранялась и обслуживалась отдельно. Это помогает предотвратить получение пользователями контента на неправильном языке.
Предотвратите конфликты кэша
Varnish и Cloudflare должны учитывать языковую информацию из URL-адресов, заголовков или файлов cookie. Правильная конфигурация предотвращает попадания в кэш для разных языков и гарантирует, что посетители получат правильный перевод.
Поддерживайте актуальность переводов
Установите подходящие значения TTL кэша и очищайте затронутые кэши при каждом обновлении переводов. Это предотвращает отображение устаревшего контента посетителям.
Почему важно многоязычное кэширование?

Многоязычные веб-сайты могут иметь несколько кэшированных версий одной и той же страницы, поскольку каждый язык может содержать различный контент и URL-адреса. Кэширование этих переведённых версий позволяет веб-сайту повторно использовать существующие ответы вместо многократной обработки одного и того же контента для каждого запроса. Это может сократить количество запросов к исходному серверу, улучшить время загрузки страниц и обеспечить более быстрый опыт для посетителей.
Однако многоязычное кэширование требует правильного разделения каждой языковой версии. Если система кэширования не различает языковые варианты, посетитель, запрашивающий страницу на французском языке, может вместо этого получить кэшированную английскую версию. Аналогично, при обновлении перевода старая кэшированная версия может продолжать отображаться до тех пор, пока не истечёт её срок действия или она не будет аннулирована.
Кэширование также играет роль в том, как поисковые роботы получают доступ к многоязычным страницам. Каждый языковой URL должен последовательно возвращать соответствующий переведённый контент, чтобы поисковые системы могли правильно понимать и индексировать локализованные версии. Поэтому надёжная настройка кэширования должна работать в связке с такими SEO-сигналами, как hreflang, канонические URL-адреса и метаданные для конкретного языка.
Как построить стратегию кэширования для многоязычного сайта

Хорошая стратегия многоязычного кэширования гарантирует, что посетители всегда получают правильную языковую версию, при этом страницы остаются быстрыми, а количество запросов к серверу снижается. Первый шаг — определить, как ваш сайт идентифицирует каждый язык и как система кэширования использует эту информацию.
Маршрутизация URL и поддоменов
Языковые URL-адреса — один из самых простых способов сделать многоязычное кэширование предсказуемым. У каждого языка свой URL-адрес, поэтому кэш может хранить и отдавать каждую версию отдельно. Например, example.com/fr/ может обозначать французскую версию, а example.com/de/ — немецкую.
Субдомены для конкретного языка работают аналогично. Веб-сайт может использовать fr.example.com для французского и de.example.com для немецкого. Поскольку язык включён непосредственно в URL-адрес, посетители и системы кэширования могут легко определить, какую версию обслуживать. Распространённые структуры URL-адресов включают:
- example.com/fr/
- example.com/de/
- fr.example.com
- de.example.com
Определение языка на основе заголовков
Сайты также могут определять предпочитаемый язык посетителя с помощью HTTP-заголовков, в частности заголовка Accept-Language, который отправляет браузер. Например, браузер, настроенный на французский язык, может отправить Accept-Language: fr, что позволит серверу автоматически выбрать французскую версию.
Однако определение языка на основе заголовков требует тщательной настройки кэша. Если кэш учитывает только URL страницы и игнорирует заголовок языка, он может сохранить одну языковую версию и возвращать её посетителям с другими языковыми предпочтениями. Поэтому ключ кэша или поведение Vary должны учитывать соответствующую языковую информацию. Например:
- Accept-Language: en
- Accept-Language: fr
- Accept-Language: de
Определение языка на основе файлов cookie
Другой подход заключается в сохранении языковых предпочтений посетителя в cookie. Как только посетитель выбирает язык, сайт может сохранить этот выбор и использовать его для последующих запросов. Это обеспечивает более последовательный опыт, особенно когда посетители выбирают язык вручную, а не полагаются на настройки браузера.
Сложность заключается в том, что файлы cookie могут усложнить кэширование. Если кэш не различает запросы на основе языкового файла cookie, посетители могут получить кэшированную страницу, предназначенную для другого языка. Поэтому слой кэширования должен быть настроен на изменение или обход кэширования при необходимости. Например:
- language=en
- language=fr
- language=de
Выбор стратегии кэширования
Лучшая стратегия кэширования зависит от того, как ваш сайт обрабатывает выбор языка. Маршрутизация языков на основе URL обычно проще поддается кэшированию, поскольку каждый язык имеет уникальный URL. Определение языка с помощью заголовков и файлов cookie также может работать, но требует более тщательной настройки, чтобы гарантировать правильное разделение кэшированных ответов.
Прежде чем выбирать подход, учтите количество языков, то, как посетители выбирают язык, и как часто меняется переведённый контент. Цель — заставить определение языка и поведение кэша работать вместе, а не позволять слою кэширования обрабатывать каждый запрос как одну и ту же страницу. Ключевые факторы для рассмотрения:
- URL-адреса, специфичные для языка
- Настройка ключа кэша
- Обработка заголовков и файлов cookie
- Время жизни кэша
- Инвалидация кэша
- Частота обновления переводов
- Сканирование поисковыми системами
Как Varnish кэширует многоязычный и переведённый контент

Varnish Cache работает как обратный прокси между посетителями и исходным сервером. Когда посетитель запрашивает страницу, Varnish проверяет, доступен ли действительный кэшированный ответ. Если он находит подходящий ответ, он отдает кэшированное содержимое, не отправляя запрос обратно на исходный сервер. Если подходящего ответа нет, Varnish перенаправляет запрос на исходный сервер, получает ответ и может сохранить его для последующих запросов.
Для многоязычных сайтов Varnish должен различать запросы, которые должны возвращать разные языковые версии. Поэтому информацию о языке необходимо учитывать, когда Varnish определяет, можно ли повторно использовать кэшированный ответ. Это предотвращает ситуацию, когда кэш воспринимает разные переводы как один и тот же ответ.

Ключи кэша для конкретного языка
Varnish нужен способ различать кэшированные ответы, представляющие разные языковые версии. Когда язык уже включён в URL, каждый URL может естественно соответствовать отдельной записи кэша. Когда язык определяется заголовком запроса, cookie или другим значением запроса, конфигурация Varnish должна учитывать эту информацию в своей логике кэширования. Например, многоязычный сайт может различать кэшированные ответы с помощью:
- /en/about/ → запись кэша на английском языке
- /fr/about/ → запись кэша на французском языке
- Accept-Language: en → английский вариант
- Accept-Language: fr → французский вариант
- Языковой файл cookie → выбранный посетителем язык
Точная реализация зависит от того, как сайт определяет язык. Ключевое требование заключается в том, что запросы, создающие разные переведённые ответы, не должны разрешаться в один и тот же кэшированный объект.
Предотвращение попаданий на разные языки
Межъязыковое попадание в кэш происходит, когда Varnish возвращает посетителю, запрашивающему один язык, кэшированный ответ на другом языке. Например, посетитель, запрашивающий французскую страницу, может получить английский ответ, если оба запроса рассматриваются как один и тот же кэшируемый ресурс.
Чтобы снизить этот риск, Varnish должен повторно использовать кэшированный ответ только тогда, когда языковая вариация известна и соответствует запросу. Если язык невозможно определить надежно, ответ следует обрабатывать осторожно, а не сохранять как запись общего кэша. Важные меры защиты включают:
- Избегайте кэширования ответов с неоднозначной языковой информацией
- Согласованно обрабатывайте языковые cookie и заголовки
- Проверьте попадания и промахи кэша для запросов на разных языках
- Проверьте переключение языка после включения кэширования
Инвалидация кэша Varnish
Инвалидация кэша удаляет или помечает кэшированное содержимое как недействительное. Это важно, когда исходный контент или его перевод были обновлены. Без инвалидации Varnish может продолжать отдавать старую кэшированную версию до истечения настроенного TTL.
Для многоязычных сайтов при аннулировании кэша необходимо учитывать все затронутые языковые версии. Если английская страница и её французский перевод обновляются, соответствующие кэшированные ответы должны быть очищены или обновлены, чтобы посетители не видели устаревший контент. Распространённые подходы включают:
- Очистка определенных URL-адресов
- Очистка нескольких языковых версий
- Использование TTL кэша
- Автоматическая очистка после обновления контента
- Обновление затронутых переведённых страниц
Как Cloudflare кэширует многоязычный контент на периферии

Cloudflare работает как слой пограничного кэширования между посетителями и вашим исходным сервером. Когда посетитель запрашивает страницу, Cloudflare проверяет, доступна ли кэшированная версия в пограничной локации. Если действительный ответ существует, он может быть отдан напрямую из пограничной локации вместо запроса страницы с исходного сервера. Если кэшированный ответ недоступен, Cloudflare извлекает контент с исходного сервера и может кэшировать ответ для последующих запросов.
Для многоязычных сайтов этот процесс должен учитывать запрашиваемый язык. Cloudflare должен уметь различать разные языковые версии, чтобы кэшированный ответ на английском не выдавался тому, кто запрашивает французскую версию. Это делает настройку кэша с учётом языка важной, когда переведённый контент доставляется через разные URL-адреса, заголовки или cookie.

Разделение языковых версий
Cloudflare может кэшировать разные языковые версии отдельно, если каждая версия имеет отдельный URL-адрес. Например, /en/, /fr/ и /it/ могут обозначать контент на английском, французском и итальянском языках. Поскольку язык включён непосредственно в URL-адрес, каждая версия может иметь собственную запись в кэше, что упрощает управление отдельными языковыми версиями и их очистку. Например:
- example.com/en/products/
- example.com/fr/products/
- example.com/it/products/
Ключи кэша Cloudflare и языковые вариации
Cloudflare необходимо различать запросы, когда разные языковые входные данные могут приводить к разным ответам. При языковой маршрутизации на основе URL такое разделение происходит естественным образом, поскольку каждый язык имеет собственный URL.
Требуется больше внимания, когда язык определяется заголовком Accept-Language или cookie. Если эти значения влияют на переведённый ответ, но не обрабатываются конфигурацией кэширования, запросы на разные языки могут рассматриваться как один и тот же ресурс. Это может привести к тому, что посетителям, запрашивающим один язык, будет предоставлен другой.
Для большинства многоязычных сайтов маршрутизация на основе URL проще в управлении, поскольку язык непосредственно виден в URL. Определение языка на основе заголовков и файлов cookie также может работать, но требует дополнительной настройки, чтобы гарантировать, что ответы на разных языках не будут некорректно использоваться совместно.
Время жизни кэша и очистка
Время жизни кэша (TTL) определяет, как долго Cloudflare хранит кэшированный ответ до его истечения. Более длительное время жизни может повысить производительность, поскольку контент дольше остаётся в кэше, тогда как более короткое время жизни позволяет изменениям становиться доступными быстрее.
Для многоязычных сайтов значения TTL должны отражать частоту изменения контента и переводов. Страницы, которые часто обновляются, могут требовать более коротких TTL, тогда как стабильные страницы обычно могут использовать более длительные. Когда перевод изменяется, затронутую языковую версию следует очистить или обновить, а не ждать истечения TTL. Это помогает предотвратить получение посетителями устаревших переводов. Стратегия кэширования может включать:
- Короткий TTL для часто обновляемого контента
- Более длительный TTL для стабильных страниц
- Правила кэширования для конкретных URL
- Ручная очистка кэша
- Автоматическая очистка после обновлений
Лучшие практики кэширования многоязычных сайтов

Хорошо спланированная настройка кэширования может сделать многоязычные веб-сайты быстрее, не вызывая у посетителей получения неправильного или устаревшего перевода. Ключ в том, чтобы заставить вашу систему перевода и слой кэширования работать вместе, четко разделяя каждую языковую версию.
Объединение перевода и кэширования
Перевод и кэширование должны работать вместе как часть единого процесса доставки контента. Уровень перевода определяет, какая локализованная версия должна быть возвращена, а уровень кэширования сохраняет этот ответ для последующих запросов. Важно учитывать момент времени: язык должен быть определён до того, как ответ будет закэширован. Это гарантирует, что кэш сохраняет именно тот переведённый ответ, который был запрошен, а не неоднозначную версию, которая может быть использована для другого языка.
Для сайтов, использующих автоматический перевод, такое решение для перевода, как Linguise , может упростить этот процесс, автоматически создавая локализованный контент и позволяя переведённым страницам работать с существующей системой кэширования сайта. Это может быть полезно для многоязычных сайтов, где ручное управление переведёнными версиями и их синхронизация с кэшированным контентом может стать более сложной задачей.
Лучшая практика: Убедитесь, что ваша система перевода и слой кэширования согласованы в том, как определяются языковые версии, прежде чем включать полностраничное кэширование.
Используйте ключи кэша для конкретного языка
Каждый переведённый ответ должен соответствовать правильной вариации кэша. Структуры языков на основе URL упрощают это, поскольку каждый язык уже имеет отдельный URL, тогда как настройки на основе заголовков или cookie требуют дополнительной конфигурации кэша.
Лучшая практика: По возможности предпочитайте URL-адреса для конкретных языков, например:
- /en/about/ → английский
- /fr/about/ → Французский
- /de/about/ → немецкий
Это обеспечивает четкое разделение между языковыми версиями и снижает риск перекрестных попаданий в кэш.
Настройте cache-control и TTL
Заголовки Cache-Control и TTL определяют, как браузеры, CDN и обратные прокси обрабатывают кэшированное содержимое. Правильная настройка помогает сбалансировать производительность сайта с необходимостью доставлять свежие переводы.
Страницы, которые редко меняются, обычно могут дольше оставаться в кэше, а часто обновляемое содержимое должно использовать более короткие TTL. Правильная настройка зависит от того, как часто обновляются содержимое вашего сайта и переводы.
Лучшая практика: Например, вы можете использовать более длительный TTL для статической многоязычной целевой страницы и более короткий TTL для страниц товаров или новостей, которые часто меняются. Всегда тестируйте конфигурацию, чтобы убедиться, что обновлённое содержимое становится доступным, когда ожидается.
Очищайте кэш после обновлений
При изменении контента или переводов очищайте или обновляйте затронутые кэшированные ответы, а не полагайтесь только на истечение срока TTL. Это помогает гарантировать, что посетители получат последнюю версию на всех затронутых языках.
Рекомендация: Включите инвалидацию кэша в рабочий процесс обновления контента и убедитесь, что все затронутые языковые версии охвачены.
Тестирование кэшированных многоязычных страниц
Тестирование важно, потому что проблемы с кэшированием не всегда заметны при обычном просмотре. Страница может выглядеть правильно при прямом доступе, но возвращать неправильный язык при выдаче из кэшированного ответа.
Проверьте каждую языковую версию после настройки или изменения правил кэширования. Проверьте как первые запросы, так и последующие запросы, чтобы убедиться, что правильный кэшированный ответ возвращается последовательно.
Лучшая практика: Проверьте такие сценарии, как:
- Открытие одной и той же страницы на разных языках
- Перезагрузка кэшированной страницы
- Переключение между языками
- Обновление перевода
- Проверка страницы после очистки кэша
- Сканирование URL-адресов для конкретных языков
Контрольный список многоязычного кэширования
Прежде чем запускать вашу многоязычную систему кэширования в производство, используйте простой контрольный список, чтобы убедиться, что определение языка, кэширование и обновление контента работают вместе правильно.
Контрольный список лучших практик:
- Присвойте каждой языковой версии уникальный URL или вариант кэша
- Используйте ключи кэша для конкретного языка
- Настройте соответствующие заголовки Cache-Control
- Устанавливайте TTL в зависимости от частоты обновления контента
- Очищайте затронутые языковые версии после обновлений
- Тестируйте кэшированные страницы на всех поддерживаемых языках
- Проверьте ответы на неправильном языке
- Проверьте наличие устаревшего переведённого контента
- Проверка URL-адресов для конкретных языков с помощью поисковых роботов
Заключение
Эффективное кэширование многоязычных сайтов требует баланса между производительностью сайта и предоставлением каждому посетителю правильной, актуальной языковой версии. Используя языковые ключи кэша, подходящие TTL и надёжную инвалидацию кэша, вы можете сократить количество запросов к серверу, предотвращая при этом показ контента на неправильном языке и устаревшего контента.
Для более простого способа управления переведённым контентом зарегистрируйтесь в Linguise и оптимизируйте рабочий процесс вашего многоязычного сайта с помощью автоматического перевода, сохраняя ваш локализованный контент быстрым и управляемым.



