Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Sitemap Bundle Laravel Package

kunstmaan/sitemap-bundle

Symfony bundle for generating XML sitemaps for Kunstmaan CMS sites. It integrates with Kunstmaan page/node structures, provides sitemap generation and routing, and helps expose search-engine-friendly sitemap URLs for your application.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit kunstmaan/sitemap-bundle is a Symfony bundle, not a Laravel package. Its architecture is built around Symfony's DI container, tagged services, event dispatchers, Twig rendering, and Doctrine ORM repositories — specifically reading Kunstmaan\NodeBundle\Entity\Node records. It registers routing through Symfony's routing loader and renders sitemap XML through Twig templates split into a sitemap index plus child sitemaps. None of these integration seams exist in a Laravel application in a drop-in way: there is no service container tag system, no bundle registration, no Symfony router, and no Node entity. The package is a component of a specific CMS rather than a general-purpose sitemap library, so "fit" with a Laravel codebase is effectively zero without a port. The useful asset is the domain design — node traversal, sitemap index sharding, per-locale URL emission, and cache-friendly XML endpoints — not the code itself.

Integration feasibility Direct Composer installation is not viable: the package targets Symfony 2.x-era components and PHP 5.x, has had no release since April 2014, and carries zero dependents. It will almost certainly fail dependency resolution against a modern Laravel stack (PHP 8.x, Symfony 6/7 components pulled in transitively by Laravel). A fork-and-port is technically possible but would require replacing the DI wiring, the Doctrine entity coupling, the Twig templates, and the routing layer — at which point very little of the original code survives. Realistic estimate: 2–3 engineer-weeks for a faithful port (nodes → URLs, index sharding, caching, multi-locale, tests), versus 3–5 engineer-days to build the same capability natively on Laravel with a maintained package such as spatie/laravel-sitemap as the generation primitive. The port is not the efficient path unless there is a hard requirement to mirror Kunstmaan's exact URL/priority semantics.

Technical risk

  • Abandonment: 12+ years without maintenance, 10 stars, no security response process. Any CVE or PHP incompatibility is ours to fix.
  • Framework mismatch: Symfony/Doctrine assumptions leak everywhere; the "integration" is a rewrite, and rewrites carry schedule risk and hidden-scope risk (URL canonicalization rules, locale fallbacks, draft/unpublished node exclusion).
  • Semantic drift: Sitemap output is a contract with search engines. Reimplementing node-visibility logic from a legacy CMS without its tests risks emitting unpublished, redirecting, or noindex URLs — an SEO regression that is hard to detect post-launch.
  • Low signal: The 0.08 score and 23.75 opportunity score reflect an unmaintained, single-ecosystem artifact. There is no community to lean on for edge cases.
  • Licensing is clean (MIT), so forking is legally unencumbered — the risk is engineering, not legal.

Key questions

  1. Is there an actual requirement to reproduce Kunstmaan's sitemap semantics, or is the requirement simply "a correct, cacheable sitemap"?
  2. What is the URL source of truth in our Laravel app — Eloquent models, a route registry, or a CMS head?
  3. Do we need sitemap index sharding (>50k URLs), multi-locale hreflang alternates, lastmod fidelity, and image/video extensions on day one?
  4. Who owns SEO correctness (canonical, noindex, redirects) and what is the acceptance test?
  5. Is there any existing Kunstmaan deployment this must interoperate with, or is this greenfield?

Integration Approach

Stack fit Treat the package as a reference specification, not a dependency. The Laravel-native equivalent is: an artisan sitemap:generate command (or queued job) that queries published content via Eloquent scopes, renders XML with a Blade view or a streaming XML writer, writes to storage/app/public or object storage, and serves via a lightweight controller with aggressive HTTP caching. Add spatie/laravel-sitemap (actively maintained, Laravel-native) for the generation core, and reserve custom code for the index-sharding and locale-alternate logic that the original bundle handled. Routing goes through routes/web.php; scheduling through the console kernel.

Migration path There is no migration from this package to migrate — it was never installed. If a legacy Kunstmaan site exists, run both sitemaps in parallel behind a feature flag, diff the URL sets, and only cut over when the diff is fully explained (typically: unpublished nodes, redirect sources, paginated archives, and media URLs). Keep the legacy XML as a golden-file fixture for regression tests.

Compatibility

  • PHP/Laravel: target the versions already pinned in our app; the legacy bundle's PHP 5.x constraints are irrelevant to the new implementation.
  • Multi-locale: map Kunstmaan's node translation model onto Laravel's own i18n strategy; emit xhtml:link rel="alternate" blocks explicitly if the original did.
  • Serving: ensure the sitemap URL is exempt from auth middleware, excluded from rate limiting, and returns Content-Type: application/xml with correct cache headers.

Sequencing

  1. Discovery (2–3 days): enumerate URL sources, visibility rules, locale matrix, and caching expectations. Produce an acceptance checklist of URL classes.
  2. Spike (3–5 days): generate a sitemap for the top three content types with spatie/laravel-sitemap; validate against Google's limits and a sample crawl.
  3. Core build (1 sprint): all content types, index sharding, lastmod from updated_at, gzip, storage + CDN delivery.
  4. Automation: regenerate on publish/unpublish (queued, debounced) plus a nightly full rebuild; emit an operational metric for URL count and generation duration.
  5. Hardening: regression fixtures, robots.txt Sitemap: directive, Search Console submission, and a monitored diff alert for large URL-set changes.

Operational Impact

Maintenance The native implementation is small (a command, a job, a view, a controller) and sits on a maintained dependency — ongoing cost is low: version bumps of one package plus occasional SEO-rule changes. The alternative (forking Kunstmaan) creates a permanently owned, unmaintained codebase with no upstream, which is the worst maintenance profile available. Budget roughly 2–4 engineer-days per quarter for the native path versus an open-ended ownership burden for the fork.

Support No vendor, no maintainers, no issue activity. Internal on-call owns everything either way; the advantage of the native path is that the failure surface is code we wrote and understand. Document the generation job in the runbook: how to trigger manually, where output lands, how to invalidate the CDN, and what "sitemap is stale" looks like.

Scaling Sitemaps are read-heavy and write-light — ideal for static generation. At >50k URLs, shard into a sitemap index (the Kunstmaan bundle did this; replicate it) and serve gzipped files from object storage/CDN rather than rendering per request. Generation cost scales with content volume; debounce publish-triggered rebuilds and rely on a nightly full rebuild to correct drift. Per-request dynamic rendering should be avoided entirely — it couples crawler traffic to application load and creates a trivially abusable endpoint.

Failure modes

  • Stale sitemap after content changes if event-driven regeneration silently fails — mitigate with the nightly rebuild and an alert on generation age.
  • URL set explosion or leakage: draft/unpublished/soft-deleted content or staging hosts leaking into production XML. Mitigate with scoped queries, explicit noindex/status filtering, and a diff check that flags >10% URL-set change in one run.
  • Format errors producing invalid XML that crawlers reject — mitigate with schema validation in CI against a fixture.
  • Crawler load if served dynamically — mitigate with static files and CDN caching.
  • Memory/time limits on large rebuilds — mitigate by chunking per content type and streaming output.
  • Silent SEO regression from wrong canonical host or protocol — assert the base URL from config, not from the request.

Ramp-up Low for the native path: any Laravel developer can pick it up in a day, and the domain knowledge (which URLs belong in a sitemap) is documented in the discovery checklist. If the team instead inherits a Kunstmaan fork, ramp-up is materially higher — Symfony 2 conventions, Doctrine entity traversal, and an unfamiliar CMS's node model — for a component that delivers no differentiated business value. Recommendation: do not adopt kunstmaan/sitemap-bundle; harvest its design (index sharding, node-based enumeration, cache-friendly endpoints) into a Laravel-native generator backed by a maintained library, and hold the port as a contingency only if strict output parity with an existing Kunstmaan site is contractually required.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console