diff --git a/drupal_cms_olivero/config/optional/block.block.drupal_cms_olivero_page_title.yml b/drupal_cms_olivero/config/optional/block.block.drupal_cms_olivero_page_title.yml
index 94ce4428f7232c7464202203fe9f99074062fa72..0e5bc0bfa70df69b1eef53f4afadd060853c180a 100644
--- a/drupal_cms_olivero/config/optional/block.block.drupal_cms_olivero_page_title.yml
+++ b/drupal_cms_olivero/config/optional/block.block.drupal_cms_olivero_page_title.yml
@@ -14,8 +14,4 @@ settings:
   label: 'Page title'
   label_display: '0'
   provider: core
-visibility:
-  request_path:
-    id: request_path
-    negate: true
-    pages: '<front>'
+visibility: {  }
diff --git a/drupal_cms_olivero/css/base/utility.css b/drupal_cms_olivero/css/base/utility.css
new file mode 100644
index 0000000000000000000000000000000000000000..d459517a38ed6d6ac3e0c5c2e3deaac50d0633f3
--- /dev/null
+++ b/drupal_cms_olivero/css/base/utility.css
@@ -0,0 +1,8 @@
+/*
+ * Utility CSS classes.
+ */
+
+.visually-hidden {
+  /* Necessary to override Olivero's specificity. */
+  width: 1px !important;
+}
diff --git a/drupal_cms_olivero/drupal_cms_olivero.libraries.yml b/drupal_cms_olivero/drupal_cms_olivero.libraries.yml
index 61d9a24783730e58c38defc9237b2eabcd04b001..b17685a09985d6ab0cd88f72c1779b07a791a493 100644
--- a/drupal_cms_olivero/drupal_cms_olivero.libraries.yml
+++ b/drupal_cms_olivero/drupal_cms_olivero.libraries.yml
@@ -4,6 +4,7 @@ global-styling:
       css/base/base.css: {}
       css/base/buttons.css: {}
       css/base/typography.css: {}
+      css/base/utility.css: {}
     component:
       css/components/form.css: {}
 views:
diff --git a/drupal_cms_olivero/drupal_cms_olivero.theme b/drupal_cms_olivero/drupal_cms_olivero.theme
index 2d6beccebcaae24810394d5232a1e9c0103f8298..8e56847a11a7925fcceea26912bf0d9b16b416a0 100644
--- a/drupal_cms_olivero/drupal_cms_olivero.theme
+++ b/drupal_cms_olivero/drupal_cms_olivero.theme
@@ -78,4 +78,10 @@ function drupal_cms_olivero_preprocess_block(&$variables): void {
   if (str_replace($wide_content, '', strtolower($plugin_id)) !== strtolower($plugin_id)) {
     $variables['attributes']['class'][] = 'wide-content';
   }
+
+  // Visually hide the page title on home
+  $is_front = \Drupal::service('path.matcher')->isFrontPage();
+  if ($is_front && $plugin_id === 'page_title_block') {
+    $variables['attributes']['class'][] = 'visually-hidden';
+  }
 }