TYPO3 Tipps und Tricks: (Custom) Sitemap entwickeln mittels ext:seo

In diesem Blogbeitrag zeigen wir, wie man mit TYPO3 unter Verwendung der SEO-Core-Extension eine eigene XML-Sitemap erstellen bzw. entwickeln kann.

In diesem Beispiel werden in einem Buchshop noch weitere URL's erstellt in den Subkategorien von verschiedenen Themen. Das ist über die vorhandenen SEO-Provider (pages und  RecordsXmlSitemapDataProvider) nicht möglich.

Zuerst muss der Sitemap-Provider im Typoscript registriert werden:

plugin.tx_seo {  config {    xmlSitemap {      sitemaps {        topics {          provider = Various\VaTemplate\Seo\SolrXmlSitemapDataProvider          config {            facet = topic          }        }      }    }  }}

Anschließend muss natürlich die Klasse mit dem Sitemap Provider noch erstellt werden - diese Klasse muss von TYPO3\CMS\Seo\XmlSitemap\AbstractXmlSitemapDataProvider erben. Die Funktion generateItems muss dann ein array mit den Einträgen für die Sitemap liefern:

<?phpdeclare(strict_types=1);namespace Varioous\VaTemplate\Seo;use GuzzleHttp\Client;use Psr\Http\Message\ServerRequestInterface;use TYPO3\CMS\Core\Context\Context;use TYPO3\CMS\Core\Utility\GeneralUtility;use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;use TYPO3\CMS\Seo\XmlSitemap\AbstractXmlSitemapDataProvider;use TYPO3\CMS\Seo\XmlSitemap\Exception\MissingConfigurationException;use Varioous\VaTemplate\Domain\Model\BookCategory;use Varioous\VaTemplate\Utility\BookCategoryUtility;use Varioous\VaTemplate\Domain\Repository\BookCategoryRepository;class SolrXmlSitemapDataProvider extends AbstractXmlSitemapDataProvider{    /**     * @param ServerRequestInterface $request     * @param string $key     * @param array $config     * @param ContentObjectRenderer|null $cObj     * @throws MissingConfigurationException     */    public function __construct(ServerRequestInterface $request, string $key, array $config = [], ContentObjectRenderer $cObj = null)    {        parent::__construct($request, $key, $config, $cObj);        $this->generateItems();    }    /**     * @throws MissingConfigurationException     */    public function generateItems(): void    {		/** @var BookCategoryRepository $bookCategoryRepository */		$bookCategoryRepository = GeneralUtility::makeInstance('Varioous\\VaTemplate\\Domain\\Repository\\BookCategoryRepository');		$type = $this->config['facet'];        		$subCategories = $bookCategoryRepository->findSubcategories($langCode);		/** @var BookCategory $category */		foreach ($subCategories as $category) {			if (!in_array($category->getUid(), $processCategories)) {				if ($type == 'topic') {					if ($category->getPid() != 519) {						$topics = BookCategoryUtility::getTopicsForSitemap($category);						foreach ($topics as $tObj) {							//create sitemap entry							$uri = $uriBuilder->reset()->setTargetPageUid($category->getUid())->setCreateAbsoluteUri(true)->build() . '/' . urlencode($tObj);							$item = [								'priority' => 0.5							];							$item['changefreq'] = 'weekly';							$item['loc'] = $uri;							$this->items[] = $item;						}					}				}			}		}    }}

Das war es im Prinzip auch schon wieder. Um für das Sitemap auch noch eine sprechende URL zu erstellen muss man in der Siteconfig noch folgende Einstellung vornehmen:

routes:  -    route: sitemap.xml    type: uri    source: 't3://page?type=1533906435'

Wenn man nun das Sitemap aufruft (mittels [URL]/sitemap.xml) erhält man auch schon das fertige Sitemap:

TYPO3 Custom Sitemap
Custom Sitemap - sitemap.xml
TYPO3 Sitemap
TYPO3 custom Sitemap - sitemap.xml

Wir entwickeln digitale Lösungen mit Leidenschaft

Warum wir das tun? Weil die Verwirklichung Ihrer Vision unser größter Anspruch und die schönste Anerkennung ist. Deshalb nehmen wir uns gerne ausreichend Zeit für die Realisierung Ihres digitalen Projekts.

Kontaktieren Sie uns, wir sind gerne für Ihre Fragen da:

Passend zu diesem Thema:

TYPO3 Tipps und Tricks: Cache für einzelne Extbase-Objekte leeren

TYPO3 Tipps und Tricks: Cache für einzelne Extbase-Objekte leeren

Kürzlich bin ich bei einem Projekt vor folgendem Problem gestanden: Per Plugin werden Extbase-Objekte auf einer Seite ausgegeben und diese auch gecach…

TYPO3 Tipps und Tricks: Manueller/Programmatischer Login in Controller-Action (TYPO3 9)

TYPO3 Tipps und Tricks: Manueller/Programmatischer Login in Controller-Action (T…

Manchmal gibt es bei Web-Projekten die Notwendigkeit einen Login programmatisch (manuell, im PHP-Code) durchzuführen. Ein Kunde hat vor kurzem folgend…

TYPO3 Tipps und Tricks: Microsoft SQL Server (MSSQL) und TYPO3 in einem Docker-Container

TYPO3 Tipps und Tricks: Microsoft SQL Server (MSSQL) und TYPO3 in einem Docker-C…

In diesem Blogbeitrag zeigen wir, wie man eine Microsoft SQL-Server (MSSQL) Datenbank in einem Docker-Container mit ddev laufen lässt. Zusätzlich werd…