Делаем Sitemap в CodeIgniter



Древние карты так загадочныВ каких случаях может быть нужен sitemap

Ситуация 1: Поисковая система не индексирует некоторые страницы, например из-за того что до них слишком много переходов.

Ситуация 2: Поисковая система находит ключевую фразу сразу на нескольких страницах(например, в статье и её анонсе на главной), какую из этих страниц выдавать ближе к началу? Как задать приоритет?

Именно эти две задачи я думаю решить созданием сайтмапа/

Итак, прога написана, сайтмап построен, код ниже. Написано для CodeIgniter, но думаю принцип везде похож.

Первым делом делаем контроллер. Сразу предупреждаю – нужно немного изменить код под свою специфику.

  1. Нужно указать свою таблицу, по которой ищется контент
  2. Нужно указать свой контроллер/функцию да и вообще своё правило формирования URL, а также вытаскивать свою дату(необязательно)
  3. Да и вообще это всего лишь пример для ленивых – тут практически всё легко меняется напильником :)
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
<?php
class Sitemap extends Controller {
    function Sitemap(){
        parent::Controller();
    }
    function index(){
        header("Content-Type: text/xml;charset=utf8");
        echo '<?xml version="1.0" encoding="UTF-8"?>
        <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
 
        $query = $this->db->get('XXXXX');
        foreach ($query->result() as $row){
 
            echo  "
                <url>
                <loc>http://XXXXXX.ru/XXX/XXXX/".$row->id."</loc>
                <lastmod>".$row->date."</lastmod>
                <changefreq>monthly</changefreq>
                <priority>0.8</priority>
                </url>
                ";
        }
        echo "</urlset>";
    }
}
?>

Структуру и смысл выдаваемой страницы можно смотреть здесь

После составления скрипта стоит проверить работоспособность контроллера зайдя на адрес http://ВАШСАЙТ/sitemap. Пример можно посмотреть здесь.

Теперь для полного счастья нужно, сделать переадресацию с sitemap.xml. Это можно сделать в .htaccess.

1
RewriteRule (.*)\.xml(.*) sitemap [nocase]

Пока так =)

Посты по теме:

  1. CMS-визитка на CodeIgniter
  2. AJAX на CodeIgniter
  3. Скелет для приложения в CodeIgniter
  4. ALCAPTCHA = Капча + AJAX + CodeIgniter
  5. Проблемы сессии в CodeIgniter

Категории CodeIgniter |
автор: altesack / Воскресенье, Сентябрь 06, 2009 / 6 комментов »

6 комментов

    А вот смотрите если на сайте 100 000 страниц? Обычный сайт с объявлениями. Когда робот гугла обратится к сайтмепу, он дождется пока ему скрипт весь сайтмеп отдаст? Всегда думал об этой проблеме. Как считаете?

    Я как-то попробовал сделать сайтмап на 115 тыс страниц, получился внушительный документ, который генерировался довольно долго, а потом ещё и выяснилось, что поисковики отказываются использовать такие сайтмапы

    Вообще, я в тексте дал ссылку на стандарт для sitemap. По стандарту в одном сайтмапе должно быть не больше 50 тыс ссылок. Для большого сайта разумно сделать несколько таких сайтмапов, ссылки на которые указать в главном сайтмапе.

    Подробнее тут: http://www.sitemaps.org/ru/protocol.php

    Я новичок в этом деле не поможеш плиззз!!!!
    $query = $this->db->get(’XXXXX’);- в этой строчки я исправил на свою таблицу!
    путь к сайту прописал!
    выдаёт ошибку при запуске
    Class ‘Controller’ not found??????я знаю что класс не найден!а вот как это исправить????????????????

    @ владимир:
    В вашем случае просто бывает полезно пару раз прочитать манул. И если хотите создать контроллер Controller, то эта инфа будет полезной – http://www.whitepiano.ru/user_guide/general/reserved_names.html . Сначала читайте, пробуйте разобраться сами, а потом спрашивайте…и не будет глупых вопросов=) не в обиду будет сказанно…

    Спасибо, все сделали, все работает…но, в сайтмапе не допустимы кириллические символы. Случайно нет соображений, как реализовать перекодинг русскоязычных урлов в utf8??

    urlencode?