diff --git a/frontend/src/metabase/admin/settings/containers/RedirectToAllowedSettings.jsx b/frontend/src/metabase/admin/settings/containers/RedirectToAllowedSettings.jsx
index 22daceec3d0dc5c0485a1fe6f81fe3fcb4fe864f..a5d836cc909663861d382e39cd1cd4ee3d0190a7 100644
--- a/frontend/src/metabase/admin/settings/containers/RedirectToAllowedSettings.jsx
+++ b/frontend/src/metabase/admin/settings/containers/RedirectToAllowedSettings.jsx
@@ -1,5 +1,5 @@
 import { connect } from "react-redux";
-import { push } from "react-router-redux";
+import { push, replace } from "react-router-redux";
 import { getUser } from "metabase/selectors/user";
 import { getAllowedMenuItems } from "metabase/nav/utils";
 
@@ -10,15 +10,16 @@ const mapStateToProps = (state, props) => ({
 
 const mapDispatchToProps = {
   push,
+  replace,
 };
 
-const RedirectToAllowedSettings = ({ user, push }) => {
+const RedirectToAllowedSettings = ({ user, replace }) => {
   const allowedNavItems = getAllowedMenuItems(user);
 
   if (allowedNavItems.length === 0) {
-    push("/unauthorized");
+    replace("/unauthorized");
   } else {
-    push(allowedNavItems[0].path);
+    replace(allowedNavItems[0].path);
   }
 
   return null;
diff --git a/frontend/src/metabase/admin/utils.js b/frontend/src/metabase/admin/utils.js
index 21e7a3fb0fabaf0e7683417befd11a72096140bc..91435ae2f753ca9d7c6877d640331f10e090e9ba 100644
--- a/frontend/src/metabase/admin/utils.js
+++ b/frontend/src/metabase/admin/utils.js
@@ -1,6 +1,6 @@
 import { connect } from "react-redux";
 import { UserAuthWrapper } from "redux-auth-wrapper";
-import { routerActions, push } from "react-router-redux";
+import { routerActions, replace } from "react-router-redux";
 import { canAccessPath } from "metabase/nav/utils";
 import { getUser } from "metabase/selectors/user";
 
@@ -22,18 +22,18 @@ const mapStateToProps = state => ({
 });
 
 const mapDispatchToProps = {
-  push,
+  replace,
 };
 
 export const createAdminRedirect = (adminPath, nonAdminPath) => {
   const NonAdminRedirectComponent = connect(
     mapStateToProps,
     mapDispatchToProps,
-  )(({ user, push, location }) => {
+  )(({ user, replace, location }) => {
     const path = `${location.pathname}/${
       user.is_superuser ? adminPath : nonAdminPath
     }`;
-    push(path);
+    replace(path);
     return null;
   });
 
diff --git a/frontend/test/metabase/scenarios/admin/settings/reproductions/21532-back-button.cy.spec.js b/frontend/test/metabase/scenarios/admin/settings/reproductions/21532-back-button.cy.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..b608ee9d087e6db6d13c88ab7cf225b0c0f1c807
--- /dev/null
+++ b/frontend/test/metabase/scenarios/admin/settings/reproductions/21532-back-button.cy.spec.js
@@ -0,0 +1,21 @@
+import { restore } from "__support__/e2e/cypress";
+
+describe("issue 21532", () => {
+  beforeEach(() => {
+    restore();
+    cy.signInAsAdmin();
+  });
+
+  it("should allow navigating back from admin settings (metabase#21532)", () => {
+    cy.visit("/");
+
+    cy.icon("gear").click();
+    cy.findByText("Admin settings").click();
+    cy.findByText("Getting set up");
+
+    cy.go("back");
+    cy.location().should(location => {
+      expect(location.pathname).to.eq("/");
+    });
+  });
+});