Один из этапов оптимизации интернет-сайта для его правильной работы и успешного продвижения — оптимизация на стороне сервера. Среди прочих моментов — настройка правильного ответа сервера на запрос «Last-Modified». Правильная настройка этого параметра может повлиять на увеличение скорости загрузки сайта и положительно скажется на его индексации поисковыми роботами.
- Что такое Last-Modified и зачем он нужен?
- Для чего нужна правильная настройка Last-Modified?
- Как проверить, корректно ли настроен Last-Modified?
- Настраиваем Last-Modified
- Поможем с настройкой Last-Modified!
- Все услуги
- Битрикс24
- Как проверить last-modified?
- Как настроить last-modified?
- 1. Первый способ — установка плагина
- 2. Второй способ — PHP код
- 3. Третий способ — запись в .htaccess
- Что такое Last-Modified
- Так нужен ли Last-Modified или нет?
- Вместо заключения
Что такое Last-Modified и зачем он нужен?
Как видно из названия, заголовок Last-Modified говорит клиенту (посетителю сайта) о времени последнего изменения той или иной страницы сайта. Если в качестве посетителя сайта выступает поисковый робот и на сайте (на сервере) не настроен (или настроен неправильно) ответ Last-Modified на запрашиваемый документ или страницу, поисковому роботу ничего не остается, как производить индексацию всех страниц интернет-ресурса снова и снова при каждом посещении, таким образом создавая определенную нагрузку на сервер, расположенный на хостинг-площадке. А если количество страниц сотни или даже тысячи? В зависимости от характеристик и возможностей и сервера, существует вероятность «нарваться» на какую-нибудь ошибку со стороны хостинга. В дополнение к этому следует отметить, что поисковый робот имеет лимит на количество индексируемых «за раз» страниц, поэтому в случае отсутствия правильной настройки заголовка Last-Modified, мы рискуем тем, что неизмененные страницы проиндексируются роботом, а нужные нам новые страницы — нет.
Исходя из спецификации RFC 2616, описывающей протокол передачи гипертекста HTML, клиент может «спросить» у сервера, не изменилась ли страница с определенной даты, послав серверу заголовок «If-Modified-Since». Если запрашиваемая страница не изменилась, сервер возвратит заголовок «304 Not Modified» и браузер не будет загружать страницу, а web-сервер не будет отдавать много данных. В противном случае (если страница сайта изменялась со времени предыдущего запроса), сервер возвратит ответ «200 OK» и непосредственно код самой страницы.
В дополнение к вышесказанному упомянем рекомендации Яндекса: «Робот не сможет получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. А так как число страниц, получаемых роботом с сайта за один заход, ограничено, изменившиеся страницы будут переиндексироваться реже» .
ИТОГО: важным назначением заголовка «Last-Modified» служит информирование посетителя сайта и поискового робота о дате последней модификации какого-либо документа.
Для чего нужна правильная настройка Last-Modified?
При помощи правильной настройки ответа сервера Last-Modified мы сможем достичь сразу несколько положительных результатов для нашего сайта:
- Увеличивается скорость загрузки страницы сайта для людей: в случае, если страница уже была посещена пользователем и на момент следующего посещения страница не менялась, браузер посетителя не будет заново загружать страницу, а отобразит ее сохраненную в кеше копию;
- Снижается нагрузка на хостинг-площадку (сервер): при таком алгоритме работы сервер будет загружаться гораздо меньше за счет необходимости передачи посетителю сайта объема только измененных страниц;
- Отображается дата последнего документа в поисковой выдаче: этот факт может привлекать посетителей к вашему сайту, если будет отображаться «свежая» дата;
- Сортировка по дате: страницы сайта примут участие в сортировке по дате в поисковой выдаче;
- Существенно ускоряется индексация сайта поисковыми роботами: за счет быстрого ответа вашего сайта о дате сканируемых страниц, старые (уже проиндексированные) страницы будут «отбрасываться в сторону», уступая место «свежим» документам. Этот пункт является наиболее значимым при продвижении сайта, т.к. высокая скорость индексации повышает уровень доверия к сайту у поисковых роботов.
Как проверить, корректно ли настроен Last-Modified?
Один из сервисов, на котором можно проверить правильность (да и вообще существование) настроенного ответа сервера Last-Modified — одноименный
В поле ввода необходимо написать адрес вашего сайта или конкретной страницы и нажать на кнопку «Проверить». Результатом работы сервиса будет демонстрация ответа вашего сайта на запрос заголовков «Last-Modified» и «304 Not Modified». Пример такой проверки:
При отрицательном результате крайне рекомендуем приступить к настройке .
Настраиваем Last-Modified
Рассмотрим реализацию ответа HTTP-заголовка Last-Modified на PHP.
В интернете очень часто встречаются такие рекомендации по настройке Last-Modified:
Так и хочется воскликнуть: «Такой хоккей нам не нужен!» И давайте разберемся почему. В ответ на запрос пользователя функция gmdate вернет нам текущую дату по Гринвичу (GMT). И так будет происходить каждый раз при каждом запросе пользователя или поискового робота — сервер будет возвращать нам именно свою текущую дату. Получается, что при каждом посещении вашего сайта поисковиками, они будут видеть, что запрашиваемая страница только что обновлена. Это может быть «полезным» лишь несколько раз. Через некоторое время поисковик поймет, что его «дурят» и утратит какое-либо доверие к вашему сайту. Соответственно, такая реализация нам не подходит.
Обратимся за помощью к вышеупомянутому ресурсу last-modified.com. На нем также представлен вариант реализации HTTP-заголовка Last-Modified на PHP. Выглядит он следующим образом:
= $LastModified_unix) <
header($_SERVER[‘SERVER_PROTOCOL’] . ‘ 304 Not Modified’);
exit;
>
Давайте разберем работу этого кода. Переменная $LastModified_unix задается вручную в формате Unix Time Stamp (число секунд, прошедших с начала эпохи Юникс — с 1 января 1970 года).
Функция gmdate возвращает текущее время по Гринвичу в формате Day, DD Mon YEAR HH:MM:SS GMT.
Далее: получаем время последнего изменения страницы, проверяем наличие If-Modified-Since, если есть — отдаем 304 Not Modified и останавливаем работу скрипта. В противном случае генерируем заголовок Last-Modified и отдаем страницу целиком.
В указанном выше варианте предлагается задавать время $LastModified_unix вручную. А что делать, если на сайте очень много страниц? Для этого немного «модернизируем» скрипт, заменив в нем всего лишь одну первую строчку:
= $LastModified_unix) <
header($_SERVER[‘SERVER_PROTOCOL’] . ‘ 304 Not Modified’);
exit;
>
В обновленном варианте первая строчка кода преобразует текстовое представление даты на английском языке в метку в формате Unix Time Stamp, таким образом используя автоматически вычисленное время изменения текущей страницы сайта.
Всё, готово! Теперь нам остается вставить получившийся код в раздел . каждой страницы сайта и наслаждаться высокой скоростью загрузки страниц и их индексации поисковыми роботами.
Поможем с настройкой Last-Modified!
Начните с простого звонка Наш телефон — — работает в режиме нон-стоп, чтобы вы могли оперативно получать интересующую вас информацию по решению задач развития и поддержки вашего сайта. Или пишите на электронную почту info@t-design.ru. Мы проконсультируем по всем вопросам и подберем оптимальный тариф для вашей компании.
Все услуги
Битрикс24

Удобная и понятная система управления компанией и бизнес-процессами, включающая в себя полный комплекс инструментов, необходимых современному руководителю предприятия и его сотрудникам.
Вот не было у меня печали, пока не установил себе сегодня плагин Seo Scan. Хороший плагин, который показывает, что может не понравиться google в вашем сайте и сервере. И мой сайт кое в чем не понравился точно — это отсутствие last-modified .
Немного теории, сам только сегодня про это узнал. Last-modified — это http заголовок, который посылает сигнал о том, были ли на такой-то странице изменения или нет, посылая ответ If-Modified-Since с кодом 304. Как то так…
Хотя без всего этого сайт будет индексироваться, как говорит Яндекс, но есть и существенные минусы при отсутствии этого заголовка:
- в результатах поиска не будет показываться дата рядом со страницами сайта;
- при сортировке по дате сайт не будет виден пользователям;
- робот не сможет получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. А так как число страниц, получаемых роботом с сайта за один заход, ограничено, изменившиеся страницы будут переиндексироваться реже.
Как видите, минусов много, и в первую очередь — это не очень шустрая индексация и переиндексация сайта. То есть, вы внесли в статью ПОЛЕЗНОЕ изменение, а я их сейчас делаю много каждый день, а Яндекс и Google могут увидеть это только через пару месяцев! Нет, такой хоккей нам не нужен, теперь я разобьюсь в лепешку, а исправлю этот недочет!
Как проверить last-modified?
Проверить можно разными способами, в wordpress самое простое — это установить вышеупомянутый плагин Seo Scan, у меня он выдал такое:
Скорость сервера тоже барахлит, но это другая история, потом поковыряюсь и с этим. Можно так же проверить last-modified через сервис с одноименным названием last-modified.com
Как видите, и тут показывает отсутствие ответа If-Modified-Since — Last Modifed не найден! А можно использовать сервис Яндекса Проверка ответа сервера
Тут тоже самое — Код статуса HTTP: «304 Not Modified» — значит не работает система. Хотя через какое-то время явная ошибка пропала, но код ответа 304 так и не появился.
Сразу стало интересно, а у кого-то хоть это работает? Решил проверить это у тех блогеров, которые сами писали мануалы на эту тему:
Да, у парня из ТОПа по этому запросу Last-Modified найден, а значит это возможно и для меня. Кстати, в его статье перечисляются многие способы настройки Last Modified, попробуем и их, хотя я нашел и другие.
Как настроить last-modified?
Буду описывать все способы, которые попробовал и сразу говорить, заработало у меня или нет. Но имейте ввиду, что если не заработало у меня, то это не значит, что не заработает у вас.
1. Первый способ — установка плагина
Самый простой способ для тех, у кого WordPress — это установить плагины, для этого предназначенные, например: Add Headers, If Modified Since или If Modified Since Header.
У меня ни один из этих плагинов не дал результата, не знаю почему. Может заработает у вас?
2. Второй способ — PHP код
Сервис last-modified.com , описанный выше, предлагает в файл header.php, в самое начало, поместить такой php код:
Мне это тоже не помогло. Предлагаю так же попробовать разместить его в файле index.php в корне сайта, но мне и это не помогло.
3. Третий способ — запись в .htaccess
Если у вас сервер на Apache, то скорее всего у вас это заработает. Нужно в файл .htaccess в корне сайта вставить код:
У меня не заработало, так как у меня стоит связка Ngnix + Apache и все эти манипуляции с .htaccess чаще всего не срабатывают.
После всех этих мучений подумал: а чего это я один мучаюсь? Напишу как в службу поддержки хостинга, там люди грамотные, может подскажут? Написал, сижу жду.
Пришел ответ от техподдержки:
Всё просто. Страницы вашего сайта генерируются php-скриптами которые не выдают браузеру этот заголовок.
Веб-сервер (nginx) для статических файлов (jpg, gif, css, js и т.д.) выдаёт в заголовке last-modified дату последнего изменения файла. Примеры на скриншотах.
Если у вас нет очень большой посещаемости сайта то кэшировать страницы сайта на стороне браузера нет смысла.
В общем, кажется мне не светит настроить last-modified в этой конфигурации нормально. Может мне отказаться от ngnix в пользу apache? Сервер у меня нормальный, а посещаемость на фантастическая. Может попробовать?
Ну а чтобы просто так не сидеть, а напрячь еще и вас, читатели, решил пока опубликовать этот пост, может вы знаете, как включить last-modified в моем случае?
В области поисковой оптимизации сайтов (SEO) гуляет вообще очень много разных мифов. Какие-то из них имеют под собой основу, какие вообще взялись не пойми откуда. В этой заметке рассмотрим один из них — использование заголовка ответа last-Modified.
Некоторое время назад к нам попал некий документ, озаглавленный «Рекомендации Ingate для веб студий по продвигаемым сайтам». И одна из «рекомендаций» была следующей:
После редизайна или на новом разрабатываемом сайте должна быть прописана дата последней модификации страниц сайта (Last Modified)
Для добавления на сайт на PHP информации о дате последней модификации страниц необходимо в самое начало исходного кода каждой страницы вставить скрипт
Именно эта дикая ахинея, эта несусветная чушь и откровенно бредовый код и сподвигли меня написать эту заметку. Здесь я постараюсь объяснить, что такое Last-Modified, зачем он нужен и как его используют браузеры и поисковые машины.
Что такое Last-Modified
Веб-сервер при передаче информации клиенту (браузеры или поисковому роботу) сообщает довольно много дополнительных данных. Их можно посмотреть в консоли браузера, например:
Существуют стандарты RFC2616, RFC 7230-7237 (Hypertext Transfer Protocol — HTTP/1.1), которые подробно объясняют, как происходит или должно происходить взаимодействие по этому протоколу.
Как можно догадаться из названия заголовок ответа Last-Modified передает информацию о времени изменения документа.
Почему же он важен? Этот заголовок не является обязательным может использоваться в так называемых условных запросах (conditional request) или валидаторах кэша (cache validating). Фактически, он используется в сценариях проверки нужно ли загружать текущий документ заново или нет. Есть несколько способов такой проверки, мы же рассмотрим только проверку по времени.
Идея, описанная в стандарте очень проста. При первом запросе документа сервер сообщает дату и время последнего изменения документа, например:
[plain highlight=»7″]
GET / HTTP/1.1
Host: example.com
HTTP/1.1 200 Ok
Content-Type: text/html
Date: Fri, 19 Dec 2014 15:31:28 GMT
Last-Modified: Fri, 19 Dec 2014 15:00:00 GMT
[/plain]
Обратите внимание, сервер обязательно сообщил свое время («сверим часы!») и дату модификации документа, которое было раньше, чем текущее время.
При повторном обращении клиент (браузер или поисковый робот) может запросить документ следующим образом: дай документ, если он менялся с указанной даты:
[plain highlight=»3″]
GET / HTTP/1.1
Host: example.com
If-Modified-Since: Fri, 19 Dec 2014 15:01:00 GMT
HTTP/1.1 304 Not Modified
Content-Type: text/html
Date: Fri, 19 Dec 2014 15:35:28 GMT
Last-Modified: Fri, 19 Dec 2014 15:00:00 GMT
[/plain]
Обратите внимание, сервер ответил именно 304 Not Modified и прекратил дальнейшую передачу. Это здорово сэкономило время, поскольку браузеру уже не нужно повторно загружать документ.
При этом важно обратить внимание на стандарт:
a) If the request would normally result in anything other than a 200 (OK) status, or if the passed If-Modified-Since date is invalid, the response is exactly the same as for a normal GET. A date which is later than the server’s current time is invalid.
b) If the variant has been modified since the If-Modified-Since date, the response is exactly the same as for a normal GET.
c) If the variant has not been modified since a valid If-Modified-Since date, the server SHOULD return a 304 (Not Modified) response.
Заметьте, здесь сказано, что если передаётся неправильная информация о дате или документ был изменен, то ответ должен быть как обычный GET без дополнительных условий. Если же никаких изменений не было ответ ДОЛЖЕН быть 304.
Понятно, клиенты (браузеры и роботы) берут информацию о дате последнего изменения документа из предыдущего своего запроса, но если там она передавалась некорректно (см. бредовый код Ингейта выше) то смысла в этом заголовке вообще нет!
Идем далее, сам по себе заголовок Last-Modified особой роли не играет, наиболее важен ответ сервера на запрос с условием If-Modified-Since — 304 (документ не менялся) или 200 (документ менялся, вот актуальная версия). Это описывается даже в руководстве для веб-мастеров Яндекса:
настройте сервер на выдачу корректных заголовков ответов (например, если страница не существует, выдавать ошибку 404, а если поступил запрос If-Modified-Since, то выдавать код 304, если страница с указанной в запросе даты не изменялась).
Также можно увидеть, что если сервер никак не реагирует на условный запрос GET, то он ничем не отличается от обычного запроса. То есть, заголовок Last-Modified с текущим временем, к тому же и неправильно сформированным (привет Интегйту!) вообще не нужен!
Так нужен ли Last-Modified или нет?
Вообще нужен. Но важно понимать, что не сам заголовок играет какую-либо роль, а весь сценарий условных запросов, который должен быть реализован сайтом до конца. Именно в этом случае мы получим высокую скорость индексации сайта.
Но зачастую реализовать это в готовой CMS бывает весьма затруднительно. Возможно для этого потребуется довольно значительные изменения кода самой CMS.
Хотя для ряда CMS это можно реализовать включением кэширования страниц. Если CMS кэширует страницы, создавая и отдавая фактически статичные файлы, то сам веб-сервер будет правильно отвечать на условные запросы. Например, в WordPress это можно реализовать с помощью плагина WP Super Cache:
Проверим его в работе. Я включил этот плагин, открыл браузер в анонимном режиме и сделал два запроса одной страницы. Хорошо видно, что второй ответ правильный — 304 Not Modified:
Вместо заключения
Таким образом, мы разобрались с заголовком Last-Modified. Во-первых, он должен передавать информацию о дате и времени реального изменения документа. Во-вторых, крайне важна реакция сервера на условный запрос с заголовком If-Modified-Since.
Ну и поменьше слушайте сеошников, которые не знают элементарных основ работы интернета.