diff --git a/changelog/entries/unreleased/bug/3434_fix_automatically_upd.json b/changelog/entries/unreleased/bug/3434_fix_automatically_upd.json
new file mode 100644
index 000000000..376495454
--- /dev/null
+++ b/changelog/entries/unreleased/bug/3434_fix_automatically_upd.json
@@ -0,0 +1,7 @@
+{
+    "type": "bug",
+    "message": "[Builder] Fix updating of page parameters when URL query parameters change.",
+    "issue_number": 3434,
+    "bullet_points": [],
+    "created_at": "2025-02-19"
+}
diff --git a/web-frontend/modules/builder/dataProviderTypes.js b/web-frontend/modules/builder/dataProviderTypes.js
index 6840709f8..7cea464d4 100644
--- a/web-frontend/modules/builder/dataProviderTypes.js
+++ b/web-frontend/modules/builder/dataProviderTypes.js
@@ -313,10 +313,18 @@ export class PageParameterDataProviderType extends DataProviderType {
           const validators = queryParamNames.includes(name)
             ? QUERY_PARAM_TYPE_VALIDATION_FUNCTIONS
             : PAGE_PARAM_TYPE_VALIDATION_FUNCTIONS
+          let value
+          try {
+            value = validators[type](pageParamsValue[name])
+          } catch {
+            // Skip setting the parameter if the user-provided value
+            // doesn't pass our parameter `type` validation.
+            return null
+          }
           return this.app.store.dispatch('pageParameter/setParameter', {
             page,
             name,
-            value: validators[type](pageParamsValue[name]),
+            value,
           })
         })
       )
diff --git a/web-frontend/modules/builder/pages/publicPage.vue b/web-frontend/modules/builder/pages/publicPage.vue
index 2dc862d1e..b0ac087d3 100644
--- a/web-frontend/modules/builder/pages/publicPage.vue
+++ b/web-frontend/modules/builder/pages/publicPage.vue
@@ -27,6 +27,7 @@ import {
   userSourceCookieTokenName,
   setToken,
 } from '@baserow/modules/core/utils/auth'
+import { QUERY_PARAM_TYPE_VALIDATION_FUNCTIONS } from '@baserow/modules/builder/enums'
 
 const logOffAndReturnToLogin = async ({ builder, store, redirect }) => {
   await store.dispatch('userSourceUser/logoff', {
@@ -341,6 +342,34 @@ export default {
     },
   },
   watch: {
+    '$route.query': {
+      immediate: true,
+      deep: true,
+      handler(newQuery) {
+        // when query string changed due to user action,
+        // update the page's query parameters in the store
+        Promise.all(
+          this.currentPage.query_params.map(({ name, type }) => {
+            if (!newQuery[name]) return null
+            let value
+            try {
+              value = QUERY_PARAM_TYPE_VALIDATION_FUNCTIONS[type](
+                newQuery[name]
+              )
+            } catch {
+              // Skip setting the parameter if the user-provided value
+              // doesn't pass our parameter `type` validation.
+              return null
+            }
+            return this.$store.dispatch('pageParameter/setParameter', {
+              page: this.currentPage,
+              name,
+              value,
+            })
+          })
+        )
+      },
+    },
     dispatchContext: {
       deep: true,
       /**