PHPackages                             ithilbert/sitemap - 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. ithilbert/sitemap

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

ithilbert/sitemap
=================

Sitemap-Generator für Laravel – Routen werden direkt als Sitemap-Einträge deklariert.

1.0.0(3mo ago)057MITPHP

Since Mar 17Pushed 1mo agoCompare

[ Source](https://github.com/ITHilbert/lv-sitemap)[ Packagist](https://packagist.org/packages/ithilbert/sitemap)[ Docs](https://www.it-hilbert.com)[ RSS](/packages/ithilbert-sitemap/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (2)Used By (0)

ITHilbert Sitemap
=================

[](#ithilbert-sitemap)

Laravel-Package zur einfachen Verwaltung und Generierung von XML-Sitemaps direkt aus der Route-Definition.

Features
--------

[](#features)

- Routen direkt als Sitemap-Einträge deklarieren (Macro `->sitemap()`)
- Fluente API: `priority()`, `changefreq()`, `lastmod()`, `file()`
- Mehrere Sitemap-Dateien parallel generieren
- Dynamische Einträge via Generator-Callback (DB-Chunking-tauglich)
- Konfigurierbare Standardwerte (Priority, Changefreq, Lastmod, Url-Base)
- Saubere XML-Erzeugung via `XMLWriter` (korrektes Escaping)
- Validation: `priority` zwingend 0.0–1.0, `changefreq` als Enum
- Parameter-Routen (`/blog/{slug}`) werden automatisch übersprungen
- Artisan-Command `sitemap:generate` (optional mit `--path=`)

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

[](#installation)

```
composer require ithilbert/sitemap
php artisan vendor:publish --tag=sitemap-config   # optional
```

Service Provider und Facade werden automatisch über Laravel Package-Discovery registriert.

Verwendung
----------

[](#verwendung)

### Routen deklarieren

[](#routen-deklarieren)

```
use ITHilbert\Sitemap\Enums\Changefreq;

// 1. Standardwerte aus Config
Route::get('/blog', [BlogController::class, 'index'])
    ->name('blog')
    ->sitemap();

// 2. Array-Syntax
Route::get('/impressum', [PageController::class, 'impressum'])
    ->sitemap(['priority' => '0.3', 'changefreq' => 'yearly']);

// 3. Fluente Syntax (mit Validation)
Route::get('/kontakt', [PageController::class, 'kontakt'])
    ->sitemap()
    ->priority('0.5')
    ->changefreq(Changefreq::Monthly);

// 4. Andere Ziel-Datei (String-Syntax)
Route::get('/laravel-guide', [PageController::class, 'laravel'])
    ->sitemap('laravel-sitemap.xml');

// 5. Fluente Syntax mit Datei
Route::get('/laravel-advanced', [PageController::class, 'advanced'])
    ->sitemap()
    ->file('laravel-sitemap.xml')
    ->priority('0.8');
```

Routen mit URL-Parametern (`/blog/{slug}`) erscheinen **nicht** in der statischen Sitemap — dynamische URLs gehören in einen Generator (siehe unten).

### Sitemap generieren

[](#sitemap-generieren)

```
php artisan sitemap:generate
php artisan sitemap:generate --path=/custom/path
```

Dynamische Einträge (z. B. aus der Datenbank)
---------------------------------------------

[](#dynamische-einträge-z-b-aus-der-datenbank)

Für zehntausende Einträge nicht in `web.php` registrieren, sondern erst beim `sitemap:generate`-Aufruf aus der DB laden:

```
use ITHilbert\Sitemap\Facades\Sitemap;
use App\Models\Landingpage;

public function boot(): void
{
    Sitemap::addGenerator(function () {
        $entries = [];

        Landingpage::chunk(1000, function ($pages) use (&$entries) {
            foreach ($pages as $page) {
                $entries[] = [
                    'url'        => url('/berater/' . $page->slug),
                    'lastmod'    => $page->updated_at,    // Carbon, DateTime, string oder null
                    'priority'   => '0.8',
                    'changefreq' => 'weekly',
                    // 'file'    => 'landingpages.xml',   // optional
                ];
            }
        });

        return $entries;
    });
}
```

Akzeptierte `lastmod`-Typen: `string` (ISO 8601), `bool` (true=heute), `Carbon\CarbonInterface`, `DateTimeInterface`, `null`.

Konfiguration (`config/sitemap.php`)
------------------------------------

[](#konfiguration-configsitemapphp)

```
return [
    'default_filename'   => 'sitemap.xml',
    'default_priority'   => '0.5',         // 0.0 – 1.0
    'default_changefreq' => 'monthly',     // always|hourly|daily|weekly|monthly|yearly|never
    'default_lastmod'    => true,          // true=heute, false=keins, string=fix
    'url_base'           => env('APP_URL'),
];
```

Struktur
--------

[](#struktur)

```
packages/lv-sitemap/
├── composer.json
├── README.md
├── LICENSE
├── src/
│   ├── SitemapServiceProvider.php
│   ├── Builders/SitemapRouteBuilder.php   # Fluente API + Validation
│   ├── Commands/SitemapGenerateCommand.php
│   ├── Config/sitemap.php
│   ├── Data/SitemapEntry.php              # Readonly DTO
│   ├── Enums/Changefreq.php
│   ├── Facades/Sitemap.php
│   ├── Macros/RouteSitemapMacro.php
│   └── Services/SitemapService.php        # Kern-Logik + XMLWriter
└── tests/
    ├── Unit/                              # Enum, DTO
    └── Feature/                           # Service, Builder, Command

```

Lizenz
------

[](#lizenz)

MIT – siehe [LICENSE](LICENSE)

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance86

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity34

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

108d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/86378a339ef2f2a6b6dc13256925d271de7af518a4ee1dfef913b75868d3640c?d=identicon)[ithilbert](/maintainers/ithilbert)

---

Top Contributors

[![ITHilbert](https://avatars.githubusercontent.com/u/46783454?v=4)](https://github.com/ITHilbert "ITHilbert (3 commits)")

---

Tags

laravelSitemapit-hilbert

### Embed Badge

![Health badge](/badges/ithilbert-sitemap/health.svg)

```
[![Health](https://phpackages.com/badges/ithilbert-sitemap/health.svg)](https://phpackages.com/packages/ithilbert-sitemap)
```

###  Alternatives

[fomvasss/laravel-meta-tags

A package to manage SEO (meta-tags, xml-fields, etc.)

3129.8k](/packages/fomvasss-laravel-meta-tags)[calotype/seo

A package containing SEO helpers.

742.6k](/packages/calotype-seo)[3x1io/filament-sitemap

Site Settings Like title, description, profile and Sitemap Generator

152.2k](/packages/3x1io-filament-sitemap)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
