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

Что такое XML-карта сайта и зачем она вам?

Sitemap.xml — это файл, который предоставляет поисковым системам информацию о структуре и содержании веб-сайта. Это важный инструмент для поисковой оптимизации (SEO), поскольку он помогает сканерам поисковых систем (также известным как боты или пауки) более эффективно перемещаться и индексировать страницы на веб-сайте.

sitemap.xml написан в формате XML (расширяемый язык разметки) и соответствует определенной схеме, определенной протоколом sitemaps.org. Он содержит список URL-адресов (унифицированных указателей ресурсов), которые представляют различные страницы веб-сайта, которые владелец веб-сайта хочет проиндексировать поисковыми системами.

Каждый URL-адрес в файле sitemap.xml может включать дополнительную информацию, такую ​​как дата последнего изменения, частота изменений (например, всегда, ежечасно, ежедневно, еженедельно и т. д.) и значение приоритета, указывающее относительную важность URL-адреса. по сравнению с другими URL-адресами на сайте.

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

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

Требуемые зависимости

Для начала убедитесь, что у вас установлен Symfony, а ваш проект Symfony запущен и работает. Далее вам нужно установить пакеты twig/twig с помощью Composer. Пакет twig/twig необходим для рендеринга содержимого XML.

Определите контроллер Sitemap

Создайте новый контроллер с именем SitemapController.php. Этот контроллер будет обрабатывать логику для создания карты сайта. В контроллере импортируйте необходимые классы и настройте действие, которое будет генерировать карту сайта:

В приведенном ниже примере у нас есть два вида URL:

  • Статический: как домашняя страница или страница политики.
  • Динамический: для статей
namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\PostRepository;

class SitemapController extends AbstractController
{
    public function __construct(PostRepository $postRepository)
    {
        $this->postRepository = $postRepository;
    }

    #[Route('/sitemap.{_format}', name: 'app_sitemap', requirements: ['_format' => 'html|xml'], format: 'xml')]
    public index(Request $request): Response
    {
        $hostname = $request->getSchemeAndHttpHost();

        $urls = []; // Array to store sitemap URLs

        // Add your sitemap URLs dynamically (e.g., from database or routes)
    
        // Static URLs
        $urls[] = ['loc' => $this->generateUrl('app_home'), 'priority' => '1.00'];
        
        // Dynamic URLs from Post table 
        $posts = $this->postRepository->findBy(['language' => $language]);
        foreach ($posts as $post)
        {
            $urls[] = [
                'loc' => $this->generateUrl('post_show', [
                    'slug' => $post->getSlug(),
                ]),
                'priority' => '1.00',
                'lastmod' => $post->getUpdatedAt()->format('Y-m-d')
            ];
        }
       
        $xml = $this->renderView('sitemap/sitemap.xml.twig', [
                'urls' => $urls,
                'hostname' => $hostname
        ]);
        

        return new Response($xml, 200, ['Content-Type' => 'text/xml']);
    }
}

Ключ $urls loc для местоположения, приоритет для классификации даты последнего изменения местоположения.

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

Создайте шаблон sitemap.xml.twig

Шаблон Twig будет использоваться для отображения карты сайта в формате XML.

<?xml version="1.0" encoding="UTF-8"?>
<urlset
        xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
        http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
    {% for url in urls %}
        <url>
            {% if url.loc|replace({hostname:''}) == url.loc %}
                <loc>{{ hostname }}{{ url.loc }}</loc>
            {% else %}
                <loc>{{ url.loc }}</loc>
            {% endif %}
            {% if url.lastmod is defined %}
                <lastmod>{{ url.lastmod }}</lastmod>
            {% endif %}
            {% if url.changefreq is defined %}
                <changefreq>{{ url.changefreq }}</changefreq>
            {% endif %}
            {% if url.priority is defined %}
                <priority>{{ url.priority }}</priority>
            {% endif %}
        </url>
    {% endfor %}
</urlset>

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

Имея контроллер и шаблон Twig, вы можете сгенерировать файл sitemap.xml. Для этого войдите в маршрут карты сайта, который вы определили ранее. Например, перейдите к http://yourdomain.com/sitemap.xml.

Сеанс отладки

Вы можете получить ошибку 404 при посещении маршрута карты сайта, особенно в рабочей среде.

Решение - очистить кеш.

bin/console cache:clear

Заключение

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

Оставайтесь на связи, будьте в курсе и вдохновляйтесь! Сегодня я приглашаю вас сделать следующий шаг и следовать за мной. Спасибо за то, что остаетесь верным читателем. Я ценю вашу поддержку. Удачного кодирования! 😉