diff --git a/locales/en-US.json b/locales/en-US.json
index 573fb71d..e3ffadb9 100644
--- a/locales/en-US.json
+++ b/locales/en-US.json
@@ -105,6 +105,7 @@
     "preferences_category_visual": "Visual preferences",
     "preferences_region_label": "Content country: ",
     "preferences_player_style_label": "Player style: ",
+    "preferences_previous_page_button_label": "Previous page button (requires Javascript):",
     "Dark mode: ": "Dark mode: ",
     "preferences_dark_mode_label": "Theme: ",
     "dark": "dark",
diff --git a/src/invidious/config.cr b/src/invidious/config.cr
index 429d9246..56c09beb 100644
--- a/src/invidious/config.cr
+++ b/src/invidious/config.cr
@@ -44,6 +44,7 @@ struct ConfigPreferences
   property vr_mode : Bool = true
   property show_nick : Bool = true
   property save_player_pos : Bool = false
+  property previous_page_button : Bool = true
 
   def to_tuple
     {% begin %}
diff --git a/src/invidious/frontend/pagination.cr b/src/invidious/frontend/pagination.cr
index 13464503..4a9d76d7 100644
--- a/src/invidious/frontend/pagination.cr
+++ b/src/invidious/frontend/pagination.cr
@@ -3,7 +3,10 @@ require "uri"
 module Invidious::Frontend::Pagination
   extend self
 
-  private def first_page(str : String::Builder, locale : String?, url : String)
+  private def first_page(str : String::Builder, locale : String?, url : String, previous_page_button : Bool)
+    if previous_page_button
+      str << %(<noscript>)
+    end
     str << %(<a href=") << url << %(" class="pure-button pure-button-secondary">)
 
     if locale_is_rtl?(locale)
@@ -19,6 +22,9 @@ module Invidious::Frontend::Pagination
     end
 
     str << "</a>"
+    if previous_page_button
+      str << "</noscript>"
+    end
   end
 
   private def previous_page(str : String::Builder, locale : String?, url : String)
@@ -90,7 +96,7 @@ module Invidious::Frontend::Pagination
     end
   end
 
-  def nav_ctoken(locale : String?, *, base_url : String | URI, ctoken : String?, first_page : Bool)
+  def nav_ctoken(locale : String?, *, base_url : String | URI, ctoken : String?, first_page : Bool, previous_page_button : Bool)
     return String.build do |str|
       str << %(<div class="h-box">\n)
       str << %(<div class="page-nav-container flexible">\n)
@@ -98,7 +104,7 @@ module Invidious::Frontend::Pagination
       str << %(<div class="page-prev-container flex-left">)
 
       if !first_page
-        self.first_page(str, locale, base_url.to_s)
+        self.first_page(str, locale, base_url.to_s, previous_page_button)
       end
 
       str << %(</div>\n)
diff --git a/src/invidious/routes/before_all.cr b/src/invidious/routes/before_all.cr
index 396840a4..be80659f 100644
--- a/src/invidious/routes/before_all.cr
+++ b/src/invidious/routes/before_all.cr
@@ -104,10 +104,13 @@ module Invidious::Routes::BeforeAll
     thin_mode = env.params.query["thin_mode"]? || preferences.thin_mode.to_s
     thin_mode = thin_mode == "true"
     locale = env.params.query["hl"]? || preferences.locale
+    previous_page_button = env.params.query["previous_page_button"]? || preferences.previous_page_button.to_s
+    previous_page_button = previous_page_button == "true"
 
     preferences.dark_mode = dark_mode
     preferences.thin_mode = thin_mode
     preferences.locale = locale
+    preferences.previous_page_button = previous_page_button
     env.set "preferences", preferences
 
     current_page = env.request.path
diff --git a/src/invidious/routes/preferences.cr b/src/invidious/routes/preferences.cr
index abe0f34e..5c86202d 100644
--- a/src/invidious/routes/preferences.cr
+++ b/src/invidious/routes/preferences.cr
@@ -140,6 +140,10 @@ module Invidious::Routes::PreferencesRoute
     notifications_only ||= "off"
     notifications_only = notifications_only == "on"
 
+    previous_page_button = env.params.body["previous_page_button"]?.try &.as(String)
+    previous_page_button ||= "off"
+    previous_page_button = previous_page_button == "on"
+
     # Convert to JSON and back again to take advantage of converters used for compatibility
     preferences = Preferences.from_json({
       annotations:                 annotations,
@@ -175,6 +179,7 @@ module Invidious::Routes::PreferencesRoute
       vr_mode:                     vr_mode,
       show_nick:                   show_nick,
       save_player_pos:             save_player_pos,
+      previous_page_button:        previous_page_button
     }.to_json)
 
     if user = env.get? "user"
diff --git a/src/invidious/user/preferences.cr b/src/invidious/user/preferences.cr
index b3059403..a0ea3018 100644
--- a/src/invidious/user/preferences.cr
+++ b/src/invidious/user/preferences.cr
@@ -55,6 +55,7 @@ struct Preferences
   property extend_desc : Bool = CONFIG.default_user_preferences.extend_desc
   property volume : Int32 = CONFIG.default_user_preferences.volume
   property save_player_pos : Bool = CONFIG.default_user_preferences.save_player_pos
+  property previous_page_button : Bool = CONFIG.default_user_preferences.previous_page_button
 
   module BoolToString
     def self.to_json(value : String, json : JSON::Builder)
diff --git a/src/invidious/views/channel.ecr b/src/invidious/views/channel.ecr
index df39d1ea..123a0a50 100644
--- a/src/invidious/views/channel.ecr
+++ b/src/invidious/views/channel.ecr
@@ -21,7 +21,8 @@
   page_nav_html = IV::Frontend::Pagination.nav_ctoken(locale,
     base_url: relative_url,
     ctoken: next_continuation,
-    first_page: continuation.nil?
+    first_page: continuation.nil?,
+    previous_page_button: env.get("preferences").as(Preferences).previous_page_button
   )
 %>
 
@@ -41,6 +42,10 @@
 <link rel="alternate" type="application/rss+xml" title="RSS" href="/feed/channel/<%= ucid %>" />
 <%- end -%>
 
+<%- if env.get("preferences").as(Preferences).previous_page_button -%>
+<script src="/js/pagination.js?v=<%= ASSET_COMMIT %>"></script>
+<%- end -%>
+
 <link rel="alternate" href="<%= youtube_url %>">
 <title><%= author %> - Invidious</title>
 <% end %>
diff --git a/src/invidious/views/components/items_paginated.ecr b/src/invidious/views/components/items_paginated.ecr
index 4534a0a3..d0cb8771 100644
--- a/src/invidious/views/components/items_paginated.ecr
+++ b/src/invidious/views/components/items_paginated.ecr
@@ -8,4 +8,14 @@
 
 <%= page_nav_html %>
 
+<script id="pagination-data" type="application/json">
+<%=
+{
+   "next_page" => translate(locale, "Next page"),
+   "prev_page" => translate(locale, "Previous page"),
+   "is_rtl"    => locale_is_rtl?(locale)
+}.to_json
+%>
+</script>
+
 <script src="/js/watched_indicator.js"></script>
diff --git a/src/invidious/views/user/preferences.ecr b/src/invidious/views/user/preferences.ecr
index 55349c5a..4b915a53 100644
--- a/src/invidious/views/user/preferences.ecr
+++ b/src/invidious/views/user/preferences.ecr
@@ -189,6 +189,12 @@
                     </select>
                 <% end %>
             </div>
+
+	    <div class="pure-control-group">
+               <label for="previous_page_button"><%= translate(locale, "preferences_previous_page_button_label") %></label>
+	       <input name="previous_page_button" id="previous_page_button" type="checkbox" <% if preferences.previous_page_button %>checked<% end %>>
+	    </div>
+
             <% if env.get? "user" %>
                 <div class="pure-control-group">
                     <label for="show_nick"><%= translate(locale, "preferences_show_nick_label") %></label>