diff --git a/components/Pager.tsx b/components/Pager.tsx
index d72b586..0a2090f 100644
--- a/components/Pager.tsx
+++ b/components/Pager.tsx
@@ -8,6 +8,7 @@ import {
 } from "../contexts/LoadingContext";
 import removeEmpty from "../lib/removeEmpty";
 import { UrlObject } from "url";
+import { actualMaxPageNumber } from "../lib/pager";
 
 type Url = string | UrlObject;
 
@@ -42,33 +43,17 @@ const PagerButton: FC<PagerButtonProps> = ({ href, children }) => {
 
 const Pager = () => {
   const options = useSearchGlobalState();
-  const loading = useLoadingGlobalState();
-  const [, setMaxPages] = useState(1);
   const [hasPrevPrevPage, setHasPrevPrevPage] = useState(false);
   const [hasPrevPage, setHasPrevPage] = useState(false);
   const [hasNextPage, setHasNextPage] = useState(false);
   const [hasNextNextPage, setHasNextNextPage] = useState(false);
 
-  const LIMIT = 100;
-  const calcPageNumber = () => {
-    const { count } = options;
-    if (count === 0) {
-      return 0;
-    }
-    return Math.ceil(count / LIMIT);
-  };
-
   useEffect(() => {
-    const pageNumber = calcPageNumber();
-    setMaxPages(pageNumber);
+    const actualMaxPageNum = actualMaxPageNumber(options.per, options.count);
     setHasPrevPrevPage(options.page > 2);
     setHasPrevPage(options.page > 1);
-    setHasNextPage(
-      pageNumber > options.page && 1600 / options.per >= options.page
-    );
-    setHasNextNextPage(
-      pageNumber > options.page + 1 && 1600 / options.per >= options.page + 1
-    );
+    setHasNextPage(actualMaxPageNum > options.page);
+    setHasNextNextPage(actualMaxPageNum > options.page + 1);
   }, [options]);
 
   return (
diff --git a/lib/pager.ts b/lib/pager.ts
new file mode 100644
index 0000000..f426d95
--- /dev/null
+++ b/lib/pager.ts
@@ -0,0 +1,15 @@
+export const MAX_OFFSET = 1600;
+
+export const maxPageNumber = (per: number): number => {
+  return Math.ceil(MAX_OFFSET / per) + 1;
+};
+
+export const calcPageNumber = (per: number, count: number) => {
+  if (count === 0) {
+    return 0;
+  }
+  return Math.ceil(count / per);
+};
+
+export const actualMaxPageNumber = (per: number, count: number) =>
+  Math.min(maxPageNumber(per), calcPageNumber(per, count));
diff --git a/pages/search.tsx b/pages/search.tsx
index 9301293..19742be 100644
--- a/pages/search.tsx
+++ b/pages/search.tsx
@@ -27,6 +27,8 @@ import { format } from "date-fns";
 import * as Sentry from "@sentry/node";
 import { AxiosError } from "axios";
 
+import { actualMaxPageNumber, MAX_OFFSET } from "../lib/pager";
+
 export default function Search({
   videos,
   searchOptions,
@@ -90,9 +92,6 @@ const calcOffset = (page?: number, per: number = 100): number => {
     page = 1;
   }
   let offset = (page - 1) * per;
-  if (offset > 1600) {
-    return 1600;
-  }
 
   return offset;
 };
@@ -288,6 +287,10 @@ export const getServerSideProps: GetServerSideProps = async (ctx) => {
   > => {
     if (shouldExecCall(searchOptions)) {
       const searchQuery = getSearchQuery(searchOptions);
+      if (searchQuery._offset > MAX_OFFSET) {
+        searchQuery._offset = 0;
+        searchQuery._limit = 0;
+      }
       const response = (
         await client.search(searchQuery, usedFields).catch((e: AxiosError) => {
           Sentry.captureException(e);
@@ -316,6 +319,15 @@ export const getServerSideProps: GetServerSideProps = async (ctx) => {
     };
   }
 
+  const actualMaxPageNum = actualMaxPageNumber(
+    searchOptions.per,
+    response.meta.totalCount
+  );
+
+  if (actualMaxPageNum < searchOptions.page) {
+    searchOptions.page = actualMaxPageNum + 1;
+  }
+
   return {
     props: {
       videos: response.data,