Each view of a TYPO3 page is tracked by default. Requests can be ignored by configuring a rule that has to match the current request.
All configuration happens via Dependency injection inside of
Services.yaml of your Sitepackage.
Whenever a pageview is tracked, a new record is created. The record can be viewed via TYPO3 list module. That way all collected information can be checked.
Let us examine an concrete example:
services: _defaults: autowire: true autoconfigure: true public: false DanielSiepmann\Tracking\Middleware\Pageview: public: true arguments: $rule: > not (context.getAspect("backend.user").isLoggedIn()) and not (context.getAspect("frontend.preview").isPreview()) and traverse(request.getHeader("User-Agent"), '0') and not (request.getHeader("User-Agent") matches "/^TYPO3|TYPO3 linkvalidator/") and not (request.getHeader("User-Agent") matches "/^Codeception Testing/") and not (request.getHeader("User-Agent") matches "/Wget|curl|Go-http-client/") and not (request.getHeader("User-Agent") matches "/bot|spider|Slurp|Sogou|NextCloud-News|Feedly|XING FeedReader|SEOkicks|Seekport Crawler|ia_archiver|TrendsmapResolver|Nuzzel/") and not (request.getHeader("User-Agent") matches "/mattermost|Slackbot|WhatsApp/")
The first paragraph will not be explained, check out Configuration instead.
The second paragraph is where the tracking is configured.
The PHP class
DanielSiepmann\Tracking\Middleware\Pageview is registered as PHP middleware and will actually track the request.
Therefore this class is configured.
The only interesting argument to configure is
which is a Symfony Expression.
The same is used by TYPO3 for TypoScript conditions and is not explained here.
This rule is evaluated to either
true means that the current request should be tracked.
The current request is available as
TYPO3\CMS\Core\Context\Context is available via
That way it is possible to check all kind of information like frontend user, backend user or cookies and parameters,
as well as request header.
Check PSR-7: HTTP message interfaces as well as Context API and Aspects.
The above example blocks tracking for requests with logged in backend user, as well as specific user agents like bots, TYPO3 itself and other systems.
The extension does not provide any widgets, but providers for widgets of EXT:dashboard. That way widgets of EXT:dashboard can be combined with all providers of this extension.
The concepts are not documented here, check t3dashboard:start instead.