Как создать карту сайта на PHP


Для того, чтобы ваш сайт правильно индексировался поисковыми системами, вам необходима карта сайта. Карта сайта обычно представлена в виде файла sitemap.xml, который содержит список ссылок на те страницы сайта, которые нужно добавить в поиск гугла и яндекса.

Формат файла sitemap.xml предполагает наличие полного адреса страницы (с http или https), дату изменения страницы, и важность страницы (приоритет индексации). Помимо этого, могут быть также дополнительные параметры, но они не особо важны для поисковых пауков.

Для различных CMS существуют плагины, которые автоматически создают файл sitemap.xml. Но если ваш сайт создан с нуля на PHP или использует самописный движок, то создание карты сайта - забота которая ложится на плечи веб-программиста. Давайте создадим скрипт на PHP который будет формировать красивую и современную карту сайта в валидном формате, с использованием xsl стилей.

Предположим что у нас имеется сайт-блог, в котором есть таблица базы данных под названием blog. Каждый элемент этой таблицы представляет собой запись в блог, и содержит такие поля как pageurl и pagedate. В вашем конкретном случае название и количество таблиц, и полей БД может быть другим, но общий принцип создания карты сайта такой же.

Наш скрипт должен срабатывать в следующих случаях

  • Когда пользователь добавляет новую запись в блог
  • Когда пользователь удаляет запись из блога
  • Когда пользователь редактирует запись (при этом в изменяемой записи БД должно меняться поле pagedate)

Проще всего создать отдельный скрипт, обновляющий файл sitemap.xml и заинклудить его в соответствующие части кода, отвечающие за вышеуказанные действия пользователя.

Нам понадобится файл стилей sitemap.xsl и собственно сам скрипт smap.php который нужно подключить инклудом в места кода где добавляются, удаляются, или изменяются страницы сайта.

Ниже я приведу листинг файла smap.php

<?php
$siteurl  = mysqli_connect('localhost', 'dblogin', 'dbpassword', 'dbname');
$sitemap   ><?xml-stylesheet  href="sitemap.xsl"?><urlset >';
$r = mysqli_query($link, 'SET NAMES utf8');
if ($result = mysqli_query($link, 'SELECT * FROM blog')) {
    $sitemap .= '<url><loc>' . $siteurl . '</loc><changefreq>daily</changefreq><priority>1.0</priority><lastmod>' . date("Y-m-d") . '</lastmod></url>';
    while ($row = mysqli_fetch_assoc($result)) {
        $sitemap .= '<url><loc>' . $siteurl . '/' . $row['pageurl'] . '/</loc><lastmod>' . $row['pagedate'] . '</lastmod><priority>0.9</priority></url>';
    };
    mysqli_free_result($result);
}
mysqli_close($link);
$sitemap .= "</urlset>";
$file = "sitemap.xml";
$fp = fopen($file, "w");
fwrite($fp, $sitemap);
fclose($fp);
?>

Как видим, в начале скрипт формирует ссылку на главную страницу сайта, а потом в цикле проходит по таблице blog из базы данных, и добавляет в sitemap.xml записи соответствующие записям в блоге.

Если у вас несколько статичных разделов - вроде страниц "О компании", "Контакты" и других, их нужно также добавить в sitemap.xml до того как начнут перебираться в цикле страницы таблиц базы данных. Если на сайте несколько таблиц, а не одна как в случае с нашим гипотетическим блогом, то в скрипт нужно добавить соответствующие количество циклов проходов по этим таблицам.

В итоге у нас формируется валидный и красивый sitemap.xml с подключенным файлом стилей sitemap.xsl. Выглядит всё это примерно так:

Все исходники вы можете скачать здесь

Материал подготовлен автором @pythono


Comments 2


@vik 100%

29.01.2018 17:52
0