Добавляем XML-карту сайта в Эгею

sitemap.xml с автоматическим обновлением по расписанию

Добавляем карту сайта в Эгею

В этом посте я расскажу о том, как добавить возможность автоматической генерации валидной карты сайта твоего блога и записи её в файл — sitemap.xml

Создаём и правим файлы

Сперва тебе необходимо подключиться к FTP-серверу и получить доступ к файлам твоего сайта, а затем создать в корневой директории файл с названием sitemap_2BDrGDx.php и выставить на него права доступа 0755. Затем необходимо открыть этот файл в текстовом редакторе и добавить следующий код:

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

<?php
	$domain = 'https://okatiev.ru'; // URL-address
	$db_user = 'dbuser'; 			 // DB username
	$db_password = 'dbpass'; 			 // DB password
	$db_database = 'dbname'; 			 // DB name
	$db_host = 'localhost'; 		 // DB address
	
	$db = new mysqli($db_host, $db_user, $db_password, $db_database);
        if ($db->connect_errno) { die('Ошибка соединения: ' . $db->connect_error); }

	$xml = '<?xml version="1.0" encoding="UTF-8"?>';
	$xml .= "\n";
	$xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
	$xml .= "
	<url>
		<loc>$domain</loc>
		<changefreq>daily</changefreq>
		<lastmod>" . date('c',time()) . "</lastmod>
		<priority>1.0</priority>
	</url>";
	
        $xml .= "
	<url>
		<loc>$domain/all/</loc>
		<changefreq>daily</changefreq>
		<lastmod>" . date('c',time()) . "</lastmod>
		<priority>1.0</priority>
	</url>";

	$result = $db->query("SELECT OriginalAlias FROM `e2BlogNotes` WHERE IsPublished = 1 AND IsIssue = 0 AND isvisible = 1");
	while ($row = $result->fetch_assoc()) {
		$page = $row['OriginalAlias'];
		$xml .= "
	<url>
		<loc>$domain/all/$page/</loc>
		<changefreq>weekly</changefreq>
		<lastmod>" . date('c',time()) . "</lastmod>
		<priority>0.9</priority>
	</url>";
	}

	$xml .= "
	<url>
		<loc>$domain/tags/</loc>
		<changefreq>daily</changefreq>
		<lastmod>" . date('c',time()) . "</lastmod>
		<priority>0.8</priority>
	</url>";
	
	$result = $db->query("SELECT OriginalAlias FROM `e2BlogKeywords`");
	while ($row = $result->fetch_assoc()) {
		$tag = $row['OriginalAlias'];
		$xml .= "
	<url>
		<loc>$domain/tags/$tag/</loc>
		<changefreq>weekly</changefreq>
		<lastmod>" . date('c',time()) . "</lastmod>
		<priority>0.7</priority>
	</url>";
	}	
		
	$xml .= "
	</urlset>";
	$db->close();
	$fp = fopen('sitemap.xml', 'w'); 
	fwrite($fp, $xml);
	fclose($fp);
	echo "<h1>Sitemap.xml has been updated successfully!</h1>";
?>

Скачать готовый sitemap_2BDrGDx.php для Эгеи

В шапке кода тебе необходимо изменить учётные данные для доступа к базе данных, которые позволят скрипту подключиться к БД и получить из неё необходимую информацию для корректного создания карты сайта.

Этот скрипт добавляет в карту сайта главную страницу твоего блога — https://okatiev.ru , страницу с перечнем всех записей (аналог html-карты сайта) — https://okatiev.ru/all/ , конечно же добавляет все твои записи, ссылку на перечень тегов — https://okatiev.ru/tags/ , и ссылки на все созданные ранее теги.

Посмотреть результат работы этого скрипта

Для того, чтобы создать карту сайта, тебе нужно обратиться напрямую к созданному файлу со скриптом через браузер.

https://okatiev.ru/sitemap_2BDrGDx.php

В случае успешной генерации XML-карты сайта ты увидишь такое сообщение в браузере:

Добавляем XML-карту сайта в Эгею
После этого можно проверить созданную карту сайта: https://okatiev.ru/sitemap.xml

Добавляем задание в CRON

Чтобы карта сайта для твоей Эгеи обновлялась автоматически и систематически, тебе необходимо добавить задание в CRON-планировщик.

Сделать это ты можешь либо через GUI-панель управления хостингом, либо посредством прямой правки файла crontab в UNIX-подобной ОС:

/usr/bin/wget -O - -q -t 1 'https://okatiev.ru/sitemap_2BDrGDx.php' > /dev/null 2>&1

Команда для добавления через панель управления web-хостингом. Замени адрес сайта на свой и протокол https на http, если не используешь защищенное соединение.

Добавляем карту сайта в Эгею
Добавление CRON-задания в панели управления Vesta
30  3   * * *   root    /usr/bin/wget -O - -q -t 1 'https://okatiev.ru/sitemap_2BDrGDx.php' > /dev/null 2>&1

Эту строку необходимо добавить в файл crontab, перед символом # в конце файла. Также замени адрес сайта на свой и протокол https на http, если не используешь защищенное соединение.

Добавляем карту сайта в Эгею
Добавление CRON-задания через SSH — nano /etc/crontab

Сделать это можно после подключения по SSH к web-серверу:

vi /etc/crontab

или

nano /etc/crontab

либо править файл /etc/crontab через sFTP, открыв файл в текстовом редакторе. После этого, карта сайта будет автоматически обновляться в заданное время — 03:30 утра. Вы можете выставить любое другое время.

Вывод

В качестве вывода можно сказать о том, что у нас получился довольно простой и эффективный способ генерации карты сайта для движка блогов — Эгеи.

Созданный файл sitemap.xml проходит валидацию как в Яндекс.Вебмастерах, так и в Google Console, также файл имеет в своей структуре тег lastmod, который принимает значение реального времени в момент обращения к скрипту.

Таким образом поисковые роботы будут понимать, что ты обновил контент на блоге, следовательно улучшится и ускорится индексация твоего ресурса.

Я надеюсь на то, что смог помочь тебе добавить карту сайта на твой блог. Если у тебя возникли вопросы — пиши их в комментариях, я постараюсь ответить! До связи!

Плюсануть
Поделиться
Отправить
Запинить
Понравился этот пост? Поделись им в соцсети!
Популярное
8 комментариев
Олег
Олег

30 августа 2017, 15:10

Большое спасибо!

Александр Окатьев

Олег, всегда рад помочь!

Марат
Марат

1 ноября 2017, 12:08

Привет, что-то не генерируется карта сайта, на 30 строке выдаёт ошибку. Сталкивался с этим?

Александр Окатьев

Какую ошибку выдаёт? Запости в коммент её.

Марат
Марат

1 ноября 2017, 12:18

Сама ошибка:

Fatal error: Uncaught Error: Call to a member function fetch_assoc() on boolean in D:\OpenServer\domains\blog.loc\sitemap_2BDrGDx.php:30 Stack trace: #0 {main} thrown in D:\OpenServer\domains\blog.loc\sitemap_2BDrGDx.php on line 30

Это локалка, на хостинге та же ошибка выходит.

Александр Окатьев

Марат, ты менял параметры доступа к БД в самом верху файла? Если менял, то проверь пожалуйста корректность логина, пароля, названия базы данных и хоста базы данных.

Марат
Марат

1 ноября 2017, 12:27

Все данные поменял, они правильные. Только права доступа 0755 не выставил, т.к не знаю где их выставлять? Это критично?

Александр Окатьев

Думаю это не критично. У тебя PhpMyAdmin есть? Если есть, то войди в него и посмотри, есть ли у тебя там таблица e2BlogNotes в базе данных блога? Я так подозреваю, что версия Эгеи у тебя другая и структура БД может отличаться. Тогда придется менять SELECT-запрос.

Марат
Марат

1 ноября 2017, 12:58

e2BlogNotes есть, версия Эгеи 2.6 v3118.

Александр Окатьев

Такая же версия как и у меня. Сможешь предоставить мне доступы к FTP и PhpMyAdmin на хостинге (на почту)? Попробую разобраться в чем дело.

Сейчас проверил скрипт из статьи и не вписал свои данные для подключения к БД (то есть скрипт не смог подключиться к базе). Получил такую же ошибку как у тебя:

Fatal error: Call to a member function fetch_assoc() on boolean in /home/admin/web/okatiev.ru/public_html/sitemap_2BDrGDx.php on line 30

Проверь еще раз свои учетные данные и правильность их написания, а также проверь соединение с базой данных.

Марат
Марат

1 ноября 2017, 13:14

Нашел другой способ, без использования базы данных. Но всё равно спасибо за ответы :—)

Александр Окатьев

Толком-то ничем и не помог :) Всегда пожалуйста.

Андрей
Андрей

25 января 2018, 11:44

Александр, спасибо за статью. Но у меня такая же ошибка: http://joxi.ru/p27Z379H01Z3Xm
Пароли верные, таблица: e2BlogNotes в БД имеется.

Александр Окатьев

Здравствуйте! Какая у вас версия движка? Такая ошибка возникает при невозможности подключиться к базе данных. Добавьте строку:

if ($db->connect_errno) { die('Ошибка соединения: ' . $db->connect_error); }

после строки

$db = new mysqli($db_host, $db_user, $db_password, $db_database);

и выполните скрипт заново.

Yevhen
Yevhen

8 апреля 2018, 12:32

Спасибо за модуль, возникла проблема указанная выше на v. 2.7, решил удалением параметра AND IsIssue = 0, т.к данного столбца в таблице e2BlogNotes не было. Так вроде бы работает.

И я бы рекомендовал выполнение по cron’у не через wget, а через php-cli

ps: почему-то не пропускает комментарий, если указываешь почту на базе своего домена, не люблю «личную» указывать

Александр Окатьев

Благодарю за обратную связь! Почему Вы не рекомендуете использовать wget?
P.S. Обновлю статью и поправлю поле с e-mail.

Ваш комментарий
адрес не будет опубликован
HTML-код не интерпретируется

Ctrl + Enter