diff --git a/src/client/app/desktop/script.ts b/src/client/app/desktop/script.ts
index 95bfe6ec1d..05cd79f706 100644
--- a/src/client/app/desktop/script.ts
+++ b/src/client/app/desktop/script.ts
@@ -147,7 +147,7 @@ init(async (launch) => {
 			{ path: '/search', component: MkSearch },
 			{ path: '/tags/:tag', name: 'tag', component: MkTag },
 			{ path: '/share', component: MkShare },
-			{ path: '/reversi/:game?', component: MkReversi },
+			{ path: '/games/reversi/:game?', component: MkReversi },
 			{ path: '/@:user', name: 'user', component: MkUser },
 			{ path: '/@:user/following', name: 'userFollowing', component: MkUserFollowingOrFollowers },
 			{ path: '/@:user/followers', name: 'userFollowers', component: MkUserFollowingOrFollowers },
diff --git a/src/client/app/mobile/script.ts b/src/client/app/mobile/script.ts
index 52b0d9bbb2..bbbdc0ebb0 100644
--- a/src/client/app/mobile/script.ts
+++ b/src/client/app/mobile/script.ts
@@ -135,7 +135,7 @@ init((launch) => {
 			{ path: '/search', component: MkSearch },
 			{ path: '/tags/:tag', component: MkTag },
 			{ path: '/share', component: MkShare },
-			{ path: '/reversi/:game?', name: 'reversi', component: MkReversi },
+			{ path: '/games/reversi/:game?', name: 'reversi', component: MkReversi },
 			{ path: '/@:user', component: () => import('./views/pages/user.vue').then(m => m.default) },
 			{ path: '/@:user/followers', component: MkFollowers },
 			{ path: '/@:user/following', component: MkFollowing },
diff --git a/src/server/web/index.ts b/src/server/web/index.ts
index 7fd9e76cfc..945176afd3 100644
--- a/src/server/web/index.ts
+++ b/src/server/web/index.ts
@@ -219,6 +219,12 @@ router.get('/info', async ctx => {
 	});
 });
 
+const override = (source: string, target: string, depth: number = 0) =>
+	[, ...target.split('/').filter(x => x), ...source.split('/').filter(x => x).splice(depth)].join('/');
+
+router.get('/othello', async ctx => ctx.redirect(override(ctx.URL.pathname, 'games/reversi', 1)));
+router.get('/reversi', async ctx => ctx.redirect(override(ctx.URL.pathname, 'games')));
+
 // Render base html for all requests
 router.get('*', async ctx => {
 	const meta = await fetchMeta();