diff --git a/frontend/src/metabase/query_builder/actions/navigation.js b/frontend/src/metabase/query_builder/actions/navigation.js
index f39541ede84d73be110bc07d64e0469673e3d085..58f61fa0bc8f0e062acec8618785447508820ec8 100644
--- a/frontend/src/metabase/query_builder/actions/navigation.js
+++ b/frontend/src/metabase/query_builder/actions/navigation.js
@@ -199,10 +199,16 @@ export const updateUrl = createThunkAction(
 
       // this is necessary because we can't get the state from history.state
       dispatch(setCurrentState(newState));
-      if (replaceState) {
-        dispatch(replace(locationDescriptor));
-      } else {
-        dispatch(push(locationDescriptor));
+
+      try {
+        if (replaceState) {
+          dispatch(replace(locationDescriptor));
+        } else {
+          dispatch(push(locationDescriptor));
+        }
+      } catch (e) {
+        // saving the location state can exceed the session storage quota (metabase#25312)
+        console.warn(e);
       }
     },
 );