diff --git a/core/themes/olivero/js/search.es6.js b/core/themes/olivero/js/search.es6.js
index 0adff6441558dfc25a6705f3437252822e7401eb..4b01cb25842be3ba9e05157f2a81fac515a8533d 100644
--- a/core/themes/olivero/js/search.es6.js
+++ b/core/themes/olivero/js/search.es6.js
@@ -31,6 +31,12 @@
 
   Drupal.olivero.toggleSearchVisibility = toggleSearchVisibility;
 
+  document.addEventListener('keyup', (e) => {
+    if (e.key === 'Escape' || e.key === 'Esc') {
+      toggleSearchVisibility(false);
+    }
+  });
+
   document.addEventListener('click', (e) => {
     if (
       e.target.matches(
diff --git a/core/themes/olivero/js/search.js b/core/themes/olivero/js/search.js
index 9ad55f47d098b444140293cb24df6b39fcfabc59..d4668f5e7add1fd024621efb721c3af56be50efd 100644
--- a/core/themes/olivero/js/search.js
+++ b/core/themes/olivero/js/search.js
@@ -38,6 +38,11 @@
   }
 
   Drupal.olivero.toggleSearchVisibility = toggleSearchVisibility;
+  document.addEventListener('keyup', function (e) {
+    if (e.key === 'Escape' || e.key === 'Esc') {
+      toggleSearchVisibility(false);
+    }
+  });
   document.addEventListener('click', function (e) {
     if (e.target.matches('.header-nav__search-button, .header-nav__search-button *')) {
       toggleSearchVisibility(!searchIsVisible());