Міфи seo все про заголовку 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). Фактично, він використовується в сценаріях перевірки чи потрібно завантажувати поточний документ заново чи ні. Є кілька способів такої перевірки, ми ж розглянемо тільки перевірку за часом.
Ідея, описана в стандарті дуже проста. При першому запиті документа сервер повідомляє дату і час останньої зміни документа, наприклад:
Зверніть увагу, сервер обов'язково повідомив свого часу ( «звіримо годинник!») І дату модифікації документа, яке було раніше, ніж поточний час.
При повторному зверненні клієнт (браузер або пошуковий робот) може запросити документ наступним чином: дай документ, якщо він змінювався з вказаної дати:
Зверніть увагу, сервер відповів саме 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.
Ну і поменше слухайте сеошників, які не знають елементарних основ роботи інтернету.
Микола, ось якби на лекціях «Спеціаліст» ви б не розмазували інформацію на безліч годин, не відволікали слухачів на всякі історії, а концентрували б їх увагу на головному, ось тоді і не було всяку нісенітницю в Рунеті. Прослухавши багатогодинні ваші лекції, ну і звичайно, ваших колег (там і того гірше) прийшов до висновку про дефіцит фахівців SEO вУкаіни. Інформацією, як сміттям забивали на лекціях голову, а знань не давали. Вже вибачте, від душі. Дякую за інформацію на цій сторінці. Потрібна.
Михайло, а це не зовсім SEO, це більше веб-мастеринг, який за часом займає значно більше ніж SEO. Тільки налаштуванні веб-сервера можна присвятити часу стільки, скільки у вас займав весь курс по SEO. І це все потрібно. Тільки не всі це розуміють.
Доброго дня. Встановив плагін. Включив настройки для відповіді 304. Але все одно цього заголовка нема. Пробував в коді прописати те ж саме. Через що це може бути? Server: nginx
Як мінімум через те, що згенерований файл nginx.conf в корені сайту треба підключити до конфігурації nginx і перевантажити його