diff --git a/src/components/ImageList.vue b/src/components/ImageList.vue
index 8c0f3487438b5688ee137751f17d44cdadf18d74..83f612759c9767d543c5091e389f8cde25912551 100644
--- a/src/components/ImageList.vue
+++ b/src/components/ImageList.vue
@@ -50,25 +50,16 @@ export default {
     ...mapState(["stateUser", "stateHashArray"]),
   },
   async created() {
-    this.pageChange(this.currentPage);
-    this.lastPage = Number(await this.getTotalPages());
+    this.lastPage = Number(await this.getLastPage());
+    this.pageChange();
   },
   methods: {
-    async pageChange(pageNumber) {
-      if (pageNumber === "...") {
-        let pageNumber = Number(prompt("Jump to page"));
-        if (
-          !Number.isInteger(pageNumber) ||
-          pageNumber > this.lastPage ||
-          pageNumber < 1
-        ) {
-          alert("Invalid page!");
-          return;
-        }
-        this.updatePage(pageNumber);
-        return;
-      }
-      this.currentPage = pageNumber;
+    async pageChange() {
+      this.currentPage = Number(
+        window.location.pathname.split("/").pop().match(/^\d+$/)
+      );
+      if (this.currentPage === 0) this.currentPage++;
+      if (this.currentPage > this.lastPage) this.currentPage = this.lastPage;
       window.scrollTo(0, 0);
       this.setStateHashArray(await this.getHashArray(this.currentPage - 1));
     },
@@ -86,10 +77,10 @@ export default {
       });
       return hashArray;
     },
-    async getTotalPages() {
+    async getLastPage() {
       const response = await fetch("/api/page");
-      const totalPages = await response.text();
-      return totalPages;
+      const lastPage = await response.text();
+      return lastPage;
     },
     appendToDeleteArray(...args) {
       const [checked, hash] = args;
diff --git a/src/components/PaginationBar.vue b/src/components/PaginationBar.vue
index 558bf2b86f217069f4d77933e421d8501f61df5f..e8bd16095ba5537c4eb50da86f274a53073ea2d9 100644
--- a/src/components/PaginationBar.vue
+++ b/src/components/PaginationBar.vue
@@ -1,17 +1,18 @@
 <template>
   <div class="mx-auto max-w-max">
-    <button
+    <router-link
       v-for="(page, index) in pages"
       :key="index"
-      class="mr-2 last:mr-0 text-lg"
+      :to="`/${page}`"
+      @click.native="$emit('onPageChange')"
       :class="{
         'text-red-800': page === currentPage,
         'font-bold': page === currentPage,
       }"
-      @click="$emit('onPageChange', page)"
+      class="mr-2 last:mr-0 text-lg"
     >
       {{ page }}
-    </button>
+    </router-link>
   </div>
 </template>
 
diff --git a/src/router/index.js b/src/router/index.js
index 8334be1e23b3497a2f7713738f2da7a1878972e1..36c3ea870ec9f75d1db8f56fe2308afbed9740f7 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -1,27 +1,32 @@
-import Vue from 'vue'
-import VueRouter from 'vue-router'
-import Home from '../views/Home.vue'
-import ImageView from '../views/ImageView.vue'
+import Vue from "vue";
+import VueRouter from "vue-router";
+import Home from "../views/Home.vue";
+import ImageView from "../views/ImageView.vue";
 
-Vue.use(VueRouter)
+Vue.use(VueRouter);
 
 const routes = [
   {
-    path: '/',
-    name: 'Home',
-    component: Home
+    path: "/",
+    name: "Home",
+    component: Home,
   },
   {
-    path: '/image/:hash',
-    name: 'ImageView',
+    path: "/:page",
+    name: "Page",
+    component: Home,
+  },
+  {
+    path: "/image/:hash",
+    name: "ImageView",
     component: ImageView,
   },
-]
+];
 
 const router = new VueRouter({
-  mode: 'history',
+  mode: "history",
   base: process.env.BASE_URL,
-  routes
-})
+  routes,
+});
 
-export default router
+export default router;