How do I alter the page title after a controller sets the title?
Yes, #title from the controller overrides the title set in the route. There doesn't seem to be another override to override #title.

Though you could try to alter the controller output in a KernelEvents::VIEW with a priority higher than 0 like this:

$result = $event-&gt;getControllerResult();
// change the controller output
$event-&gt;setControllerResult($result);




Metatag

Working on a project I found out, that the metatag module in default configuration gets the title with the token [current-page:title], which retrieves the title from the route, ignoring #title set in the controller. Most times this would be considered as an unwanted side effect, but in your case you get the title you want from the route title callback in HTML &lt;title&gt; and only have to take care of the page title block, which should be no problem in a preprocess hook.