PHPackages                             in-square/pimcore-sitemap-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. in-square/pimcore-sitemap-bundle

ActivePimcore-bundle[Utility &amp; Helpers](/categories/utility)

in-square/pimcore-sitemap-bundle
================================

Static XML sitemap generator for Pimcore (Documents + DataObjects).

v1.1.0(3w ago)08GPL-3.0-or-laterPHPPHP ^8.1

Since Dec 29Pushed 3w agoCompare

[ Source](https://github.com/in-square/pimcore-simple-sitemap-bundle)[ Packagist](https://packagist.org/packages/in-square/pimcore-sitemap-bundle)[ Docs](https://github.com/in-square/pimcore-sitemap-bundle)[ RSS](/packages/in-square-pimcore-sitemap-bundle/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (2)Dependencies (12)Versions (3)Used By (0)

InSquare Pimcore Sitemap Bundle
===============================

[](#insquare-pimcore-sitemap-bundle)

Static XML sitemap generator for Pimcore (Documents + DataObjects) with multi-site and multi-locale support.

Requirements
------------

[](#requirements)

- PHP 8.1+
- Pimcore 11 / Symfony 6.4
- Symfony Messenger (for queue processing)
- Elements Process Manager (commands integrate with Process Manager)

Installation
------------

[](#installation)

```
composer require in-square/pimcore-sitemap-bundle
```

Enable the bundle in `config/bundles.php`:

```
return [
    InSquare\PimcoreSitemapBundle\InSquarePimcoreSitemapBundle::class => ['all' => true],
];
```

Configuration
-------------

[](#configuration)

Create `config/packages/in_square_pimcore_sitemap.yaml`:

```
in_square_pimcore_sitemap:
  sites:
    - id: 0
      host: 'example.com'
      languages: ['pl']
      objects:
        - 'Pimcore\Model\DataObject\Post'
        - 'Pimcore\Model\DataObject\PostCategory'

    - id: 1
      host: 'example.org'
      languages: ['pl', 'en']
      objects:
        - 'Pimcore\Model\DataObject\Product'

  object_generators:
    post: 'App\\Sitemap\\PostGenerator'
    postCategory: 'App\\Sitemap\\PostCategoryGenerator'
    product: 'App\\Sitemap\\ProductGenerator'

  output:
    dir: '%kernel.project_dir%/public/sitemap'
    max_urls_per_file: 50000

  hreflang:
    enabled: true
    x_default_language: 'en'
    x_default_fallback_language: 'pl'
```

Notes:

- `sites[*].objects` defines DataObject classes to collect for each site.
- `object_generators` keys must match the generator's `getId()`; keys are used in sitemap filenames.
- `hreflang.enabled` controls generation of `` entries.
- `hreflang.x_default_language` selects the preferred locale for `x-default`.
- `hreflang.x_default_fallback_language` is used only when the preferred locale is missing.

Commands
--------

[](#commands)

- `bin/console insquare:sitemap:install` – create `sitemap_item` table.
- `bin/console insquare:sitemap:collect` – dispatch sitemap messages to Messenger.
- `bin/console insquare:sitemap:dump` – generate XML files from database.
- `bin/console insquare:sitemap:delete` – delete XML files and truncate the table.

For an existing installation, run Doctrine migrations after updating the bundle:

```
bin/console doctrine:migrations:migrate
```

Run `collect`, wait until Messenger finishes processing the dispatched messages, and then run `dump`. Collection uses a run token, so the dump can remove rows which were not seen during the latest completed collection without truncating the table while workers are active.

Add routing for Messenger in `config/packages/framework.yaml`:

```
framework:
  messenger:
    routing:
      'InSquare\PimcoreSitemapBundle\Message\SitemapItemCreateMessage': async
```

Run Messenger worker for the queue:

```
bin/console messenger:consume async
```

Controller
----------

[](#controller)

The bundle exposes `/sitemap.xml`. The controller selects the correct site and serves the pre-generated file from `public/sitemap/sitemap.{siteId}.xml`. The site index links directly to the locale/type URL sets, for example `sitemap.0.pl.documents.xml`.

Object generators
-----------------

[](#object-generators)

Implement `InSquare\PimcoreSitemapBundle\Generator\ObjectGeneratorWithContextInterface` in your app to receive the normalized sitemap host:

```
