nowo-tech/seo-kit-bundle

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.

Maintainers

Package info

github.com/nowo-tech/SeoKitBundle

Documentation

Type:symfony-bundle

pkg:composer/nowo-tech/seo-kit-bundle

Transparency log

Statistics

Installs: 2

Dependents: 0

Suggesters: 1

Stars: 0

Open Issues: 0

v1.4.2 2026-08-19 16:27 UTC

This package is auto-updated.

Last update: 2026-08-20 15:08:22 UTC


README

CI Packagist Version Packagist Downloads License PHP Symfony Coverage

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.

FrankenPHP Friendly Worker Mode

This bundle is FrankenPHP worker mode friendly.

Table of contents

Features

  • 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.xml and /robots.txt served by Symfony
  • Runtime overridesSeoRuntime for 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.devphp_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).

Installation

composer require nowo-tech/seo-kit-bundle

Register the bundle in config/bundles.php (Flex does this automatically):

Nowo\SeoKitBundle\SeoKitBundle::class => ['all' => true],

Add to your base layout:

{{ nowo_seo_head() }}

Requirements

  • PHP >= 8.2, < 8.6
  • Symfony >= 7.0 || >= 8.0

Documentation

Additional documentation

Version information

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

Demos

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.

Tests and coverage

make test
make test-coverage
  • Tests: PHPUnit (unit)
  • PHP: 100% lines (make test-coverage)

License

MIT — see LICENSE.