⭐ Found this useful? Give it a star on GitHub! It helps us maintain and improve the project.
Symfony SEO kit: multilingual static routes, slug SEO layers (defaults / pages / slug patterns / specific slugs), head tags, hreflang, sitemap and robots for FrankenPHP, php-fpm and Nginx.
This bundle is FrankenPHP worker mode friendly.
- Features
- Installation
- Requirements
- Documentation
- Version information
- Demos
- Tests and coverage
- License
- ✅ Hierarchical SEO config — defaults → slug_routes → pages → slugs → attribute → runtime
- ✅ Twig head helper —
{{ nowo_seo_head() }}with Open Graph, Twitter, JSON-LD, canonical, hreflang - ✅ Multilingual paths — locale-specific paths and translated slugs
- ✅ Sitemap & robots —
/sitemap.xmland/robots.txtserved by Symfony - ✅ Runtime overrides —
SeoRuntimefor dynamic titles from controllers - ✅ PHP 8 attribute —
#[Seo]on controllers - ✅ FrankenPHP-ready demo — single-container Symfony 8 demo
FrankenPHP: Demos use a single PHP service (FrankenPHP, no nginx). With APP_ENV=dev (default), the Docker entrypoint swaps in Caddyfile.dev — php_server without workers for comfortable local development. The baked-in production Caddyfile can use php_server { worker … }; see docs/DEMO-FRANKENPHP.md. Access the demo at http://localhost:PORT (see demo/README.md and .env.example).
composer require nowo-tech/seo-kit-bundleRegister the bundle in config/bundles.php (Flex does this automatically):
Nowo\SeoKitBundle\SeoKitBundle::class => ['all' => true],Add to your base layout:
{{ nowo_seo_head() }}- PHP >= 8.2, < 8.6
- Symfony >= 7.0 || >= 8.0
- Installation
- Configuration
- Usage
- Contributing
- Code of Conduct
- Changelog
- Upgrading
- Release
- Security
- Engram
- Spec-driven development
- GitHub Spec Kit
- Demo with FrankenPHP (includes worker mode)
- Server cookbook (Nginx, php-fpm, FrankenPHP)
- GitHub Actions CI requirements
| Version | PHP | Symfony | Status |
|---|---|---|---|
| 1.4.x | >= 8.2 | 7.0 – 8.1+ | Stable |
| 1.3.x | >= 8.2 | 7.0 – 8.1+ | Stable |
| 1.2.x | >= 8.2 | 7.0 – 8.1+ | Stable |
| 1.1.x | >= 8.2 | 7.0 – 8.1+ | Stable |
| 1.0.x | >= 8.2 | 7.0 – 8.1+ | Stable |
make -C demo up-symfony8 # http://localhost:8050 (default PORT)Demo extras: locale switch, / default-locale home, SEO Admin at /admin/seo. See docs/DEMO-FRANKENPHP.md.
make test
make test-coverage- Tests: PHPUnit (unit)
- PHP: 100% lines (
make test-coverage)
MIT — see LICENSE.
