Коллеги, ещё раз спасибо вам за ответы. Теперь всё предельно понятно, заголовок "Content-Length" не нужен (т.е. можно его вообще опустить и не показывать). Также, если заголовок "Last-Modified" нормально отрабатывает, значит вышеуказанный код РНР правильный. Спасибо за ваши ответы!
Но у меня возник ещё один вопрос к уважаемой аудитории сёрча.
Как насчёт кеширования страниц сайта? Стоит ли мне добавлять серию заголовков для управления кешем браузеров и поисковых роботов? Как, например, такие классические заголовки:
"Cache-Control: max-age=1028000" (кешировать на столько-то времени), либо
"Cache-Control: no-store, no-cache, max-age=0" (полный запрет кеширования)
Какая у кого из вас практика - стоит ли дополнительно управлять кешированием (и как это влияет или может повлиять на поисковые роботы Гугла и Яндекса)? Стоит ли мне заморачиваться этим вопросом, или же не стоит? Иными словами, каким образом заголовки по управлению кешированием влияют на поисковую оптимизацию сайта?
Или же не заморачиваться этим вопросом, как в случае с заголовком "Content-Length", рассмотренным выше?...
nyc22, коллега, в том-то и дело, что ранее у меня на сайте контент отдавался всегда, вне зависимости от того, были ли изменения со времени последнего посещения бота или не были. Иными словами, механизм If-Modified-Since у меня не работал вообще.
Теперь же, с помощью вышеуказанного кода РНР, я сделал так: если вместе с запросом от бота (или от браузера) приходит заголовок If-Modified-Since, в таком случае РНР не отдаёт контент боту вообще, а просто пишет ответ "304 Not Modified", то есть контент не изменялся. Вот такой сейчас у меня ответ от сервера в случае, если контент не менялся с такого-то периода времени:
HTTP/1.1 304 Not Modified
Server: nginx
Date: Sun, 29 Oct 2017 06:21:45 GMT
Connection: keep-alive
И всё, далее никакого контента нет, поскольку сработал механизм If-Modified-Since. Весь вопрос в том, правильны и корретный ли вышеуказанный код РНР, который собственно и отрабатывает этот момент. Не будет ли проблем в будущем с Гуглом из-за этого кода, нет ли там скрытых для неопытного глаза ошибок, или косяков. Потому-то я и задал этот вопрос уважаемым форумчанам.
Коллеги, спасибо большое за ваши ответы.
Позвольте ещё задать один вопрос, поскольку переживаю по поводу поисковых алгоритмов Гугла и Яндекса. Как выше вы могли видеть, последней строчкой ответа сервера у меня указан заголовок "Last-Modified". Этот заголовок добавил я вручную, разместив соответствующий РНР-код в самом начале каждой страницы моего сайта. Естественно, я не сам писал этот код, поскольку (к сожалению) только начал изучать язык РНР. Этот кусок кода я позаимствовал вот из этого ресурса:
https://last-modified.com/ru/last-modified-if-modified-since-php.html
Соответственно, вот и сам РНР-код, который находится у меня в самом начале каждой .php страницы сайта:
<?php$LastModified_unix = 1294844676; // время последнего изменения страницы$LastModified = gmdate("D, d M Y H:i:s \G\M\T", $LastModified_unix);$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 >= $LastModified_unix) { header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified'); exit;}header('Last-Modified: '. $LastModified);?>
Вопрос: как вы считаете, можно ли доверять указанному выше ресурсу (last-modified.com) и использовать данный РНР-код на своём сайте? Корректен ли этот код и не будет ли на него ругаться поисковик? Нет ли в нём каких-либо скрытых косяков и проблем (в частности, для поисковых роботов Гугла и Яндекса)? Прошу вас откликнуться.
К слову сказать, вот как дословно описывается работа данного скрипта на самом сайте last-modified.com
Ещё раз благодарен за ваше внимание к данному вопросу. Это последний вопрос, который меня сильно тревожит, ввиду нехватки моих знаний в РНР-программировании. Спасибо вам заранее!
SeVlad
Да, видимо, нужно было создать свой топик. Прошу прощения.
Просто начал читать эту ветку, в которой как раз рассматривали вопрос SSI (Server Side Includes), их применения, и так далее. Ну и задал вопрос, поскольку как раз в разрезе этих самых включений у меня и была проблема - не подсвечивалось меню на сайте. А так вы абсолютно правы, ещё раз прошу прощения, виноват.
miketomlin
Спасибо за ваш ответ и советы. Позвольте ещё раз для себя окончательно уточнить этот тонкий нюанс.
То есть, моё направление мыслей было правильным. Так как у меня страницы сайта разбиты на отдельные обычные файлы (что так и есть на самом деле), тогда я в самом начале каждой страницы создаю блок РНР-скрипта, и в нём прописываю (инициализирую) переменные для этой конкретной текущей страницы.
А уже потом в шаблоне (отдельном файле с меню, например "menu.php") я конструкцией IF / ELSE делаю проверки, и в зависимости от результата этих проверок (булев тип данных true / false) я добавляю в своё меню на сайте класс "active". Или же не добавляю. Где-то таким образом. Правильно я понимаю этот момент?
Коллега, спасибо большое, вашу мысль я понял.
Итак, после того как я сделаю адаптивный дизайн, соответственно, я разбиваю шаблон сайта на блоки, для удобства управления сайтом в отдалённом будущем (1000+ страниц), а именно: блоки header.php, footer.php, menu.php, и так далее. Если шапка и подвал сайта не меняются на всех 1000 страницах, то меню должно подсвечивать активный пункт, в котором сейчас находится посетитель сайта. Для решения этой задачи мне необходимо как-то идентифицировать из тысячи страниц сайта ту страницу, которая должна подсвечивать активный пункт меню. И, соответственно, конструкцией IF / ELSE выводить (в зависимости от указанного условия) активное меню именно на данную страницу сайта.
Мы приходим к тому, что главное - найти корректный способ получения ID активного документа (= страницы сайта).
Тут у меня пришло в голову следующее решение.
В самом начале каждой страницы сайта разместить РНР-код, в котором задать переменную и присвоить ей некоторое значение, к примеру что-то вроде такого:
<?php
$activeMenu = TRUE;
$passiveMenu = FALSE;
?>
И затем, используя условие, присваивать в том или ином случае активному пункту меню класс "active".
Я правильно мыслю, или же есть более корректный способ решить эту задачу?---------- Добавлено 11.10.2017 в 07:08 ----------
Коллега, адаптивный дизайн сайта у меня уже готов. Это уже пройденный этап. Кстати говоря, у меня все стили корректно вынесены в отдельный внешний файл styles.css, в самом шаблоне стилей нет, об этом я заранее позаботился. Плюс, адаптивный дизайн я сделал с помощью точек остановки, их у меня три, под разные разрешения мониторов (соответственно, с помощью медиа-запросов в стилях, как и положено).
Сейчас я нахожусь на этапе решения уже прикладных, технических вопросов управления сайтом. Именно потому я акцентирую внимание на РНР-инклудах. Вот решаю задачу подсвечивания активного пункта меню, и чтобы при этом само меню сайта было вынесено в отдельный файл "menu.php" и управлялось в будущем из одного места, а не править его на всех 1000+ страницах сайта.
Коллега, а можете чуть подробнее относительно домена.
Просто я купил свой домен вместе с хостингом, у хостинг-компании. Так сказать, два в одном. Грубо говоря, там можно сразу заказать и оплатить хостинг и регистрацию домена, потому, компания его регистрирует тут-же.
Когда покупал домен, хостер ничего не попросил у меня, ни фамилии, ни имени, ничего. Видимо, он оформил его у регистратора на своё имя (либо на имя своей компании), а уже затем передал его мне. Как мне поступить в таком случае? Связаться с хостинг-компанией, потребовать переоформить домен на моё имя, и как конкретно проверить, на кого оформлен в текущее время домен? Есть ли специальные сервисы, чтобы проверить и заодно сослаться на них в разговоре со службой поддержки моего хостинга? Что-то я обеспокоился последней вашей фразой, а то будешь развивать, развивать свой проект несколько лет... А потом раз - и хостер обанкротился, или ещё что случиться, и всё - ты теряешь сайт в поисковых системах. То есть, есть риск, что вся многолетняя работа над раскруткой и оптимизацией сайта пойдёт прахом!
Потому, прошу вас более развёрнуто прокомментировать свой предыдущий ответ. Буду очень ждать, заранее спасибо.
Вам абсолютно правильно показалось. Да, я хочу кодить, иначе зачем мне это всё нужно?... А вот по поводу бесплатных CMS и околонулевого бюджета - вы подняли мне настроение, спасибо. :)
Бюджет не просто околонулевой, он - нулевой полностью. Принципиально никому не буду ничего платить, кроме оплаты хостинга и домена сайта. Только прошу без обид, товарищи, и правильно понять мои слова. Это я не из-за жадности своей имею такую вот позицию, а из-за принципа, поскольку я бросил вызов самому себе. Разве зря я потратил уже столько сил, чтобы освоить на достаточно хорошем базовом уровне Фотошоп, HTML+CSS вёрстку, много информации перевернул по поводу SEO раскрутки сайта, его технического SEO-аудита, сейчас вот изучаю потихоньку вопросы серверов и их настройки, плюс начинаю углубляться в РНР и частично в JavaScript...
Все из нас когда-то делали свои первые шаги в профессии. Даже маленький ребёнок не с первого раза сделал свой первый шаг или произнёс своё первое в жизни слово. Именно потому, мне тоже предстоит набить свои шишки, пройти через свои тернии к звёздам. Где-то таким вот образом.
Спасибо. Удача мне пригодится.
PS. Тут мне всё намекали, намекали на тот момент, что я должен определиться со строением своей CMS. А в чем тут подвох, товарищи? А то я не совсем понял суть тонких намёков...
miketomlin, silicoid
Коллеги, спасибо вам за общение и за дружелюбие. Это на сегодняшний день дорого стоит! Спасибо.
Коллега, спасибо вам за интересные мысли по поводу того, что заголовки можно настраивать индивидуально для отдельных страниц либо групп страниц сайта. Я правильно понимаю: с помощью РНР-сценариев я могу буквально каждой странице настроить отдельные заголовки, как например:
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-cache, must-revalidate"); и так далее...
То есть, с помощью РНР-сценария в самом начале своей .php страницы (непосредственно до элемента <!doctype html>), я прописываю указанные команды и сервер отдает необходимые заголовки.