Связаться
+79263772075
info@el-komp.ru

Blog

Last-Modified в WordPress

Что такое Last-Modified

Last-Modified — это часть из ответных https-заголовков, посылаемых сервером в ответ на запрос браузера.
Совсем не секрет, что присутствие этого заголовка в ответе сервера положительно сказывается на работе с сайтом: отсутствие лишнего трафика (ответы сервера кешируются браузером, и если при очередном запросе ответ не изменился, то трафик не передаётся), да и просто экономия ресурсов и повышение скорости работы с сайтом.
Ещё, например, для поисковых систем невозможно понять, изменилось ли содержание страницы, если она не отдаёт Last-Modified, и потому приходится выкачивать страницу заново и сверять с предыдущей версией. Согласитесь, что это неэкономно.
Подробнее про кеширование тут, а пока вернёмся к Last-Modified в WordPress.

Как добавить и настроить Last-Modified в WordPress

Установка кеширующего плагина

Я рекомендую попробовать настроить WP Super Cache. После прохождения по вышеуказанной инструкции, заголовки Last-Modified будут прописываться самим сервером.

При настройке NGINX обязательно отключите ssi

Учтите, заголовок Last-Modified, в данном случае, будет показывать не дату последнего изменения записи, а дату создания кешированной копии страницы, которая, в свою очередь, зависит от того, как вы настроили обновление кеша. Что, в принципе, является вполне нормальным: поисковые системы, для определения даты последнего изменения документа, смотрят, в первую очередь, в разметку, а браузеру подойдёт и дата обновления кеша.

Last-Modified в WordPress

Что такое Last-Modified

Last-Modified — это часть из ответных https-заголовков, посылаемых сервером в ответ на запрос браузера.
Совсем не секрет, что присутствие этого заголовка в ответе сервера положительно сказывается на работе с сайтом: отсутствие лишнего трафика (ответы сервера кешируются браузером, и если при очередном запросе ответ не изменился, то трафик не передаётся), да и просто экономия ресурсов и повышение скорости работы с сайтом.
Ещё, например, для поисковых систем невозможно понять, изменилось ли содержание страницы, если она не отдаёт Last-Modified, и потому приходится выкачивать страницу заново и сверять с предыдущей версией. Согласитесь, что это неэкономно.
Подробнее про кеширование тут, а пока вернёмся к Last-Modified в WordPress.

Как добавить и настроить Last-Modified в WordPress

Чтобы добавить Last-Modified в Вордпресс, существует несколько вариантов. Рассмотрим их ближе.

Установка кеширующего плагина

Я рекомендую попробовать настроить WP Super Cache. После прохождения по вышеуказанной инструкции, заголовки Last-Modified будут прописываться самим сервером.

При настройке NGINX обязательно отключите ssi

Учтите, заголовок Last-Modified, в данном случае, будет показывать не дату последнего изменения записи, а дату создания кешированной копии страницы, которая, в свою очередь, зависит от того, как вы настроили обновление кеша. Что, в принципе, является вполне нормальным: поисковые системы, для определения даты последнего изменения документа, смотрят, в первую очередь, в разметку, а браузеру подойдёт и дата обновления кеша.

Правим headers.php

У вас в директории с темой WordPress (/wp-content/themes/имятемы/), скорее всего, есть отдельный файл шаблона header.php.
Открываем его и в самой первой строке перед всем кодом записываем

1
<?php header("Last-Modified: " . get_the_modified_date('r'))?>

Учтите, этот вариант, возможно, не будет работать так, как вы ожидаете, при наличии установленного и настроенного кеширующего плагина.

Проверить отдаваемые заголовки можно с помощью плагина к Firefox Live https Headers или одного из многочисленных онлайн-сервисов (например, этого).

Итак, проверяем заголовки. Если всё сработало, вы должны увидеть в ответе что-то навроде:

1
Last-Modified: Mon, 15 Jul 2013 14:03:55 +0000

Если файла шаблона header.php нет, то попробуйте следующий вариант.

Установка плагина Last-Modified

Как и в предыдущем пункте, этот вариант будет работать только при отсутствии кеширующего плагина на сайте, например, WP Super Cache. Однако, я настоятельно рекомендую использовать последний, так как страничный кеш никогда не помешает любому хорошему проекту.

Если не доверяете плагину, можете просто взять код ниже и записать его в functions.php или, что лучше, сделать на его основе MU plugin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
/**
 * Установка https заголовка Last-Modified
 * При активации плагина, у всех незапароленных постов в https-заголовках появится Last-Modified
 */
add_action( 'template_redirect', 'Sheensay_https_Headers_Last_Modified' );
function Sheensay_https_Headers_Last_Modified() {
    if ( ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) || ( is_admin() ) ) {
        return;
    }
    $last_modified = '';
    // Для страниц и записей
    if ( is_singular() ) {
        global $post;
        // Если пост запаролен - пропускаем его
        if ( post_password_required( $post ) )
            return;
        if ( !isset( $post -> post_modified_gmt ) ) {
            return;
        }
        $post_time = strtotime( $post -> post_modified_gmt );
        $modified_time = $post_time;
        // Если есть комментарий, обновляем дату
        if ( ( int ) $post -> comment_count > 0 ) {
            $comments = get_comments( array(
                'post_id' => $post -> ID,
                'number' => '1',
                'status' => 'approve',
                'orderby' => 'comment_date_gmt',
                    ) );
            if ( !empty( $comments ) && isset( $comments[0] ) ) {
                $comment_time = strtotime( $comments[0] -> comment_date_gmt );
                if ( $comment_time > $post_time ) {
                    $modified_time = $comment_time;
                }
            }
        }
        $last_modified = str_replace( '+0000', 'GMT', gmdate( 'r', $modified_time ) );
    }
    // Cтраницы архивов: рубрики, метки, даты и тому подобное
    if ( is_archive() || is_home() ) {
        global $posts;
        if ( empty( $posts ) ) {
            return;
        }
        $post = $posts[0];
        if ( !isset( $post -> post_modified_gmt ) ) {
            return;
        }
        $post_time = strtotime( $post -> post_modified_gmt );
        $modified_time = $post_time;
        $last_modified = str_replace( '+0000', 'GMT', gmdate( 'r', $modified_time ) );
    }
    // Если заголовки уже отправлены - ничего не делаем
    if ( headers_sent() ) {
        return;
    }
    if ( !empty( $last_modified ) ) {
        header( 'Last-Modified: ' . $last_modified );
        if ( !is_user_logged_in() ) {
            if ( isset( $_SERVER['https_IF_MODIFIED_SINCE'] ) && strtotime( $_SERVER['https_IF_MODIFIED_SINCE'] ) >= $modified_time ) {
                $protocol = (isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'https/1.1');
                header( $protocol . ' 304 Not Modified' );
            }
        }
    }
}

Теперь должно сработать.

Leave a comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

десять + три =

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Top Яндекс.Метрика