diff --git a/src/wp-includes/default-filters.php b/src/wp-includes/default-filters.php index e8e0a84d45..783606df4b 100644 --- a/src/wp-includes/default-filters.php +++ b/src/wp-includes/default-filters.php @@ -238,6 +238,7 @@ add_filter( 'wp_mail', 'wp_staticize_emoji_for_email' ); // Robots filters. add_filter( 'wp_robots', 'wp_robots_noindex' ); +add_filter( 'wp_robots', 'wp_robots_noindex_search' ); add_filter( 'wp_robots', 'wp_robots_max_image_preview_large' ); // Mark site as no longer fresh. diff --git a/src/wp-includes/robots-template.php b/src/wp-includes/robots-template.php index dc425686c2..61931a25e5 100644 --- a/src/wp-includes/robots-template.php +++ b/src/wp-includes/robots-template.php @@ -87,6 +87,31 @@ function wp_robots_noindex( array $robots ) { return $robots; } +/** + * Adds noindex to the robots meta tag if a search is being performed. + * + * If a search is being performed then noindex will be output to + * tell web robots not to index the page content. Add this to the + * {@see 'wp_robots'} filter. + * + * Typical usage is as a {@see 'wp_robots'} callback: + * + * add_filter( 'wp_robots', 'wp_robots_noindex_search' ); + * + * @since 5.7.0 + * @see wp_robots_no_robots() + * + * @param array $robots Associative array of robots directives. + * @return array Filtered robots directives. + */ +function wp_robots_noindex_search( array $robots ) { + if ( is_search() ) { + return wp_robots_no_robots( $robots ); + } + + return $robots; +} + /** * Adds noindex to the robots meta tag. * diff --git a/tests/phpunit/tests/robots.php b/tests/phpunit/tests/robots.php index a8073b36f3..f826b3bf11 100644 --- a/tests/phpunit/tests/robots.php +++ b/tests/phpunit/tests/robots.php @@ -176,6 +176,28 @@ class Tests_Robots extends WP_UnitTestCase { $this->assertEmpty( $output ); } + /** + * @ticket 52457 + */ + public function test_wp_robots_search_page() { + add_filter( 'wp_robots', 'wp_robots_noindex_search' ); + $this->go_to( home_url( '?s=ticket+52457+core.trac.wordpress.org' ) ); + + $output = get_echo( 'wp_robots' ); + $this->assertContains( 'noindex', $output ); + } + + /** + * @ticket 52457 + */ + public function test_wp_robots_non_search_page() { + add_filter( 'wp_robots', 'wp_robots_noindex_search' ); + $this->go_to( home_url() ); + + $output = get_echo( 'wp_robots' ); + $this->assertNotContains( 'noindex', $output ); + } + public function add_noindex_directive( array $robots ) { $robots['noindex'] = true; return $robots;