In your sample you were comparing the internal path (/node/123) with a path alias pattern (/topic/*). This won't work. You need to do the matching with the path alias instead. /** * Implements template_preprocess_html(). */ function MYTHEME_preprocess_html(&$variables) { $current_path = \Drupal::service('path.current')->getPath(); $current_alias = \Drupal::service('path.alias_manager')->getAliasByPath($current_path); if (\Drupal::service('path.matcher')->matchPath($current_alias, '/topic/*')) { $variables['attributes']['class'][] = 'is-topic'; } } You could achieve the same by exploding the current request URI and then see if the first key is `topic`. /** * Implements template_preprocess_html(). */ function MYTHEME_preprocess_html(&$variables) { $request_uri = ltrim(\Drupal::request()->getRequestUri(), '/'); $args = explode('/', $request_uri); if (isset($args[0]) && $args[0] === 'topic') { $variables['attributes']['class'][] = 'is-topic'; } }