Строчка
всего лишь отдаст поисковому боту заголовок Last-Modified с текущей датой сервера. Насколько я знаю из общения с СЕО-ками это не только не даст никакого эффекта, но и даже вредно, т.к. бот воспринимает это за попытку ускорить индексацию сайта посредством манипулирования этим заголовком.
По поводу нагрузки на сервер: т.к. в этом решении не обрабатывается запрос If-Modified-Since, следовательно 304 заголовок не будет отдан и запрашивающая сторона не узнает о том, что страница не изменилась и запросит её в обычном порядке.
Вот моя версия решения проблемы. Работает для элементов инфоблоков и страниц, реализованных через файлы.
Данный код можно поместить в \bitrix\modules\main\include\prolog_after.php, заменив им фрагмент:
В фильтре (массив $arFilter) необходимо указать вместо 'CODE' => $_REQUEST['ELEM_CODE'] условие, которое актуально для вашего ресурса.
Проверить результаты можноздесь .
Цитата |
---|
header('Last-Modified: '.gmdate('D, d M Y H:i:s'). ' GMT'); |
По поводу нагрузки на сервер: т.к. в этом решении не обрабатывается запрос If-Modified-Since, следовательно 304 заголовок не будет отдан и запрашивающая сторона не узнает о том, что страница не изменилась и запросит её в обычном порядке.
Вот моя версия решения проблемы. Работает для элементов инфоблоков и страниц, реализованных через файлы.
Код |
---|
if(!headers_sent()) { header("Content-type: text/html; charset=".LANG_CHARSET); /** * Last Modified **/ if(CModule::IncludeModule("iblock")) { $arFilter = Array("ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", 'CODE' => $_REQUEST['ELEM_CODE']); $res = CIBlockElement::GetList(Array(), $arFilter, false); while($ob = $res->GetNextElement()) { $arFields = $ob->GetFields(); } } $last_modified_time = (!empty($arFields)) ? strtotime($arFields['TIMESTAMP_X']) : filemtime(__FILE__); header("Cache-Control: public"); if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $last_modified_time) { header('HTTP/1.1 304 Not Modified'); exit(); } header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_modified_time).' GMT'); } |
Данный код можно поместить в \bitrix\modules\main\include\prolog_after.php, заменив им фрагмент:
Код |
---|
if(!headers_sent()) header("Content-type: text/html; charset=".LANG_CHARSET); |
В фильтре (массив $arFilter) необходимо указать вместо 'CODE' => $_REQUEST['ELEM_CODE'] условие, которое актуально для вашего ресурса.
Проверить результаты можно