Last-Modified - время последнего изменения записи

Продолжаю исследовать свой движок и добавлять в него свои правки, которые на мой взгляд помогают развитию сайта. Сегодня я дошел до заголовка Last-Modified, чье предназначение: говорить поисковикам время последнего изменения записи.

Наверняка у вас появился вопрос: что дает заголовок Last-Modified? В первую очередь ускоренную индексацию поисковыми системами. Поисковый робот получив дату последнего изменения может определить стоит ли переиндексировать документ или нет. Если ПС "решает", что документ без изменения с момента его последнего прохода по сайту, то остается больше времени на новые записи. Экономим время! Если ваш сервер имеет ограничение на нагрузку, то отдача данного заголовка поможет снизить нагрузку создаваемую поисковиками, так как они не будут "бродить" лишний раз по документам, которые не были изменены.
Это не все преимущества заголовка...

Отдавать заголовок я решил при помощи PHP. Я написал простую функцию (код для функции: https://last-modifie ... -since-php.html), вот она:
	// Last Modified
	public function lastModified($timeStamp, $timeUpdate)
	{
		$lastModifiedUnix = !empty($timeUpdate) ? $timeUpdate : $timeStamp;

		$ifModifiedSince = false;
		if (isset($_ENV['HTTP_IF_MODIFIED_SINCE']))
		{
			$ifModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));
		}

		if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
		{
			$ifModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
		}

		if ($ifModifiedSince && $ifModifiedSince >= $lastModifiedUnix)
		{
			header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
			exit;
		}		

		$lastModified = gmdate('D, d M Y H:i:s \G\M\T', $lastModifiedUnix);
		header('Last-Modified: ' . $lastModified);
	} // Last Modified End

Все просто - получаем время последнего изменения страницы, проверяем наличие If-Modified-Since, если есть - отдаем 304 Not Modified и останавливаем работу скрипта, иначе генерируем заголовок Last-Modified и отдаем страницу.

И теперь там, где мне надо отдавать заголовок Last-Modified, я выполняю эту функцию:
Phpfox::getLib('seo.header')->lastModified($timeStamp, $timeUpdate);

Переменные передаваемые в функцию:
  • $timeStamp - Время (Unix) создания записи (будет использоваться если запись ни разу не редактировалась).
  • $timeUpdate - Время (Unix) редактирования записи.

Вот собственно и все.

Проверить ответ заголовка Last-Modified можно тут https://last-modified.com/ru/.

Возможно будет интересно:
- Last-Modified - время последнего изменения записи для phpFox
- Сайт не отдает заголовок Last-Modified
- Два заголовка "Last-Modified" для одной страницы
Избавился от лишней переменной, теперь моя функция выглядит так:
	// Last Modified
	public function lastModified($timeUpdate)
	{
		$ifModifiedSince = false;
		if (isset($_ENV['HTTP_IF_MODIFIED_SINCE']))
		{
			$ifModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));
		}

		if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
		{
			$ifModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
		}

		if ($ifModifiedSince && $ifModifiedSince >= $timeUpdate)
		{
			header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
			exit;
		}		

		$lastModified = gmdate('D, d M Y H:i:s \G\M\T', $timeUpdate);
		header('Last-Modified: ' . $lastModified);
	} // Last Modified End

Использование:
Phpfox::getLib('seo.header')->lastModified($timeUpdate);