ModifyUrlForCanonicalTagEvent¶
With the PSR-14 event \TYPO3\CMS\Seo\Event\ModifyUrlForCanonicalTagEvent
the URL for the href
attribute of the canonical tag can be altered or
emptied.
New in version 12.4.9
The methods getRequest()
and getPage()
have been added.
Changed in version 13.0
The 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 getUrl()
might already return a non-empty
string.
Note
Changed in version 13.0
The event is even dispatched in case the canonical tag generation is
disabled via TypoScript
(disableCanonical) or via
the page property no_index
. If disabled, the
\TYPO3\CMS\Seo\Exception\CanonicalGenerationDisabledException
is
thrown. The exception is caught and transferred to the event, allowing
listeners to determine whether the generation is disabled, using the
getCanonicalGenerationDisabledException()
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);
}
}
New in version 13.0
The PHP attribute \TYPO3\CMS\Core\Attribute\AsEventListener
has been
introduced to tag a PHP class as an event listener. Alternatively, or if you
need to be compatible with older TYPO3 versions, you can also register an
event listener via the Configuration/Services.yaml
file. Switch to
an older version of this page for an example or have a look at the section
Implementing an event listener in your extension.
API¶
- class \TYPO3\CMS\Seo\Event\ ModifyUrlForCanonicalTagEvent
-
PSR-14 event to alter (or empty) a canonical URL for the href="" attribute of a canonical URL.
- getUrl ( )
-
- returntype
-
string
- setUrl ( string $url)
-
- param string $url
-
the url
- getRequest ( )
-
- returntype
-
Psr\Http\Message\ServerRequestInterface
- getPage ( )
-
- returntype
-
TYPO3\CMS\Core\Domain\Page
- getCanonicalGenerationDisabledException ( )
-
- returntype
-
TYPO3\CMS\Seo\Exception\CanonicalGenerationDisabledException