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(2mo ago)041MITPHP

Since Mar 17Pushed 2mo 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)

Ein Laravel-Package zur einfachen Verwaltung und Generierung von XML-Sitemaps direkt über die Route-Definition.

---

Features
--------

[](#features)

- Routen direkt als Sitemap-Einträge deklarieren
- Fluente API für Priorität, Changefreq, Lastmod und Zieldatei
- Mehrere Sitemap-Dateien gleichzeitig unterstützen
- Standardwerte über `config/sitemap.php` konfigurierbar
- Artisan-Command `sitemap:generate` erzeugt valides XML (sitemaps.org Standard)

---

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

[](#installation)

1. Autoload-Eintrag in der Root-`composer.json` ergänzen:

```
"autoload": {
    "psr-4": {
        "ITHilbert\\Sitemap\\": "packages/sitemap/src"
    }
}
```

2. Autoloader neu generieren:

```
composer dump-autoload
```

3. ServiceProvider in `config/app.php` eintragen (alphabetisch sortiert):

```
ITHilbert\Sitemap\SitemapServiceProvider::class,
```

4. Config publizieren (optional):

```
php artisan vendor:publish --provider="ITHilbert\Sitemap\SitemapServiceProvider"
```

---

Verwendung
----------

[](#verwendung)

### Route deklarieren

[](#route-deklarieren)

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

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

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

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

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

// 6. Nicht in der Sitemap erscheinen
Route::get('/intern', [InternController::class, 'index'])
    ->name('intern');
```

### Sitemap generieren

[](#sitemap-generieren)

```
php artisan sitemap:generate
```

Ausgabe:

```
Generiere Sitemap...
  ✓ sitemap.xml         → 4 Einträge
  ✓ laravel-sitemap.xml → 1 Eintrag
Fertig! 2 Datei(en) mit insgesamt 5 Einträgen generiert.

```

Die Dateien werden unter `public/` abgelegt.

---

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

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

Wenn du zehntausende von Einträgen (wie Landingpages oder Produkte) hast, solltest du diese nicht in der `web.php` registrieren, sondern speicherschonend erst dann aus der Datenbank laden, wenn der `sitemap:generate`-Befehl ausgeführt wird.

Dazu stellt das Paket einen **Generator-Callback** bereit. Du kannst Generatoren z.B. in der `boot()`-Methode des `AppServiceProvider` registrieren:

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

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

        // Chunking verwenden, um Speicher bei großen DB-Tabellen zu sparen!
        Landingpage::chunk(1000, function($pages) use (&$entries) {
            foreach($pages as $page) {
                $entries[] = [
                    'url'        => url('/berater/' . $page->slug), // Kompletter URL-String notwendig
                    'lastmod'    => $page->updated_at,              // Kann Carbon, String oder null sein
                    'priority'   => '0.8',
                    'changefreq' => 'weekly',
                    // 'file'    => 'landingpages.xml'              // (Optional) Eigene XML-Datei
                ];
            }
        });

        return $entries;
    });
}
```

Die Closure wird **nur beim Aufruf des Artisan-Befehls** abgearbeitet. Das normale Frontend bleibt rasant schnell, selbst bei 100.000 generierten Links.

---

Konfiguration
-------------

[](#konfiguration)

Nach dem Publizieren kann `config/sitemap.php` angepasst werden:

```
return [
    'default_filename'  => 'sitemap.xml',     // Dateiname wenn kein ->sitemap('...')  angegeben
    'default_priority'  => '0.5',             // 0.0 – 1.0
    'default_changefreq'=> 'monthly',         // always|hourly|daily|weekly|monthly|yearly|never
    'default_lastmod'   => true,              // true = heutiges Datum, false = keins, string = fixes Datum
    'url_base'          => env('APP_URL'),     // Basis-URL der generierten URLs
];
```

### changefreq-Werte

[](#changefreq-werte)

WertBedeutung`always`Jede Abfrage`hourly`Stündlich`daily`Täglich`weekly`Wöchentlich`monthly`Monatlich`yearly`Jährlich`never`Unveränderlich---

Struktur
--------

[](#struktur)

```
packages/sitemap/
├── composer.json
├── README.md
├── LICENSE
└── src/
    ├── SitemapServiceProvider.php
    ├── Builders/
    │   └── SitemapRouteBuilder.php   # Fluente API
    ├── Commands/
    │   └── SitemapGenerateCommand.php # php artisan sitemap:generate
    ├── Config/
    │   └── sitemap.php               # Standardwerte
    ├── Macros/
    │   └── RouteSitemapMacro.php     # Route->sitemap() Macro
    └── Services/
        └── SitemapService.php        # Kern-Logik

```

---

Lizenz
------

[](#lizenz)

MIT – siehe [LICENSE](LICENSE)

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance87

Actively maintained with recent releases

Popularity11

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity33

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

62d 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.)

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

A package containing SEO helpers.

722.6k](/packages/calotype-seo)[vinicius73/seotools

A package containing SEO helpers.

245.2k](/packages/vinicius73-seotools)

PHPackages © 2026

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