Drupal - How to override page title by content type

As mentioned by Ivan Jaros You can use hook_preprocess_page_title.

You just have to load the node from the route first, to get some context.

function yourtheme_preprocess_page_title(&$variables) {

  // Load the node entity from current route
  if ($node = \Drupal::routeMatch()->getParameter('node')) {

    // Load the label of the bundle
    $bundle_label = \Drupal::entityTypeManager()

    // Set the page title
    $variables['title'] = $bundle_label;

If you just want to use this with certain content types, you can use $node->bundle() to get the machine-readable name and check against it.

Linus got it right for the preprocess function, but I'd personally use this to get the current node (as it's shorter and seem easier...)

$node = \Drupal::request()->attributes->get('node')

Then to access the node title, use :

$title = $node->getTitle()

or to access another custom field (with a value) :


Actually, access everything the way you'd access these datas in a regular node preprocess function :)

Use the Metatag module it is D8-ready already and supports what you need.