- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Имеется сайт на хостинге, который отдает поисковикам только объем shtml-документа (проверено Google и Яндексом). Дату их изменения - не фиксирует.
Можно ли как-то настроить Апач, чтобы было все ОК?
Спрашиваю это потому, что на другом хостинге - все по дефолту работает, например для phtml страниц с параметрами.
Еще вариант - может быть сгенерировать правильный header средствами SSI, но как?
Или остается только встраивать в шаблон PHP-код типа такого:
Это недостаток Вашего хостинга.
Пусть админы XBitHack настраивают в Апаче.
может я чего то не понимаю, но, как Апач может отдавать правильный Last-Modified для index.php?page=today_page если index.php редактировался скажем месяц назад? Откуда Апачу знать, что данные полученные из базы данных страницей добавлены(или редактировались) сегодня?
Если апач это действительно может, то хотелось бы знать как, сделал бы на своем сайте.
Пользуйтесь хидерами на PHP и будет Вам счастье:)
Есть несколько способов. Лучше всего сделать буферизацию вывода, и (когда контент сгенерен) пройтись по списку get_included_files(), найти из всех подключеных файлов того, который изменен последним и выдавать дату его модификации. В случае, если данные берется из БД, нужно иметь дату последнего обновления для каждой строчки.
Второй способ (по-моему, лучше): тоже буферизовать вывод и иметь для каждого URLа, например, MD5 хэш с датой последнего изменения. При каждом запросе сверять хэш, если не изменился - выдавать дату которая есть. Если изменился - сохранять новый и отдавть time().
Это кстати некоторый софт автоматом умеет делать. Но к сожалению метод в реальности мало полезен - очень часто на динамических страницах встречаются динамические же участки - несколько байт поменяются - и хана.
может я чего то не понимаю, но, как Апач может отдавать правильный Last-Modified для index.php?page=today_page если index.php редактировался скажем месяц назад? Откуда Апачу знать, что данные полученные из базы данных страницей добавлены(или редактировались) сегодня?
Если апач это действительно может, то хотелось бы знать как, сделал бы на своем сайте.
Сам удивлен, но факт. Цитирую Яндекс:
Страницы динамические, контент выводится из текстовой базы.
На других сайтах этого хостинга - аналогичная ситуация.
Надо распросить хостеров, как они этого добились.
Ответ хостера:
Сам удивлен, но факт. Цитирую Яндекс:
Страницы динамические, контент выводится из текстовой базы.
На других сайтах этого хостинга - аналогичная ситуация.
Надо распросить хостеров, как они этого добились.
Ответ хостера:
Apache может сам давать дату LastModified, но берёт он её из даты файла). Поэтомы это грамотно работает для СТАТИЧЕСКИХ страниц.
Такое в принципе можно настроить и для ДИНАМИЧЕСКИХ страниц (SSI, CGI, PHP), но бессмысленно брать дату изменения файла - контент, отдаваемый пользователю, фактически создается в момент обращения к странице, поэтому дата модификации непосредственно самого файла скрипта или SSI-страницы теряет практический смысл.
Для SSI-документов:
Для "server-parsed" документов веб-cервер Apache будет выдавать "Last-Modified" в том случае, если указана директива "XBitHack full" (например, в файле .htaccess), и для файла, к которому происходит обращение, выставлен атрибут "исполняемый" для группы (команда Unix-shell "chmod g+x имя_файла").
Для скриптов на языке PHP:
Различные HTTP-заголовки нужно задавать с помощью функции header(), которая должны вызываться до вывода каких-либо данных скриптом:
<?php
$lastmodified = mktime(15, 26, 11, 1, 12, 2006);// hour, minute, second, month, day, year
header("Last-Modified: " . $lastmodified." GMT");
?>
Можно так же отдать CharSet:
header("Content-Type: text/html; charset=windows-1251");
Для скриптов на языке Perl:
#!/usr/local/bin/perl
use POSIX qw(strftime);
my $LM = strftime "%a, %e %b %Y %H:%M:%S GMT", gmtime(time());
print "Last-Modified: $LM ";
А над Apache-ем издеваться смысла нет - весь хостинг будет искорёжен.
Проще делать программно, раз у Вас динамические страницы - или "грамотно" определять все изменения дат файлов и баз данных, как предложили выше, или "тупо" отслеживать и менять "ручками" (Уж выдавать дату изменения самого файла - пара строк на php, Яндекс "кушает", как миленький :), Google, думаю, тоже - откуда ему знать, кто ему Хеадеры шлёт).
А если Ваш хостер будет слать LastModified динамических страниц за Вас, от него надо "сваливать" - контент поменяется, а Яндекс будет думать, что он остался старый. Надо иметь рычаги воздействия на поисковики в своих руках ;)
спасибо за ценную информацию.
Сделаю выводы для себя.
Кстати, обнаружен сервис Узнайте, что возвращает веб-сервер в заголовке ответа
Кстати, обнаружен сервис Узнайте, что возвращает веб-сервер в заголовке ответа
Удобная штучка, спасибо. Еще бы она показывала Редиректы по дороге к страничке - было бы интереснее...
Кстати, обнаружил, что CharSet по "header("Content-Type: text/html; charset=windows-1251");" страница на PHP не отдаёт, его отдаёт сам Apache - значит это надо .htaccess править, не прав я был в своём предыдущем посте.😮
А строки типа:
<?php
$lastmodified = mktime(15, 26, 11, 1, 12, 2006);// hour, minute, second, month, day, year
header("Last-Modified: " . gmdate("D, d M Y H:i:s", $lastmodified) . " GMT");
?>
надо писать в самом начале выдачи страницы, еще до
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
иначе Last-Modified не отдаётся.
Да, я бегло по док-ции пробежался, наваял на скорую руку такой код:
last_modified.php
test.shtml
Вылезают следующие проблемы:
1. Пока не разобрался, как генерить не местное время, как сейчас у меня вычесляется дата, а по Гринвичу, т.е. в таком виде: Wed, 01 Feb 2006 10:30:26 GMT.
2. Когда залил файлы на сервер хостера - оказалось, что у них PHP (посмотрел по phpinfo()) не знает переменной $REDIRECT_SCRIPT_NAME, аналога которой не нашел. А весь сок скрипта в том, чтобы вставить его в шаблон один раз, а он определял бы дату последней модификации файлов страниц автоматически.
3. Самое главное - если смотреть, что выдает в заголовке test.shtml, то оказывается, что Last modified там почему-то нет! А если вызывать last_modified.php, то показывает! Как быть? Не могу я несколько сотен файлов из SHTML в PHP перегонять, страницы хорошо проиндексированы.
Беда, прям.