ModifyUrlForCanonicalTagEvent
With the PSR-14 event TYPO3CMSSeo
the URL for the
href attribute of the canonical tag can be altered or
emptied.
This event is being dispatched after the standard functionality has been
executed, such as fetching the URL from the page properties. Effectively,
this also means that
get might already return a non-empty
string.
Note
The event is even dispatched in case the canonical tag generation is
disabled via TypoScript
(disableCanonical) or via
the page property
no_. If disabled, the
\TYPO3\ is
thrown. The exception is caught and transferred to the event, allowing
listeners to determine whether the generation is disabled, using the
get method, which either
returns the exception with the corresponding reason or
null.
Example
Changing the host of the current request and setting it as canonical:
<?php
declare(strict_types=1);
namespace MyVendor\MyExtension\Seo\EventListener;
use TYPO3\CMS\Core\Attribute\AsEventListener;
use TYPO3\CMS\Seo\Event\ModifyUrlForCanonicalTagEvent;
use TYPO3\CMS\Seo\Exception\CanonicalGenerationDisabledException;
#[AsEventListener(
identifier: 'my-extension/modify-url-for-canonical-tag',
)]
final readonly class MyEventListener
{
public function __invoke(ModifyUrlForCanonicalTagEvent $event): void
{
if ($event->getCanonicalGenerationDisabledException() instanceof CanonicalGenerationDisabledException) {
return;
}
// Only set the canonical in our example when the tag is not disabled
// via TypoScript or via "no_index" in the page properties.
$currentUrl = $event->getRequest()->getUri();
$newCanonical = $currentUrl->withHost('example.com');
$event->setUrl((string)$newCanonical);
}
}