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

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

coderden/sitemap-generator
==========================

Sitemap generator with multi-file support and sitemap index

1.0.0(5mo ago)02MITPHPPHP ^8.1

Since Jan 20Pushed 5mo agoCompare

[ Source](https://github.com/dnsinyukov/sitemap-generator)[ Packagist](https://packagist.org/packages/coderden/sitemap-generator)[ RSS](/packages/coderden-sitemap-generator/feed)WikiDiscussions main Synced today

READMEChangelog (1)DependenciesVersions (2)Used By (0)

Sitemap Generator
=================

[](#sitemap-generator)

[![PHP Version](https://camo.githubusercontent.com/7663c9d53dc13cedaf0660a8745a7e77d2dd711257f36aa86ebce12a0600ef42/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344382e312d626c75652e737667)](https://packagist.org/packages/coderden/sitemap-generator)[![License](https://camo.githubusercontent.com/8bb50fd2278f18fc326bf71f6e88ca8f884f72f179d3e555e20ed30157190d0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e2e737667)](LICENSE)

A lightweight, framework-agnostic PHP package for generating sitemaps with multi-file support and sitemap index generation.

Features
--------

[](#features)

- ✅ Generate single or multiple sitemap files
- ✅ Automatic sitemap index creation for large sites
- ✅ Create sitemaps from arrays or objects
- ✅ Framework-agnostic (works with any PHP project)
- ✅ No external dependencies
- ✅ URL validation and sanitization
- ✅ Configurable URL limits per file
- ✅ Support for all sitemap attributes (priority, changefreq, lastmod)

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

[](#installation)

```
composer require coderden/sitemap-generator
```

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

[](#requirements)

- PHP 8.1 or higher
- SimpleXML extension
- DOM extension
- libxml extension

Quick Start
-----------

[](#quick-start)

### Basic Usage

[](#basic-usage)

```
// Initialize generator
$generator = new SitemapGenerator('/path/to/public', 'https://example.com');

// Create URL with attributes
$url1 = new Url('https://example.com/page1');
$url1->setLastModification(new DateTime())
     ->setChangeFrequency('weekly')
     ->setPriority(0.8);

$url2 = new Url('https://example.com/page2');
$url2->setLastModification(new DateTime('-1 week'))
     ->setChangeFrequency('daily')
     ->setPriority(1.0);

// Add URLs to generator
$generator->addUrl($url1)
          ->addUrl($url2);

// Generate sitemap
$generatedFiles = $generator->generate();

echo "Generated files: " . implode(', ', $generatedFiles);
```

### Generate from Array

[](#generate-from-array)

```
$urls = [
    [
        'loc' => 'https://example.com/page1',
        'lastmod' => '2024-01-15',
        'changefreq' => 'weekly',
        'priority' => 0.8,
    ],
    [
        'loc' => 'https://example.com/page2',
        'lastmod' => new DateTime(),
        'priority' => 1.0,
    ],
];

$generator = SitemapGenerator::createFromArray(
    $urls,
    '/path/to/public',
    'https://example.com',
    1000 // URLs per file (optional, default: 50000)
);

$files = $generator->generate();
```

Advanced Usage
--------------

[](#advanced-usage)

### Multi-File Sitemap with Index

[](#multi-file-sitemap-with-index)

When you have more URLs than the specified limit, the package automatically splits them into multiple files and creates a sitemap index:

```
$generator = new SitemapGenerator('/path/to/public', 'https://example.com');

// Set custom file name prefix
$generator->setFileNamePrefix('my-sitemap');

// Set custom limit (default: 50000)
$generator = new SitemapGenerator('/path/to/public', 'https://example.com', 1000);

// Add 1500 URLs
for ($i = 1; $i addUrl($url);
}

// Generates:
// - my-sitemap-1.xml (1000 URLs)
// - my-sitemap-2.xml (500 URLs)
// - my-sitemap-index.xml (links to both files)
$files = $generator->generate();
```

### Sitemap Index Generator (Manual)

[](#sitemap-index-generator-manual)

For more control over sitemap index creation:

```
$indexGenerator = new SitemapIndexGenerator('/path/to/public', 'https://example.com');

$indexGenerator->addSitemap('sitemap-pages.xml', new DateTime())
               ->addSitemap('sitemap-posts.xml', new DateTime('-1 day'))
               ->addSitemap('https://cdn.example.com/sitemap-images.xml', new DateTime());

$indexFile = $indexGenerator->generate('custom-index.xml');
```

Configuration Options
---------------------

[](#configuration-options)

OptionDescriptionDefault`maxUrlsPerFile`Maximum URLs per sitemap file50000`fileNamePrefix`Prefix for generated sitemap files`sitemap``outputDirectory`Directory to save sitemap filesRequired`baseUrl`Base URL for sitemap linksRequiredIntegration Examples
--------------------

[](#integration-examples)

### With Laravel (Optional)

[](#with-laravel-optional)

```
namespace App\Services;

use Coderden\SitemapGenerator\SitemapGenerator;
use Coderden\SitemapGenerator\Url;
use App\Models\Post;
use App\Models\Page;

class SitemapService
{
    public function generate()
    {
        $generator = new SitemapGenerator(
            public_path(),
            config('app.url'),
            1000
        );

        // Add static pages
        $generator->addUrl(
            (new Url(route('home')))
                ->setLastModification(now())
                ->setChangeFrequency('daily')
                ->setPriority(1.0)
        );

        // Add dynamic content
        Post::published()->chunk(100, function ($posts) use ($generator) {
            foreach ($posts as $post) {
                $generator->addUrl(
                    (new Url(route('posts.show', $post)))
                        ->setLastModification($post->updated_at)
                        ->setChangeFrequency('weekly')
                        ->setPriority(0.7)
                );
            }
        });

        return $generator->generate();
    }
}
```

### With WordPress

[](#with-wordpress)

```
