Добавляем Last-Modified и Expires на все страницы сайта, проверку делаем здесь https://last-modified.com/.
Актуальность: Использование Last-Modified и Expires ускоряет загрузку сайта, оптимизирует время на индексацию страниц поисковиками и, в результате, позитивно сказывается на его SEO-позициях. Last-Modified - передает дату изменения страницы, бот не будет повторно индексировать страницу, если изменений не было.
В товаре можно привязаться к дате изменения элемента, если дата изменения более 30 дней, то переопределяем ее для заголовков. Заводим глобальную переменную $lastModified, чтобы знать, что заголовки у страницы установлены.
Для этого в компоненте каталога, в файле element.php ставим код:
$arSelect = Array("IBLOCK_ID", "ID", "TIMESTAMP_X");
$arFilter = Array("IBLOCK_ID"=>$arParams["IBLOCK_ID"], "ID"=>$arResult['VARIABLES']['ELEMENT_ID'], "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
if ($res->SelectedRowsCount()==1)
{
$arItem=$res->GetNext();
$days = ceil((time()-strtotime($arItem["TIMESTAMP_X"]))/86400);
if($days > 30){
$date = new DateTime('-20 days');
$dateExpires = new DateTime('30 days');
$lastModifiedTimestamp = strtotime($date->format('Y-m-d').' 12:00:00 GMT');
$lastModifiedTimestampExpires = strtotime($dateExpires->format('Y-m-d').' 12:00:00 GMT');
header('Expires: ' . gmdate('D, d M Y H:i:s', $lastModifiedTimestampExpires) . ' GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastModifiedTimestamp) . ' GMT');
}
else{
$date = new DateTime('-15 days');
$dateExpires = new DateTime('30 days');
$lastModifiedTimestamp = strtotime($date->format('Y-m-d').' 12:00:00 GMT');
$lastModifiedTimestampExpires = strtotime($dateExpires->format('Y-m-d').' 12:00:00 GMT');
header('Expires: ' . gmdate('D, d M Y H:i:s', $lastModifiedTimestampExpires) . ' GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastModifiedTimestamp) . ' GMT');
}
GLOBAL $lastModified;
$lastModified = $lastModifiedTimestamp;
global $setExpiresFlag;
$setExpiresFlag == 1;
}
Для остальных страниц в footer.php шаблона добавляем код:
global $setExpiresFlag;
if($setExpiresFlag != 1){
if($APPLICATION->GetCurDir() == "/"){
$date = new DateTime('-3 days');
$dateExpires = new DateTime('3 days');
}
else{
$date = new DateTime('-7 days');
$dateExpires = new DateTime('7 days');
}
$lastModifiedTimestamp = strtotime($date->format('Y-m-d').' 12:00:00 GMT');
$lastModifiedTimestampExpires = strtotime($dateExpires->format('Y-m-d').' 12:00:00 GMT');
GLOBAL $lastModified;
$lastModified = $lastModifiedTimestamp;
header('Expires: ' . gmdate('D, d M Y H:i:s', $lastModifiedTimestampExpires) . ' GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastModifiedTimestamp) . ' GMT');
}
В init ставим проверку Last-Modified:
/*Проверка If-Modified-Since и вывод 304 Not Modified */
AddEventHandler('main', 'OnEpilog', array('CBDPEpilogHooks', 'CheckIfModifiedSince'));
class CBDPEpilogHooks
{
function CheckIfModifiedSince()
{
GLOBAL $lastModified;
if ($lastModified)
{
header("Cache-Control: public");
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastModified) . ' GMT');
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $lastModified) {
$GLOBALS['APPLICATION']->RestartBuffer();CHTTP::SetStatus('304 Not Modified');
exit();
/*header('HTTP/1.1 304 Not Modified');
exit;*/
}
}
}
}
Теги: Last-Modified, ExpiresТеги: Last-Modified, Expires
11.11.2024