Weave Code
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

Filament Sitemap Generator Laravel Package

muhammad-nawlo/filament-sitemap-generator

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • SEO-Centric Plugin: Aligns well with Laravel-based applications requiring dynamic XML sitemap generation (e.g., e-commerce, news sites, or content-heavy platforms). Leverages Filament’s admin panel for configuration, reducing frontend complexity.
  • Extensibility: Built atop spatie/laravel-sitemap, a battle-tested package, ensuring modularity for future enhancements (e.g., custom sitemap types like video or job listings).
  • Filament Integration: Tight coupling with Filament’s admin UI simplifies management for non-technical stakeholders (e.g., editors adding news/alternate URLs via UI).

Integration Feasibility

  • Low-Coupling Design: Uses getter overrides (no static property redeclaration), minimizing risk of breaking changes across Filament v3.2–v5.x.
  • Dependency Stack:
    • Requires Laravel 9+ (Filament v3.2+) or Laravel 10+ (Filament v4/5).
    • Compatible with spatie/laravel-sitemap (v7.x+), ensuring consistency with existing sitemap logic.
  • Configuration-Driven: Centralized config file (config/filament-sitemap.php) reduces boilerplate and hardcoding.

Technical Risk

  • Filament Version Lock: Risk of deprecation if Filament’s navigation/group APIs change (e.g., v6.x). Mitigate via:
    • Monitoring Filament’s upgrade guide.
    • Feature flags for breaking changes (e.g., config('filament-sitemap.use_new_navigation')).
  • Performance at Scale:
    • Sitemap splitting (e.g., sitemap_index.xml) may require testing with >50K URLs to avoid timeouts.
    • Search-engine ping (e.g., Googlebot) adds HTTP overhead; rate-limit pings in production.
  • Customization Limits:
    • Heavy reliance on spatie/laravel-sitemap may restrict unique sitemap formats (e.g., non-XML).
    • Workaround: Extend via SitemapServiceProvider or custom SitemapGenerator classes.

Key Questions

  1. SEO Requirements:
    • Are dynamic sitemaps (e.g., user-generated content) needed, or static configurations sufficient?
    • Does the project require non-standard sitemap types (e.g., video, breadcrumbs)?
  2. Filament Ecosystem:
    • Is Filament already used for admin panels? If not, assess UI consistency costs.
    • Will other Filament plugins (e.g., filament-spatie-media-library) conflict with sitemap routes?
  3. Scalability:
    • What’s the expected sitemap size? Test splitting logic with production-like data volumes.
  4. Maintenance:
    • Is the team comfortable with spatie/laravel-sitemap’s maintenance cycle?
    • Are there plans to support Filament v6+? If not, budget for a migration path.

Integration Approach

Stack Fit

  • Ideal For:
    • Laravel + Filament stacks where SEO is a priority (e.g., SaaS platforms, news sites, or marketplaces).
    • Teams using spatie/laravel-sitemap or needing a Filament-based alternative to manual sitemap generation.
  • Anti-Patterns:
    • Avoid if the project uses non-Filament admin panels (e.g., Backpack, Nova) or requires sitemap generation outside Laravel.
    • Not suitable for headless CMS setups where sitemaps are generated client-side.

Migration Path

  1. Pre-Integration:
    • Audit existing sitemap logic (if any) for conflicts with spatie/laravel-sitemap.
    • Verify Filament version compatibility (e.g., composer require filament/filament:"^5.0").
  2. Installation:
    composer require muhammad-nawlo/filament-sitemap-generator
    php artisan vendor:publish --provider="MuhammadNawlo\FilamentSitemapGenerator\FilamentSitemapGeneratorServiceProvider"
    
    • Publish config and migrations (if using database-backed sitemaps).
  3. Configuration:
    • Define sitemaps in config/filament-sitemap.php:
      'sitemaps' => [
          'main' => [
              'url' => '/sitemap.xml',
              'items' => [
                  \App\Models\Page::class,
                  \App\Models\Post::class,
              ],
          ],
          'news' => [
              'url' => '/news-sitemap.xml',
              'items' => [
                  \App\Models\NewsArticle::class,
              ],
              'options' => [
                  'lastmod' => true,
                  'priority' => 0.8,
              ],
          ],
      ],
      
  4. Testing:
    • Validate sitemap generation via:
      php artisan sitemap:generate
      
    • Test routes (/sitemap.xml, /sitemap-index.xml) and search-engine pings.
    • Load-test with sitemap:generate --split=1000 for large datasets.

Compatibility

  • Filament Plugins:
    • Conflicts unlikely unless other plugins override Filament’s navigation or route middleware.
    • Isolate by using unique route prefixes (e.g., /admin/sitemap).
  • Laravel Services:
    • Works alongside spatie/laravel-sitemap but replaces manual configuration.
    • Avoid mixing both packages’ sitemap generators.
  • Caching:
    • Leverage Laravel’s cache (config('filament-sitemap.cache')) for performance, but ensure cache invalidation on content updates.

Sequencing

  1. Phase 1: Basic Integration
    • Implement static sitemaps (e.g., pages, posts) via Filament UI.
    • Test generation and validation.
  2. Phase 2: Dynamic Features
    • Add news/image sitemaps with lastmod/priority options.
    • Configure search-engine pings (e.g., Google, Bing).
  3. Phase 3: Optimization
    • Enable splitting for large sitemaps.
    • Set up automated regeneration (e.g., via Laravel queues or cron).
  4. Phase 4: Monitoring
    • Add health checks for sitemap routes.
    • Log generation errors (e.g., failed pings).

Operational Impact

Maintenance

  • Pros:
    • Centralized Config: Changes to sitemap structure require updates only in config/filament-sitemap.php.
    • Filament UI: Non-technical users can manage sitemap items via admin panel (e.g., toggling lastmod for news articles).
    • MIT License: No vendor lock-in; forkable if maintenance stalls.
  • Cons:
    • Dependency Updates: Requires monitoring spatie/laravel-sitemap and Filament for breaking changes.
    • Plugin-Specific Support: Issues may need community/GitHub issue resolution (low stars = smaller community).
    • Custom Logic: Extensions (e.g., custom sitemap types) require PHP code maintenance.

Support

  • Documentation:
    • README is clear but lacks depth (e.g., no examples for dynamic lastmod or custom sitemap classes).
    • Action Item: Create internal docs for:
      • Troubleshooting common issues (e.g., SitemapNotFoundException).
      • Advanced use cases (e.g., multi-language sitemaps).
  • Community:
    • Limited activity (4 stars, no dependents). Plan for:
      • Proactive issue reporting to maintainer.
      • Forking if critical bugs arise.
  • Vendor Support:
    • No official support; rely on GitHub discussions or Filament’s broader community.

Scaling

  • Performance:
    • Sitemap Splitting: Test with sitemap:generate --split=X to avoid memory issues (default: 500 URLs/sitemap).
    • Database Load: For large datasets, use chunk() in SitemapGenerator or queue generation:
      // app/Console/Commands/GenerateSitemap.php
      public function handle() {
          Sitemap::for('main')->chunk(1000)->write();
      }
      
    • Caching: Enable cache_for in config to reduce regeneration overhead.
  • Horizontal Scaling:
    • Sitemap generation is stateless; works in distributed Laravel setups.
    • Ensure shared storage (e.g., S3) for generated files if using multiple servers.

Failure Modes

Failure Scenario Impact Mitigation
Filament upgrade breaks plugin Sitemap UI/navigation fails Test upgrades in staging; use feature flags for breaking changes.
Search-engine ping fails Delayed SEO indexing Implement retry logic with exponential backoff.
Large sitemap generation OOM Server crashes Use --split flag
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.
cuci/prototurk-sdk-symfony
clementtalleu/easyadmin-markdown-bundle
codeflextech/permission-manager
karnoweb/livewire-datepicker
sayedenam/sayed-dashboard
milito/query-filter
apiboxsym/user-bundle
apiboxsym/health-check-bundle
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager