diff --git a/wagtail/admin/tests/pages/test_page_search.py b/wagtail/admin/tests/pages/test_page_search.py
index d30b83e7a2..45e36158b0 100644
--- a/wagtail/admin/tests/pages/test_page_search.py
+++ b/wagtail/admin/tests/pages/test_page_search.py
@@ -4,6 +4,7 @@ from django.contrib.auth.models import Permission
 from django.core import management
 from django.test import TransactionTestCase
 from django.urls import reverse
+from django.utils.http import urlencode
 
 from wagtail.models import Page
 from wagtail.test.testapp.models import EventIndex, SimplePage, SingleEventPage
@@ -33,10 +34,29 @@ class TestPageSearch(WagtailTestUtils, TransactionTestCase):
         self.assertEqual(response.status_code, 200)
 
     def test_search(self):
+        # Find root page
+        root_page = Page.objects.get(id=2)
+
+        # Create a page
+        new_page = root_page.add_child(
+            instance=SimplePage(
+                title="Hello from Cauldron Lake",
+                slug="bright-falls",
+                content="It's not a lake, it's an ocean",
+                live=True,
+                has_unpublished_changes=False,
+            )
+        )
+
         response = self.get({"q": "Hello"})
         self.assertEqual(response.status_code, 200)
         self.assertTemplateUsed(response, "wagtailadmin/pages/search.html")
         self.assertEqual(response.context["query_string"], "Hello")
+        next_url = urlencode({"next": reverse("wagtailadmin_pages:search")})
+        expected_new_page_copy_url = (
+            reverse("wagtailadmin_pages:copy", args=(new_page.pk,)) + f"?{next_url}"
+        )
+        self.assertContains(response, f'href="{expected_new_page_copy_url}"')
 
     def test_search_searchable_fields(self):
         # Find root page
@@ -62,6 +82,20 @@ class TestPageSearch(WagtailTestUtils, TransactionTestCase):
         self.assertContains(response, "There is one matching page")
 
     def test_ajax(self):
+        # Find root page
+        root_page = Page.objects.get(id=2)
+
+        # Create a page
+        new_page = root_page.add_child(
+            instance=SimplePage(
+                title="Hello from Cauldron Lake",
+                slug="bright-falls",
+                content="It's not a lake, it's an ocean",
+                live=True,
+                has_unpublished_changes=False,
+            )
+        )
+
         response = self.get(
             {"q": "Hello"}, url_name="wagtailadmin_pages:search_results"
         )
@@ -69,6 +103,11 @@ class TestPageSearch(WagtailTestUtils, TransactionTestCase):
         self.assertTemplateNotUsed(response, "wagtailadmin/pages/search.html")
         self.assertTemplateUsed(response, "wagtailadmin/pages/search_results.html")
         self.assertEqual(response.context["query_string"], "Hello")
+        next_url = urlencode({"next": reverse("wagtailadmin_pages:search")})
+        expected_new_page_copy_url = (
+            reverse("wagtailadmin_pages:copy", args=(new_page.pk,)) + f"?{next_url}"
+        )
+        self.assertContains(response, f'href="{expected_new_page_copy_url}"')
 
     def test_pagination(self):
         # page numbers in range should be accepted
diff --git a/wagtail/admin/views/pages/search.py b/wagtail/admin/views/pages/search.py
index 5322d999bc..aeb98e9fee 100644
--- a/wagtail/admin/views/pages/search.py
+++ b/wagtail/admin/views/pages/search.py
@@ -165,6 +165,7 @@ class BaseSearchView(PermissionCheckedMixin, BaseListingView):
     def get_table_kwargs(self):
         kwargs = super().get_table_kwargs()
         kwargs["show_locale_labels"] = self.show_locale_labels
+        kwargs["actions_next_url"] = self.get_index_url()
         return kwargs
 
     def get_context_data(self, **kwargs: Any) -> Dict[str, Any]: