Решил наконец сделать сие чудо в Fapos CMS. Скрипт уже готов. Но есть несколько вопросов, над которыми я бьюсь и не могу придумать как лучше. Скрипт работает через HTTP, что бы в карту попадало только то что может увидеть поисковый робот. По этому скан сайта происходит со скоростью примерно 100страниц в минуту. На больших сайтах это может затянуться на долго. В виду этого, надо придумать способ запуска этого скрипта.
Я думал может через какие-то интервалы делать ссылку на не сущуствующее изображение. Таким образом мы будем запускать отдельный поток, не влияющий на страницу где в данный момент находится пользователь. И вот, даже не картинку грузить, а просто аяксом делать ГЕТ запрос. То есть будет так:
Пользователь загружает страницу
Идет проверка, пора ли обновлять карту
Если надо, делается ГЕТ запрос
Пользователь ничего этого не видит конечно
После того, как запрос послан, пользователь может хоть закрывать браузер - пофиг. Так как в скрипте будет стоять ignor_user_abort();
К стати, для работы этого скрипта нужны такие функции как set_time_limit() и ignor_user_abort(). На дешевых хостингах и уж тем более шаровых это использовать нельзя.
А зачем сканить сайт? У нас под рукой ВСЕ базы данных, в которых отмечено что и когда обновлялось. Sitemap элементарно можно генерировать путем выборки из БД.
А зачем сканить сайт? У нас под рукой ВСЕ базы данных, в которых отмечено что и когда обновлялось. Sitemap элементарно можно генерировать путем выборки из БД.
тогда при внесении изменений в структуру БД, надо править скрипт карты сайта. + плюс надо сканить права что бы знать куда поисковый робот сможет попасть а куде нет. А так очень просто. Скрипт живет отдельной жизнью. Меняешь что хочешь, ставь любые права, а он все равно отсканит все что найдет и только то что может увидеть поисковый робот.
Добавлено2011.06.16 16-36
бля... Все больше склоняюсь к варианту о котором заговорил Wasja. Он хоть и прибавляет проблем, но в тоже время и избавляет от многих.
тогда при внесении изменений в структуру БД, надо править скрипт карты сайта.
Да ладно, объявляешь во всех модулях функцию, возвращающую список материалов, а в скрипте опрашиваешь все модули - в зависимости от их назначения либо возвращают данные (форум, новости, стратьи и т.п.), либо нет (поиск, чат и т.п.). Изменил таблицу в БД для форума - подправил функцию в модуле и все продолжает работать.
Drunya пишет:
Все больше склоняюсь к варианту о котором заговорил Wasja.
А то ж.
Добавлено2011.06.16 17-46
А обновление вообще проводится тогда элементарно - делается модуль "sitemap", при его вызове проверяется дата последнего кеширования, если данные устарели - делается выборка из БД по всем модулям, результат отдается роботу.
А обновление вообще проводится тогда элементарно - делается модуль "sitemap", при его вызове проверяется дата последнего кеширования, если данные устарели - делается выборка из БД по всем модулям, результат отдается роботу.
то есть если данные устарели, робот ждет пока они обновятся? Не хорошо заставлять ждать многоуважаемого робота)
Wasja пишет:
Да ладно, объявляешь во всех модулях функцию, возвращающую список материалов, а в скрипте опрашиваешь все модули - в зависимости от их назначения либо возвращают данные (форум, новости, стратьи и т.п.), либо нет (поиск, чат и т.п.). Изменил таблицу в БД для форума - подправил функцию в модуле и все продолжает работать.
Ну так а какая разница? Обновлять функции в модулях или в классе который генерирует карту сайта? В общем, ладно. Вся работа идет через один суперкласс(почему супер? Мне он очень нравится), так что если что то я могу в нем уже разруливать к какой таблице идет обращение. К тому же я больше волновался не за то что я изменю названия таблиц, а за то что я изменю типы или названия полей. Вот тогда то и начнутся траблы. Но дело в том, что тогда мне придется столько менять, что пара лишних изменений в скрипте генератора карты мне погоду не сделают.
то есть если данные устарели, робот ждет пока они обновятся?
никакой бот не будет ждать карту сайта... карта нужна только в помощи индексации.
вообще по поводу карты сайта было бы неплохо:
в админке назначать какие модули, категории, разделы, форумы, подворумы попадают в карту сайта, а какие вообще закрыты от индексации.
при добавлении материалов можно внести галочку - закрыть от индексации, соответственно в карту сайта так же не попадет.
по идее в карту должен тогда попадать любой вновь созданный материал, либо тот который изменили. думаю не очень сложно что то там дергать для этого.
Еще видел в некоторых картах сайта настройку по приоритету индексации, но не очень понял как это реализовано.
ну как то вот так...
Все мое имхо...
------
Не флуди и не да зафлудим будешь!
то есть если данные устарели, робот ждет пока они обновятся? Не хорошо заставлять ждать многоуважаемого робота)
Я говорил про выборку из БД, а не про метод сканирования.
Ater пишет:
никакой бот не будет ждать карту сайта... карта нужна только в помощи индексации.
А что, sitemap люди просматривают? Везде боты ползают.
Ater пишет:
в админке назначать какие модули, категории, разделы, форумы, подворумы попадают в карту сайта, а какие вообще закрыты от индексации.
Если материал отсуствует в сайтмепе - это не гарантия того, что он не будет проиндексирован. Только прямой запрет в robots.txt (и то по слухам некоторые поисковики его игнорят).
Ater пишет:
при добавлении материалов можно внести галочку - закрыть от индексации, соответственно в карту сайта так же не попадет.
Первая ссылка на эту страницу в любом месте интернета - и он в индексе. Да и вообще идея с галочкой перебор.
Ater пишет:
по идее в карту должен тогда попадать любой вновь созданный материал, либо тот который изменили. думаю не очень сложно что то там дергать для этого.
В карте должны лежать все доступные материалы, дополненные информацией о времени их обновления.
прочитав все выше сказанное получается:
карту проще всего фигарить по базе, в карту должен попадать весь материал кроме того что закрыт от пользователей (галочка доступен для просмотра)
а все остальное шелуха... и сканить по HTTP не стоит...
Все мое имхо...
------
Не флуди и не да зафлудим будешь!