How to change canonical URL in drupal 8 & 9
Code snippet that can be used to change canonical URL in drupal 8 & 9.
/**
* @param array $page
*/
function MODULENAME_page_attachments_alter(array &$page)
{
$route = \Drupal::routeMatch()->getRouteObject();
if ($route) {
$view_id = $route->getDefault('view_id');
if (!empty($view_id)) {
if ($view_id == 'news') {
// example www.example.com/news?category=drupal
$link_url = \Drupal::service('path.current')->getPath();
$og_link = array(
'#tag' => 'link',
'#attributes' => array(
'rel' => 'canonical',
'canonical_url' => $link_url,
),
);
$page['#attached']['html_head']['canonical_url'] = [$og_link, 'canonical_url'];
}
}
}
}