diff --git a/frontend/src/pages/(navbar)/exercise-panel.tsx b/frontend/src/pages/(navbar)/exercise-panel.tsx
index 0176e6417a470bf5d15e903cdafb35986b37df80..26c041e95f237699ae75870f56ca8f9cf9fb6790 100644
--- a/frontend/src/pages/(navbar)/exercise-panel.tsx
+++ b/frontend/src/pages/(navbar)/exercise-panel.tsx
@@ -14,7 +14,7 @@ const wrapper = css`
 `
 
 const ExercisePanel = () => {
-  useSetPageTitle('Admin Panel')
+  useSetPageTitle('Exercise Panel')
 
   return (
     <>
diff --git a/frontend/src/pages/(navbar)/graphiql.tsx b/frontend/src/pages/(navbar)/graphiql.tsx
index f5b96b241e3c62b570a4b0777ee34e2fd80de646..163b1b6479cc48fe7d554d54c8b7b015c86f31e3 100644
--- a/frontend/src/pages/(navbar)/graphiql.tsx
+++ b/frontend/src/pages/(navbar)/graphiql.tsx
@@ -1,7 +1,12 @@
+import { useSetPageTitle } from '@/utils'
 import { lazy } from 'react'
 
 const GraphiQLPage = lazy(() => import('@/logic/GraphiQL'))
 
-export const GraphiQL = () => <GraphiQLPage />
+export const GraphiQL = () => {
+  useSetPageTitle('GraphiQL')
+
+  return <GraphiQLPage />
+}
 
 export default GraphiQL
diff --git a/frontend/src/pages/(navbar)/index.tsx b/frontend/src/pages/(navbar)/index.tsx
index 5e5750aa395014ad03be54ede75123e6b9661271..e72d58d9b131e3d204498706578aa0ebb1e4865e 100644
--- a/frontend/src/pages/(navbar)/index.tsx
+++ b/frontend/src/pages/(navbar)/index.tsx
@@ -2,14 +2,12 @@ import InjectLogo from '@/assets/inject-logo--vertical-black.svg?react'
 import StaffSelector from '@/logic/StaffSelector'
 import TeamSelector from '@/logic/TeamSelector'
 import { useNavigate } from '@/router'
-import { useSetPageTitle } from '@/utils'
 import { Checkbox, Collapse } from '@blueprintjs/core'
 import { useAuthIdentity } from '@inject/graphql/auth'
 import Container from '@inject/shared/components/Container'
 import { useEffect, useState } from 'react'
 
 const Index = () => {
-  useSetPageTitle('Team Selection')
   const { isActive, isStaff, isSuperuser, isLogged, loading } = useAuthIdentity(
     !!window.INJECT_NOAUTH
   )
diff --git a/frontend/src/pages/(navbar)/settings.tsx b/frontend/src/pages/(navbar)/settings.tsx
index 0b742234837d06e2f09e57278c4299101e8030e5..d2fd5696a5bc54dbb21382e444f526f98a85df68 100644
--- a/frontend/src/pages/(navbar)/settings.tsx
+++ b/frontend/src/pages/(navbar)/settings.tsx
@@ -5,6 +5,7 @@ import InstructorTeams from '@/clientsettings/components/InstructorTeams'
 import Logout from '@/clientsettings/components/Logout'
 import Notification from '@/clientsettings/components/Notification'
 import RelativeTime from '@/clientsettings/components/RelativeTime'
+import { useSetPageTitle } from '@/utils'
 import { css } from '@emotion/css'
 import { useAuthIdentity } from '@inject/graphql/auth'
 import Container from '@inject/shared/components/Container'
@@ -14,6 +15,7 @@ const heading = css`
 `
 
 const Settings = () => {
+  useSetPageTitle('Settings')
   const { isStaff, isSuperuser } = useAuthIdentity(!!window.INJECT_NOAUTH)
 
   return (
diff --git a/frontend/src/pages/404.tsx b/frontend/src/pages/404.tsx
index c138c3fe7f6aa763482ce5aca8d1ec9ee0681a27..3f11b366fa20589ae6d7f31ef06f44ebf346b4e7 100644
--- a/frontend/src/pages/404.tsx
+++ b/frontend/src/pages/404.tsx
@@ -2,7 +2,7 @@ import { useSetPageTitle } from '@/utils'
 import { NonIdealState } from '@blueprintjs/core'
 
 const FourOhFour = () => {
-  useSetPageTitle('Page not Found')
+  useSetPageTitle('Page not found')
 
   return (
     <NonIdealState title='Page not found' icon='warning-sign'>
diff --git a/frontend/src/pages/analyst/_layout.tsx b/frontend/src/pages/analyst/_layout.tsx
index 351a8afb9d4c12d5f263f1eefef46bc285322b36..2fc70e22de2b9f11dbcc69b817eed066584e521d 100644
--- a/frontend/src/pages/analyst/_layout.tsx
+++ b/frontend/src/pages/analyst/_layout.tsx
@@ -1,8 +1,9 @@
-import { useStaffBoundary } from '@/utils'
+import { useSetPageTitle, useStaffBoundary } from '@/utils'
 import { Outlet } from 'react-router-dom'
 
 const Layout = () => {
   useStaffBoundary()
+  useSetPageTitle('Analyst')
 
   return <Outlet />
 }
diff --git a/frontend/src/pages/instructor/[exerciseId]/[teamId]/[channelId]/email/_layout.tsx b/frontend/src/pages/instructor/[exerciseId]/[teamId]/[channelId]/email/_layout.tsx
index 4ed7e655186a910dbe5e20e3b8558a39487b5929..252a49b3df44d12f31980e450af7af225505063e 100644
--- a/frontend/src/pages/instructor/[exerciseId]/[teamId]/[channelId]/email/_layout.tsx
+++ b/frontend/src/pages/instructor/[exerciseId]/[teamId]/[channelId]/email/_layout.tsx
@@ -1,7 +1,6 @@
 import { EmailSelection } from '@/analyst/utilities'
 import InstructorTeamEmails from '@/email/TeamEmails/InstructorTeamEmails'
 import { useNavigate, useParams } from '@/router'
-import { useSetPageTitle } from '@/utils'
 import { useGetEmailThreads } from '@inject/graphql/queries/GetEmailThreads.generated'
 import notEmpty from '@inject/shared/utils/notEmpty'
 
@@ -9,7 +8,6 @@ const Layout = () => {
   const { exerciseId, teamId, tab, channelId, threadId } = useParams(
     '/instructor/:exerciseId/:teamId/:channelId/email/:tab/:threadId'
   )
-  useSetPageTitle(`Team ${teamId} - Emails`)
   const nav = useNavigate()
 
   const { data: emailThreadsData } = useGetEmailThreads({
diff --git a/frontend/src/pages/instructor/_layout.tsx b/frontend/src/pages/instructor/_layout.tsx
index 1129364df61e41395bc81308d633d391a20a229c..2a8289ba34e758f0cd3c65bf3ce18324d01c182f 100644
--- a/frontend/src/pages/instructor/_layout.tsx
+++ b/frontend/src/pages/instructor/_layout.tsx
@@ -1,11 +1,12 @@
 import { useParams } from '@/router'
-import { useStaffBoundary } from '@/utils'
+import { useSetPageTitle, useStaffBoundary } from '@/utils'
 import InstructorView from '@/views/InstructorView'
 import { Outlet } from 'react-router-dom'
 
 const Layout = () => {
   const { exerciseId, teamId } = useParams('/instructor/:exerciseId/:teamId')
   useStaffBoundary()
+  useSetPageTitle('Instructor')
 
   return (
     <InstructorView exerciseId={exerciseId} teamId={teamId}>
diff --git a/frontend/src/pages/instructor/index.tsx b/frontend/src/pages/instructor/index.tsx
index 16312bd878045651460cdd42dfa6aaaaf516c20b..4c07a7831c2c6bfa02bb91486125275ef60fd918 100644
--- a/frontend/src/pages/instructor/index.tsx
+++ b/frontend/src/pages/instructor/index.tsx
@@ -1,16 +1,11 @@
-import { useSetPageTitle } from '@/utils'
 import { NonIdealState } from '@blueprintjs/core'
 
-const InstructorIndexPage = () => {
-  useSetPageTitle('Instructor')
-
-  return (
-    <NonIdealState
-      icon='search'
-      title='No teams selected'
-      description='Select teams to interact with'
-    />
-  )
-}
+const InstructorIndexPage = () => (
+  <NonIdealState
+    icon='search'
+    title='No teams selected'
+    description='Select teams to interact with'
+  />
+)
 
 export default InstructorIndexPage
diff --git a/frontend/src/pages/login.tsx b/frontend/src/pages/login.tsx
index 2b6d0d42d492c1561a93b2bb1dfb4336126a0b4d..50c13f000607cc774b291718cc9275017e60a82c 100644
--- a/frontend/src/pages/login.tsx
+++ b/frontend/src/pages/login.tsx
@@ -1,18 +1,23 @@
 import InjectLogo from '@/assets/inject-logo--vertical-black.svg?react'
 import Login from '@/logic/Login'
+import { useSetPageTitle } from '@/utils'
 import Container from '@inject/shared/components/Container'
 
-const LoginPage = () => (
-  <Container>
-    <InjectLogo
-      style={{
-        width: '100%',
-        height: '300px',
-        margin: 'auto',
-      }}
-    />
-    <Login />
-  </Container>
-)
+const LoginPage = () => {
+  useSetPageTitle('Login')
+
+  return (
+    <Container>
+      <InjectLogo
+        style={{
+          width: '100%',
+          height: '300px',
+          margin: 'auto',
+        }}
+      />
+      <Login />
+    </Container>
+  )
+}
 
 export default LoginPage
diff --git a/frontend/src/pages/trainee/[exerciseId]/[teamId]/[channelId]/email/_layout.tsx b/frontend/src/pages/trainee/[exerciseId]/[teamId]/[channelId]/email/_layout.tsx
index 9deebfe9d6a76d0835a1c2ed49a0bd873012442b..d0a15810936cbba6914d9e7776664ec0202b0068 100644
--- a/frontend/src/pages/trainee/[exerciseId]/[teamId]/[channelId]/email/_layout.tsx
+++ b/frontend/src/pages/trainee/[exerciseId]/[teamId]/[channelId]/email/_layout.tsx
@@ -1,7 +1,6 @@
 import { EmailSelection } from '@/analyst/utilities'
 import TraineeTeamEmails from '@/email/TeamEmails/TraineeTeamEmails'
 import { useNavigate, useParams } from '@/router'
-import { useSetPageTitle } from '@/utils'
 import { useGetEmailThreads } from '@inject/graphql/queries/GetEmailThreads.generated'
 import notEmpty from '@inject/shared/utils/notEmpty'
 
@@ -9,7 +8,6 @@ const Layout = () => {
   const { exerciseId, teamId, tab, channelId, threadId } = useParams(
     '/trainee/:exerciseId/:teamId/:channelId/email/:tab/:threadId'
   )
-  useSetPageTitle(`Team ${teamId} - Emails`)
   const nav = useNavigate()
 
   const { data: emailThreadsData } = useGetEmailThreads({
diff --git a/frontend/src/pages/trainee/_layout.tsx b/frontend/src/pages/trainee/_layout.tsx
index 931d1ee5b998fbd9331c9c47f16485c8b555b60d..e2ae62bb40557703a9bd53f168d21c45241cdb2f 100644
--- a/frontend/src/pages/trainee/_layout.tsx
+++ b/frontend/src/pages/trainee/_layout.tsx
@@ -1,9 +1,11 @@
 import { useParams } from '@/router'
+import { useSetPageTitle } from '@/utils'
 import TraineeView from '@/views/TraineeView'
 import { Outlet } from 'react-router-dom'
 
 const Layout = () => {
   const { exerciseId, teamId } = useParams('/trainee/:exerciseId/:teamId')
+  useSetPageTitle('Trainee')
 
   return (
     <TraineeView exerciseId={exerciseId} teamId={teamId}>
diff --git a/frontend/src/pages/users/_layout.tsx b/frontend/src/pages/users/_layout.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..b72fa7ef516545626480aa84266bbafa69c6e812
--- /dev/null
+++ b/frontend/src/pages/users/_layout.tsx
@@ -0,0 +1,10 @@
+import { useSetPageTitle } from '@/utils'
+import { Outlet } from 'react-router-dom'
+
+const Layout = () => {
+  useSetPageTitle('User management')
+
+  return <Outlet />
+}
+
+export default Layout
diff --git a/frontend/src/pages/users/index.tsx b/frontend/src/pages/users/index.tsx
index bae1aef41f5cf226bb1a8174e3adc1e0970c93c0..39aaf4ef2c1525ed9b232236b28337d73f0b63d1 100644
--- a/frontend/src/pages/users/index.tsx
+++ b/frontend/src/pages/users/index.tsx
@@ -1,10 +1,5 @@
 import UserTable from '@/users/UserTable'
-import { useSetPageTitle } from '@/utils'
 
-const UserManagementIndexPage = () => {
-  useSetPageTitle('User management')
-
-  return <UserTable />
-}
+const UserManagementIndexPage = () => <UserTable />
 
 export default UserManagementIndexPage