Понедельник, 9 декабря 2024 г.
Представляем наши рекомендации в отношении кеширования.
С развитием интернета количество страниц, сканируемых роботами Google, существенно возросло. Инфраструктура сканирования Google поддерживает и всегда поддерживала эвристические механизмы кеширования. Но количество запросов, ответы на которые можно получить из локального кеша, сократилось: 10 лет назад доля таких запросов составляла 0,026 %, и это совсем небольшая цифра. Теперь же она составляет всего 0,017 %.
Почему кеширование так важно
Кеширование – один из важнейших элементов большого пазла под названием интернет. Кеширование обеспечивает быструю загрузку страниц при их повторном открытии, экономит вычислительные мощности, электроэнергию, а также позволяет снизить объем трафика и тем самым способствует сокращению расходов как клиентов, так и провайдеров.
Если у вас крупный сайт, контент которого размещен на отдельных URL и меняется незначительно, локальное кеширование может повысить эффективность сканирования вашего сайта. Инфраструктура сканирования Google поддерживает эвристическое кеширование HTTP в соответствии со стандартом кеширования HTTP, в частности при помощи заголовка ответа ETag
и заголовка запроса If-None-Match
, а также при помощи заголовка ответа Last-Modified
и заголовка запроса If-Modified-Since
.
Мы настоятельно рекомендуем использовать ETag
, поскольку это реже приводит к ошибкам (в отличие от значения Last-Modified
его значение не структурировано). А если у вас есть возможность, то лучше настроить оба, интернет будет вам признателен.
Если говорить о том, при каких изменениях необходимо обновлять кеш на стороне пользователей, то здесь решать вам. Мы рекомендуем обновлять кеш при значительных изменениях контента. Изменение одной лишь даты сообщения об авторском праве внизу страницы вряд ли можно считать значительным.
Заголовки ETag
и If-None-Match
Поисковые роботы Google поддерживают условные запросы на основе содержимого ETag
в соответствии со стандартом кеширования HTTP.
То есть, чтобы сообщить поисковым роботам Google о предпочтениях кеширования, в качестве значения Etag
следует использовать любую строку ASCII (обычно это хеш содержимого или номер версии, но можно также использовать часть числа π), которая будет уникальным образом представлять контент, размещенный на странице.
Если на одном и том же URL размещено несколько версий контента (например, мобильная версия страницы и версия для ПК), то для каждой версии должно быть свое уникальное значение ETag
.
Поисковые роботы Google, поддерживающие кеширование, отправят значение ETag
в ответ на предыдущее сканирование этого URL в заголовке If-None-Match header
. Если значение ETag
, отправленное поисковым роботом, совпадает с текущим значением, которое было сгенерировано сервером, то ваш сервер должен вернуть пустой ответ с кодом статуса HTTP 304
("Не изменялось"). Есть несколько причин, по которым тело HTTP-запроса должно быть пустым:
- вашему серверу не нужно тратить вычислительные мощности на генерирование контента, то есть это экономит ваши средства;
- вашему серверу не нужно передавать тело HTTP-запроса, что также приводит к экономии.
На стороне клиента браузер или робот Googlebot могут извлечь контент, размещенный по этому URL-адресу, из внутреннего кеша клиента. Поскольку передача данных в этом случае не осуществляется, это происходит очень быстро, что не только нравится пользователям, но и позволяет им экономить ресурсы.
Заголовки Last-Modified
и If-Modified-Since
Наряду с условными запросами на основе заголовков ETag
поисковые роботы Google также поддерживают условные запросы Last-Modified based
в соответствии со стандартом кеширования HTTP. Здесь применяется та же логика, что и с заголовками ETag
: чтобы сделать ресурс кешируемым, используется идентификатор, и это обеспечивает те же преимущества, что и при использовании ETag
на стороне клиента.
Вот несколько советов по использованию Last-Modified
в качестве директивы кеширования:
-
Формат даты в заголовке
Last-Modified
должен соответствовать стандарту HTTP. Чтобы избежать проблем с обработкой файла, рекомендуем использовать следующий формат даты: "день недели, DD Mon YYYY HH:MM:SS (часовой пояс)". Пример: Fri, 4 Sep 1998 19:15:56 GMT. -
Также советуем использовать поле
max-age
заголовкаCache-Control
, чтобы помочь поисковым роботам определять, требуется ли повторное сканирование определенного URL. Укажите в полеmax-age
длительность периода в секундах, в течение которого контент не будет изменяться. Пример:Cache-Control: max-age=94043
.
Примеры
Понять принцип работы эвристического кеширования можно на примере цепочки запросов и ответов. На основе следующих двух цепочек, одной для заголовков ETag
/If-None-Match
, другой для заголовков Last-Modified
/If-Modified-Since
, мы покажем, как работает эвристическое кеширование.
ETag /If-None-Match |
Last-Modified /If-Modified-Since |
|
---|---|---|
Ответ сервера на запрос сканирования. Это ответ, из которого поисковый робот может сохранить поля заголовков ETag и Last-Modified , содержащих условие для выполнения запроса.
|
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT ETag: "34aa387-d-1568eb00" ... |
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT Last-Modified: Fri, 4 Sep 1998 19:15:56 GMT Cache-Control: max-age=94043 ... |
Последующий условный запрос поискового робота. Условный запрос на основе значений заголовков, сохраненных во время предыдущего запроса. Значения в заголовках запроса If-None-Match и If-Modified-Since отправляются обратно на сервер для проверки.
|
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-None-Match: "34aa387-d-1568eb00" ... |
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
Ответ сервера на условный запрос. Поскольку условия в значениях заголовков, отправленных поисковым роботом, проверяются на стороне сервера, сервер возвращает поисковому роботу код статуса HTTP 304 (с пустым телом). Это будет происходить с каждым последующим запросом до тех пор, пока проверка условий не завершится ошибкой (дата ETag или Last-Modified меняется на стороне сервера).
|
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:52 GMT Vary: Accept-Encoding If-None-Match: "34aa387-d-1568eb00" ... |
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:51 GMT Vary: Accept-Encoding If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
Если вы хотите сделать свой ресурс более удобным для пользователей, а также немного сэкономить на трафике, обратитесь к вашему хостинг-провайдеру, поставщику своей CMS или разработчикам, чтобы для вашего сайта включили HTTP-кеширование. При прочих равных условиях это сделает ваш сайт немного более привлекательным.
Если у вас остались вопросы по кешированию, то вы можете задать их на справочном форуме Центра Google Поиска, а если хотите оставить комментарий на эту тему, отправьте отзыв к документации, посвященной кешированию, которую мы опубликовали вместе с этой статьей.
Хотите узнать больше? Прочитайте все записи из серии "О сканировании в декабре"
Аврора Моралес (Aurora Morales)
Безопасность Аврора Моралес (Aurora Morales) входит в команду специалистов Google, которые отвечают за безопасность. Вот уже много лет она помогает представителям нашей отрасли осваивать правила и инструкции для различных продуктов, чтобы мы
Адриана Портер Фелт (Adriana Porter Felt)
Команда по обеспечению безопасности в Chrome Ознакомьтесь с другими статьями Адрианы Портер Фелт в блоге Центра Google Поиска.
Алан Кент (Alan Kent)
Специалист по связям с разработчиками Читайте публикации Алана Кента в блоге Центра Google Поиска. Твиттер
Алисса Робертс
Бывшая сотрудница команды по оценке качества поиска Ознакомьтесь с другими записями Алиссы Робертс в блоге Центра Google Поиска. LinkedIn
Амир Рахум (Amir Rachum)
Инженер-программист Search Console Ознакомьтесь с другими записями Амира Рахума в блоге Центра Google Поиска. Сайт
Андрей Пасковичи
Команда Search Console Читайте публикации Андрея Пасковичи в блоге Центра Google Поиска.
Анна Огава (Anna Ogawa)
Старший консультант экосистемы Поиска Ознакомьтесь с другими записями Анны Огава в блоге Центра Google Поиска. Твиттер | LinkedIn
Асаф Арнон (Asaph Arnon)
Инженер-программист, менеджер Посмотрите другие посты Асафа Арнона в блоге Центра Google Поиска. LinkedIn
Асиш Марина (Aaseesh Marina)
Менеджер по поддержке продукта Асиш Марина – менеджер службы поддержки Search Console в компании Google. Он помогает владельцам сайтов сделать их ресурсы заметнее в Google Поиске. Ранее Асиш работал в команде, которая оценивает качество результатов
Ванесса Фокс
Инструменты для веб-мастеров, менеджер по продуктам Читайте другие записи Ванессы Фокс в блоге Центра Google Поиска. LinkedIn | Mastodon | Твиттер | Сайт
Вэйцзы Ван
Ознакомьтесь с другими записями Вайзи Вона в блоге Центра Google Поиска. LinkedIn
Грег Гротхаус (Greg Grothaus)
Инженер-программист, команда Google по оценке качества поиска Ознакомьтесь с другими статьями Грега Гротхауса в блоге Центра Google Поиска. Сайт
Даниэль Маршак
Менеджер по продукту, поиск видео Ознакомьтесь с записями Даниэль Маршак в блоге Центра Google Поиска. LinkedIn
Джакомо Ньекки Русконе
Команда по безопасности поиска Джакомо работает над тем, чтобы сервисы Google и весь интернет становились более безопасными. Для этого он вместе с различными партнерами стремится находить решения ключевых мировых проблем, таких как угрозы
Дженнифер Гранито (Jennifer Granito)
Менеджер по качеству новостей в группе продуктов Дженнифер Гранито – менеджер по качеству новостей в группе продуктов Google. В настоящее время она является ведущим специалистом по продукту и отвечает за качество и достоверность новостей в Поиске,
Джереми Вайнстайн
Веб-мастер Google Ознакомьтесь с другими записями Джереми Вайнстайна в блоге Центра Google Поиска. LinkedIn
Джессика Вонг (Jessica Wong)
Команда по оценке качества поиска Ознакомьтесь с другими записями Джессики Вонг в блоге Центра Google Поиска. LinkedIn
Джонатан Саймон (Jonathan Simon)
Аналитик трендов Google Читайте публикации Джонатана Саймона в блоге Центра Google Поиска.
Джонатан Сиди
Менеджер по продуктам Ознакомьтесь с другими записями Джонатана Сиди в блоге Центра Google Поиска. LinkedIn
Дэниел Йосеф (Daniel Yosef)
Инженер-программист Ознакомьтесь с другими записями Дэниела Йосефа в блоге Центра Google Поиска. LinkedIn
Дэнни Салливан (Danny Sullivan)
Специалист Google Поиска по связям с общественностью Ознакомьтесь с другими записями Дэнни Салливана в блоге Центра Google Поиска. Mastodon
Зив Ходак (Ziv Hodak)
Менеджер по продуктам Ознакомьтесь с другими записями Зива Ходака в блоге Центра Google Поиска.
Зинеб Аит Бахаджи
Аналитик трендов Google Ознакомьтесь с другими записями Зинеб Аит Бахаджи в блоге Центра Google Поиска. LinkedIn | Твиттер
Зуи Нгуен
Аналитик по вопросам качества Google Поиска Читайте публикации Зуи Нгуена в блоге Центра Google Поиска.
Инси Ву (吴萤西)
Инженер-программист Ознакомьтесь с другими записями Инси Ву в блоге Центра Google Поиска. LinkedIn
Ирина Тудуцэ
Инженер-программист Посмотрите другие записи Ирины Тудуцэ в блоге Центра Google Поиска. LinkedIn
Картикеян Иленгован (Karthikgeyan Elangovan)
Аналитик по вопросам качества Google Поиска Читайте публикации Картикеяна Иленгована в блоге Центра Google Поиска. LinkedIn
Кацуяки Икегами (池上 克明)
Инженер-программист Ознакомьтесь с другими записями Кацуяки Икегами в блоге Центра Google Поиска. LinkedIn | Твиттер | GitHub
Кейла Хэнсон
Инженер-программист Читайте публикации Кейлы Хэнсон в блоге Центра Google Поиска. LinkedIn
Киётака Танака (Kiyotaka Tanaka)
Специалист по обучению пользователей и информационной поддержке Ознакомьтесь с другими статьями Киётаки Танаки в блоге Центра Google Поиска. LinkedIn