Sitemap — сайта в формате XML для wordpress.

Опубликовано: 10.10.2018

видео Sitemap — сайта в формате XML для wordpress.

Сoздaние и нaстрoйкa xml-кaрты сaйтa wordpress

Здравствуйте читатели блога livinfo.ru.

В данной статье разберёмся что такое файл sitemap и для чего он нужен.



Карта сайта на самом деле важная составляющая сайта. Для большего понимания давайте например возьмем такую ситуацию, Вы взяли книгу и нужно прочитать её не всю а определенную главу. Конечно чтоб найти её нужно посмотреть книжное оглавление, где указана страничка на эту главу. Таким образом и устроена sitemap сайта. Также как и книжное оглавление карта сайта поможет найти желаемую страничку сайта или статью.


Фaйл Sitemap.xml - сoздaние кaрты сaйтa, прoверкa и ее директивы

Карта сайта бывает двух видов — для посетителей и поисковых роботов. Для посетителей — это страничка HTML, на которой все ссылки на разделы и страницы сайта. Такая страничка поможет найти интересующий раздел или статью. Но поговорим о ней в следующей статье — карта для посетителей.


Кaк сделaть HTML кaрту сaйтa (для людей) плaгинoм

Вторая карта для поисковых роботов, называется sitemap и имеет формат xml, о ней и поговорим.

Sitemap.xml — это файл, который находится в корне сайта и имеет специальный формат карты сайта. Рассчитан sitemap.xml для поисковых роботов Google и Яндекс и не должен превышать 50.000 ссылок.

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

Насчёт размера переживать не стоит, лично мне еще не встречались блоги в которых размер файла sitemap.xml превышал 10 мб или 50.000 ссылок. Такого успеха можно достичь если у Вас интернет-магазин, тогда просто делается несколько карт и прописываются адреса в robots.txt. На этом останавливаться не будем.

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

Несмотря на свою популярность, wordpress не имеет встроенной функции для генерации карты сайта. Для генерации карты Обычно используют плагины, но я сторонник их. Почему? Причин несколько, одна из них это дополнительная нагрузка на сайт, потом неизвестный человек создавал плагин которого не знаю, можно и еще называть но пропустим.

Итак приступим. Генерировать карту сайта будет специальный код, этот код нужно вставить в functions.php Вашей активной темы wordpress а лучше в дочернею :

add_action("publish_post", "sp_xml_sitemap"); add_action("publish_page", "sp_xml_sitemap"); function sp_xml_sitemap() { $stylesheet = false; // true - устанавливаем стили отображения XML карты | false - не устанавливаем $sitemap = "<"."?xml version='1.0' encoding='UTF-8'?>\n". ($stylesheet?"<"."?xml-stylesheet type='text/xsl' href='".get_bloginfo('stylesheet_directory')."/stylesheet-xml-sitemap.xsl'?>\n":''). "<!--sitemap-generator-url='http://livinfo.ru/saytostroenie/sitemap-sayta-v-formate-xml-dlya-wordpress/'-->\n". "<!--generated-on='".date("Y-m-d H:i:s")."'-->\n". "<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n"; $posts = get_posts(array( 'numberposts' => -1, 'orderby' => 'modified', 'post_type' => array('post','page'), 'order' => 'DESC' )); $sitemap.= "\t<url>\n". "\t\t<loc>".get_option('home')."</loc>\n". "\t\t<lastmod>".date('Y-m-d\TH:i:sP', strtotime($posts[0]->post_modified))."</lastmod>\n". "\t\t<changefreq>daily</changefreq>\n". "\t\t<priority>1</priority>\n". "\t</url>\n"; foreach($posts as $post) { setup_postdata($post); $sitemap .= "\t<url>\n". "\t\t<loc>" . get_permalink($post->ID) . "</loc>\n". "\t\t<lastmod>" . date('Y-m-d\TH:i:sP', strtotime($post->post_modified)) . "</lastmod>\n"; if ($post->post_type == 'post') { $sitemap .= "\t\t<changefreq>weekly</changefreq>\n". "\t\t<priority>0.9</priority>\n"; } else { $sitemap .= "\t\t<changefreq>monthly</changefreq>\n". "\t\t<priority>0.5</priority>\n"; } $sitemap .= "\t</url>\n"; } $sitemap .= '</urlset>'; $fp = fopen(ABSPATH . "sitemap.xml", 'w'); fwrite($fp, $sitemap); fclose($fp); $sitemapUrl = urlencode(get_option('home').'/sitemap.xml'); $searchEngines = array( 'http://google.com/webmasters/sitemaps/ping?sitemap='.$sitemapUrl, 'http://ping.blogs.yandex.ru/ping?sitemap='.$sitemapURL, ); foreach ($searchEngines as $searchEngine) { file_get_contents($searchEngine, 80, null, null, 0); } }

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

Теперь набрав http://Ваш сайт/sitemap.xml увидите карту сайта. Выглядеть она будет не очень, как обычный XML-документ и пригодна только для роботов. Можно облагородить и сделать её красивую — подключив стили. Для этого в корне темы создайте файл «stylesheet-xml-sitemap.xsl», кодировка UTF-8, и закиньте код:

<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>XML Sitemap</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css"> body { font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; font-size: 12px; color: #111; } table { border: none; border-collapse: collapse; font-size:11px; } #sitemap th { background-color: #ccc; } #sitemap tr:nth-child(even) { background-color: #eee; } #sitemap tbody tr:hover { background-color: #ccc; } th { text-align:left; padding: 10px; font-size:10px; border-bottom: 1px solid #777; } th.last { padding:0; } td { text-align:center; } td.url { text-align:left; } #content { margin: 0 auto; min-width: 360px; max-width: 960px; } a { color: #000; text-decoration: none; } a:visited { color: #555; } p a:visited { color: #000; } a:hover { text-decoration: underline; } </style> </head> <body> <div id="content"> <h1>XML Sitemap</h1> <p> Generated on WordPress without a plugin by <a href="http://livinfo.ru/saytostroenie/sitemap-sayta-v-formate-xml-dlya-wordpress/">livinfo.ru</a>'s code. This sitemap contains <xsl:value-of select="count(sitemap:urlset/sitemap:url)"/> URLs. </p> <table id="sitemap" cellpadding="3"> <thead> <tr> <th>URL</th> <th width="5%">Priority</th> <th width="14%">Change Frequency</th> <th width="12%" class="last">Last Change (GMT)</th> </tr> </thead> <tbody> <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/> <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/> <xsl:for-each select="sitemap:urlset/sitemap:url"> <tr> <td class="url"> <xsl:variable name="itemURL"> <xsl:value-of select="sitemap:loc"/> </xsl:variable> <a href="{$itemURL}"> <xsl:value-of select="sitemap:loc"/> </a> </td> <td class="priority"> <xsl:value-of select="concat(sitemap:priority*100,'%')"/> </td> <td class="change"> <xsl:value-of select="concat(translate(substring(sitemap:changefreq, 1, 1),concat($lower, $upper),concat($upper, $lower)),substring(sitemap:changefreq, 2))"/> </td> <td class="last_change"> <xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))"/> </td> </tr> </xsl:for-each> </tbody> </table> </div> </body> </html> </xsl:template> </xsl:stylesheet>

Для подключения стилей в коде который Вы вставили в functions.php нужно переключить false на true, вначале кода($stylesheet = true;).

После всех выше описанных шагов у Вас получится полноценная sitemap.xml для wordpress и без плагина. Для примера смотрите мою карту .

Кто не уверен в своих силах обращайтесь на почту помогу. Услуга не бесплатна, о цене договоримся.

А у меня пока всё, до новых встреч.