Crawler e gerador de sitemapPHP Crawler
Rastreie. Analise. Gere.
Crawler em PHP que percorre um site em paralelo e gera sitemaps XML prontos para produção, respeitando canonical, noindex e nofollow.


- Ano
- 2026
- Papel
- Desenho da API, implementação, benchmark e página de demonstração.
- Stack
- PHP 8.4
- cURL multi
- DOM
- XMLWriter
O problema
Muitos sites não geram o próprio sitemap, e as ferramentas online limitam o número de páginas ou não se encaixam em um processo automatizado de deploy.
Em números
- 50 milURLs por arquivo antes da rotação
- 6eventos ao longo do rastreamento
- 4peças substituíveis: HTTP, logger, analisador e escritor
- 3regras de indexação respeitadas: canonical, noindex e nofollow
O que foi construído
Pool de workers com curl_multi para buscar várias páginas ao mesmo tempo, com fallback sequencial.
Normalização de URLs: resolve caminhos relativos, remove fragmentos e processa apenas respostas text/html.
Respeita meta robots (noindex, nofollow) e URLs canônicas, e pode ficar restrito ao mesmo host e protocolo.
Escritor rotativo que abre um novo arquivo a cada 50 mil URLs e gera o sitemap-index.xml.
Eventos em cada etapa do rastreamento e cliente HTTP, logger e analisador de página substituíveis.
Na prática
<?php
use Tonsoo\PhpCrawler\Extensions\SitemapExtension;
use Tonsoo\PhpCrawler\Sitemap\SitemapGenerator;
use Tonsoo\PhpCrawler\Sitemap\Writers\RotatingSitemapWriter;
crawler()
->multithreaded(workers: 8)
->preserveHost()
->maxPages(1000)
->extension(new SitemapExtension(
generator: new SitemapGenerator(
writer: new RotatingSitemapWriter(directory: __DIR__ . '/sitemap'),
),
))
->start('https://example.com');<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap><loc>https://example.com/sitemap-1.xml</loc></sitemap>
<sitemap><loc>https://example.com/sitemap-2.xml</loc></sitemap>
</sitemapindex>Telas

Documentação com o exemplo de uso ao lado da explicação.

Demonstração: informe uma URL, ajuste as regras e gere o sitemap.
Resultado
Começou em 2024 como um script e foi reescrito em 2026 como biblioteca extensível, pronta para rodar em CI ou em uma tarefa agendada.