General: Add noindex robots meta tag to search results.

Prevent search engines indexing internal search results to protect against reflected web spam attacks.

Props abagtcs, audrasjb, ayeshrajans, burtrw, johnbillion, jonoaldersonwp, peterwilsoncc, poena, sabernhardt, xkon.
Fixes #52457


git-svn-id: https://develop.svn.wordpress.org/trunk@50370 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Peter Wilson
2021-02-16 23:36:44 +00:00
parent 6299c30506
commit f400eb5ab9
3 changed files with 48 additions and 0 deletions

View File

@@ -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.

View File

@@ -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.
*

View File

@@ -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;