PHPackages                             zhortein/seo-tracking-bundle - 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. zhortein/seo-tracking-bundle

ActiveSymfony-bundle[Utility &amp; Helpers](/categories/utility)

zhortein/seo-tracking-bundle
============================

Privacy-conscious page, campaign and engagement tracking for Symfony applications.

1.7.2(1w ago)1330MITPHPPHP &gt;=8.3CI passing

Since Jun 30Pushed 3w agoCompare

[ Source](https://github.com/Zhortein/seo-tracking-bundle)[ Packagist](https://packagist.org/packages/zhortein/seo-tracking-bundle)[ Docs](https://www.david-renard.fr)[ RSS](/packages/zhortein-seo-tracking-bundle/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (10)Dependencies (64)Versions (23)Used By (0)

SEO Tracking Bundle
===================

[](#seo-tracking-bundle)

A privacy-conscious Symfony bundle for page-view, campaign and engagement tracking. It provides a tested Stimulus lifecycle, portable Doctrine storage, typed statistics and journey APIs, safe CSV exports, and overrideable Twig presentation.

[![Latest Version on Packagist](https://camo.githubusercontent.com/ee44113a3c24f7240e6ae731bec5b2cdfcb4075cb153205bbee6a0393984d8d8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7a686f727465696e2f73656f2d747261636b696e672d62756e646c652e737667)](https://packagist.org/packages/zhortein/seo-tracking-bundle)[![Total Downloads](https://camo.githubusercontent.com/a583f9f2c2f7fab0cf0992c33a72af6c0f84a43d63df810c8b481fd1b025fbb3/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f7a686f727465696e2f73656f2d747261636b696e672d62756e646c652e737667)](https://packagist.org/packages/zhortein/seo-tracking-bundle)[![License](https://camo.githubusercontent.com/e19c10a1166c672840366a1660ad28bd4ee86f71b9daf219563e4cedd2a38a88/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f7a686f727465696e2f73656f2d747261636b696e672d62756e646c652e737667)](https://github.com/Zhortein/seo-tracking-bundle/blob/main/LICENSE)

What it provides
----------------

[](#what-it-provides)

- asynchronous page-view and exit tracking for classic, Turbo and visibility-change navigation;
- canonical URL and UTM grouping with portable behavior on supported databases;
- IPv4 and IPv6 anonymization with configurable prefixes;
- optional consent gates, endpoint rate limiting and invalid-request reporting;
- explainable bot classification without presenting it as visitor identity;
- bounded, application-defined scalar dimensions;
- typed statistics, journey fragments and observation pagination;
- opt-in PSR-6 report caching;
- lazy, spreadsheet-safe CSV exports;
- Bootstrap 5 and dependency-free semantic HTML5 statistics themes;
- replaceable entities, factories, data sources, policies and templates.

The bundle deliberately does not claim unique visitors, devices or stable sessions. It creates no tracking cookie or persistent visitor identifier. Collected URLs, User-Agent values, anonymized network data and application-defined dimensions can still require a legal basis, access controls, retention rules and privacy information in the host application.

Compatibility
-------------

[](#compatibility)

LayerSupported versionsPHP8.3+Symfony and AssetMapper7.3, 7.4 and 8.xDoctrine DBAL3.x and 4.xDoctrineBundle2.15+ and 3.2+Doctrine ORM3.3+ and 4.xStimulus3.xCI exercises PHP 8.3–8.5, Symfony 7.3–8.1, Node 22/24, SQLite, PostgreSQL 16 and MySQL 8.4. Other Doctrine platforms may work through the portable abstractions, but they are not part of the published CI guarantee.

Quick start
-----------

[](#quick-start)

Install the bundle:

```
composer require zhortein/seo-tracking-bundle
```

Generate, review and apply the Doctrine migration:

```
php bin/console make:migration
php bin/console doctrine:migrations:migrate
```

Enable tracking once in the application layout:

```

    {# application layout #}

```

Compile production assets:

```
php bin/console asset-map:compile
```

The [complete quick start](docs/quick-start.md) covers bundle and route registration, Stimulus verification, canonical URLs, safe dimensions, the first stored hit and a secured statistics page.

Minimal examples
----------------

[](#minimal-examples)

Track an article using its canonical URL and controlled business dimensions:

```

```

Render an all-time statistics report using the configured theme:

```
{{ seo_tracking_statistics() }}
```

Build a filtered report in PHP:

```
use Zhortein\SeoTrackingBundle\Statistics\Filter\StatisticsFilter;
use Zhortein\SeoTrackingBundle\Statistics\StatisticsProviderInterface;

$filter = new StatisticsFilter(
    from: new \DateTimeImmutable('-30 days'),
    timezone: new \DateTimeZone('Europe/Paris'),
    bot: false,
    pageType: 'article',
);

$report = $statistics->report($filter, limit: 20);
```

Statistics and row-level exports contain operational information. Expose them only through application routes protected by appropriate authorization. Ready-to-adapt controllers and templates are available in the [application cookbook](docs/cookbook.md).

Documentation
-------------

[](#documentation)

Start with the [documentation index](docs/index.md).

NeedGuideInstall and record the first hit[Quick start](docs/quick-start.md)See every configuration option and default[Configuration reference](docs/configuration.md)Copy common application integrations[Cookbook](docs/cookbook.md)Understand stored fields and grouping[Data model](docs/data-model.md)Replace the bundled entities[Custom entities](docs/custom-entities.md)Build reports, pagination, cache and exports[Statistics API](docs/statistics.md)Understand privacy and consent boundaries[Consent](docs/consent.md) and [retention](docs/retention.md)Upgrade an existing application[Upgrade guides](docs/index.md#upgrades-and-releases)Upgrading
---------

[](#upgrading)

The latest release is 1.7:

```
composer require zhortein/seo-tracking-bundle:^1.7
php bin/console asset-map:compile
```

Version 1.7 requires no Doctrine migration and keeps report caching disabled by default. Applications upgrading from an older release must still apply the schema changes introduced in 1.3 and 1.6 where applicable. Follow the [1.7 upgrade and rollback guide](docs/upgrade-1.7.md) and the [changelog](CHANGELOG.md).

Contributing
------------

[](#contributing)

Bug reports and proposals are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) for the `develop`-based workflow, local checks and documentation requirements. Exploratory work that is not attached to a milestone remains in [FEATURE\_IDEAS.md](FEATURE_IDEAS.md).

License
-------

[](#license)

This bundle is available under the [MIT License](LICENSE).

###  Health Score

50

—

FairBetter than 95% of packages

Maintenance96

Actively maintained with recent releases

Popularity19

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity62

Established project with proven stability

 Bus Factor1

Top contributor holds 93.9% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~20 days

Recently: every ~2 days

Total

21

Last Release

13d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/82563246?v=4)[David Renard](/maintainers/Zhortein)[@Zhortein](https://github.com/Zhortein)

---

Top Contributors

[![Zhortein](https://avatars.githubusercontent.com/u/82563246?v=4)](https://github.com/Zhortein "Zhortein (154 commits)")[![PEPOUZIN](https://avatars.githubusercontent.com/u/162482502?v=4)](https://github.com/PEPOUZIN "PEPOUZIN (10 commits)")

---

Tags

symfonybundlesymfony-uxtrackingstatsseostatisticsUTMtrack

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/zhortein-seo-tracking-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/zhortein-seo-tracking-bundle/health.svg)](https://phpackages.com/packages/zhortein-seo-tracking-bundle)
```

###  Alternatives

[easycorp/easyadmin-bundle

Admin generator for Symfony applications

4.3k18.3M430](/packages/easycorp-easyadmin-bundle)[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.5k6.0M777](/packages/sylius-sylius)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.4M235](/packages/sulu-sulu)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.8M672](/packages/shopware-core)[contao/core-bundle

Contao Open Source CMS

1301.7M3.1k](/packages/contao-core-bundle)[pimcore/pimcore

Content &amp; Product Management Framework (CMS/PIM/E-Commerce)

3.8k3.9M535](/packages/pimcore-pimcore)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
