Deshabilitar el autocompletado de URL en WordPress

24 mar 2013, 04:59:48
Vistas: 28.3K
Votos: 21

Recientemente noté que WordPress intenta autocompletar una URL cuando no se envía en su totalidad. Por ejemplo, tengo una URL de entrada que se ve así:

http://www.mysite.com/some-post-title

Si navego a la siguiente URL:

http://www.mysite.com/some-post-ti

Puedo ver que la URL se envía a WordPress pero que WordPress está haciendo una redirección 301 a http://www.mysite.com/some-post-title.

¿Cómo puedo deshabilitar este comportamiento?

1
Comentarios

Una solución probada que no deshabilita todo el sistema de URL canónicas, sino solo desactiva la parte de "adivinanza" de autocompletado se describe aquí

Hauke P. Hauke P.
20 may 2014 17:56:32
Todas las respuestas a la pregunta 4
3
28

Creo que esa es la función redirect_canonical enganchada a template_redirect. Deberías poder desactivarla con:

remove_filter('template_redirect', 'redirect_canonical'); 

Pero realmente deberías considerar si deseas hacer eso, ya que es bastante complicada y realiza algunas funciones importantes para SEO:

Redirige los enlaces entrantes a la URL correcta basándose en la URL del sitio.

Los motores de búsqueda consideran www.somedomain.com y somedomain.com como dos URLs diferentes cuando ambas van a la misma ubicación. Esta mejora para SEO evita penalizaciones por contenido duplicado al redirigir todos los enlaces entrantes a una u otra.

Evita la redirección para feeds, trackbacks, búsquedas, ventanas emergentes de comentarios y URLs de administración. No redirige en IIS 7 que no admita enlaces permanentes bonitos, vistas previas de páginas/entradas, administración de WP, Trackbacks, robots.txt, búsquedas o en solicitudes POST.

También intentará encontrar el enlace correcto cuando un usuario ingrese una URL que no existe basada en la consulta exacta de WordPress. En su lugar, intentará analizar la URL o la consulta para determinar la página correcta a la que dirigirse.

http://core.trac.wordpress.org/browser/tags/3.5.1/wp-includes/canonical.php#L13

El siguiente código podría desactivar el autocompletado sin afectar el componente de SEO, pero no lo puedo garantizar. El código apenas ha sido probado ya que nunca he querido desactivar esto. Realmente tendría que estudiar redirect_canonical para estar seguro de algo.

function kill_404_redirect_wpse_92103() {
  if (is_404()) {
   add_action('redirect_canonical','__return_false');
  }
}
add_action('template_redirect','kill_404_redirect_wpse_92103',1);
24 mar 2013 05:49:04
Comentarios

Agregué este fragmento de código al final de mi archivo /wp-includes/canonical.php y los redireccionamientos siguen ocurriendo. ¿Estoy haciendo algo mal? ¿Alguien más no puede desactivar este comportamiento?

user1380540 user1380540
4 jun 2019 19:34:12

@user1380540 no editas archivos del núcleo. Esto iría al functions.php del tema o a un plugin.

Michael Rogers Michael Rogers
16 jul 2020 21:45:39

otra razón por la que tengo una relación amor/odio con wordpress

JJS JJS
21 jul 2023 18:25:37
0

Esto parece terriblemente irresponsable, que esta "adivinación" ocurra automáticamente. Estaría mucho más abierto a ello si hubiera algún medio para definir cuál es la página correcta a la que dirigirse.

Tengo numerosas páginas que están construidas como una secuencia, y esta auto-adivinación está eligiendo incorrectamente responder con páginas que están (¿aleatoriamente?) en algún lugar de la secuencia, en lugar de la página de inicio.

ACTUALIZACIÓN: Este es un comportamiento conocido, y está siendo considerado aquí: https://core.trac.wordpress.org/ticket/16557

28 jul 2014 16:51:16
0

Como seguimiento a la respuesta de FitPM, se ha creado un complemento que deshabilita el comportamiento de auto-detección de URLs.

Funciona correctamente para mí en WordPress 4.8 al 2 de agosto de 2017. El complemento está aquí: https://wordpress.org/plugins/disable-url-autocorrect-guessing/

2 ago 2017 21:03:50
1

Una nota: Si deshabilitas redirect_canonical (por ejemplo con remove_action('template_redirect', 'redirect_canonical');), enlaces aleatorios como https://tld.com/cadena-aleatoria/post-del-blog también funcionarán (se mostrará el contenido de https://tld.com/slug-de-categoria-real/post-del-blog).

Si quieres prevenir eso y devolver un error 404 en esas URLs aleatorias, usa algo como:

add_filter( 'redirect_canonical', function( $redirect_url ) {
    $url = 'http'.((isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')?'s':'').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    if( $redirect_url !== $url ) {
        global $wp_query;
        $wp_query->set_404();
        status_header( 404 );
        nocache_headers();
    }
    return false; 
});
13 may 2020 03:04:30
Comentarios

puedes simplificarlo con $url = home_url( $_SERVER['REQUEST_URI'] );

Saif Saif
25 dic 2021 08:32:39