Файл Sitemap — это файл с данными о всех страницах сайта. С помощью файла Sitemap вы сообщаете поисковикам (google, yandex), какие страницы вашего сайта нужно добавить в индекс, как часто обновляется информация на страницах, а также каких страниц наиболее важны для индексации.
Частота обновления информации на страницах задается тегом: changefreq
              Важность страниц задается тегом: priority
Ниже приведен PHP скрипт генерации xml sitemap для google и яндекса:
              
—————————————————
<?php
    //адрес вашего сайта
    $ServerUrl = 'http://site.ru';
    // создаем новый xml документ
    $dom = new DOMDocument('1.0', 'UTF-8');
    $dom->formatOutput = true;
    // массив страницы для sitemap
    $pages = array(
        array(
            'url' => '/',
            'changefreq' => 'daily',
            'priority' => '1.00',
        ),
        array(
            'url' => '/sitemap',
            'changefreq' => 'daily',
            'priority' => '0.90',
        ),
    );
    //Получаем все статьи из БД
    // и добавляем их в массив
    $arts = getAllAtrs();
    foreach($arts as $art) {
        $pages[] = array(
            'url' => '/category/'.$art['id'],
            'changefreq' => 'daily',
            'priority' => '0.80',
        );
    }
    //вывод на экран количества страниц в sitemap
    var_dump(sizeof($pages));
$SITEMAP_NS = 'http://www.sitemaps.org/schemas/sitemap/0.9';
$SITEMAP_NS_XSD = 'http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd';
// ...and urlset (root) element
$urlSet = $dom->createElementNS($SITEMAP_NS, 'urlset');
$dom->appendChild($urlSet);
$urlSet->setAttributeNS('http://www.w3.org/2000/xmlns/' ,
    'xmlns:xsi', 
    'http://www.w3.org/2001/XMLSchema-instance');
$urlSet->setAttributeNS('http://www.w3.org/2001/XMLSchema-instance', 
    'schemaLocation', 
    $SITEMAP_NS . ' ' . $SITEMAP_NS_XSD);
foreach($pages as $page) {
    $url = $ServerUrl . $page['url'];
    // create url node for this page
    $urlNode = $dom->createElementNS($SITEMAP_NS, 'url');
    $urlSet->appendChild($urlNode);
    // put url in 'loc' element
    $urlNode->appendChild($dom->createElementNS(
        $SITEMAP_NS,
        'loc', $url));
    $urlNode->appendChild(
        $dom->createElementNS(
            $SITEMAP_NS, 
            'changefreq',
            $page['changefreq'])
    );
    $urlNode->appendChild(
        $dom->createElementNS(
            $SITEMAP_NS, 
            'priority',
            $page['priority'])
    );
}
$xml = $dom->saveXML();
//сохраняем файл sitemap.xml на диск
file_put_contents('/sitemap.xml' , $xml);
?>
              —————————————————
              
              Функцию  getAllAtrs() вам нужно заменить на свою. В моем примере данная функция получаем все материалы из БД.
не работаит! Fatal error: Call to undefined function getallatrs() in Z:\home\test1.ru\www\index.php on line 23
Alex, в коде есть строчка $arts = getAllAtrs();
вам нужно функцию getAllAtrs() заменить на вашу функцию (или запрос) получения всех статей из базы данных.
извени!я новичок в этом деле!!!!на какую функцию заменить?у меня бд в mysql денвера!бд называеться primer что написать то надо
Владимир, все зависит от используемой CMS, так сразу не скажешь.
Количество записей на экран выводит правильно, а xml файл не создает 🙁
Артем, проверьте доступен ли к записи файл /sitemap.xml . Или смените путь к файлу file_put_contents(‘/sitemap.xml’ , $xml);
Огромное спасибо автору!
А если cms на фойлах как kandidat то как быть
Stas, в любом случае вам нужно использовать свою функцию getAllAtrs(), которая и будет получать данные из файлов, из БД, или из любого другого места.
перелопатил +100500 статей. Эта единственная которая мне помогла, спасибо. Это решение без напряга приципил к redbeanphp и править ничего не надо ))))