it-swarm-es.com

¿Crear 301 redirecciones para URL de publicación, página, categoría e imagen?

Me temo que esto puede ser mucho pedir aquí, así que si es así, no dude en contarme otro lugar para aprender.

Ayuda con redirecciones

Estoy limpiando un sitio mal desarrollado y migrando wordpress desde un subdirectorio. He pasado horas tratando de envolver mi cabeza en torno a la logística de redirecciones y expresiones regulares. Creo que lo estoy manejando, pero realmente agradecería la confirmación de que estoy haciendo esto bien, y cualquier consejo sobre las mejores prácticas. Si alguien sabe de algún buen tutorial con ejemplos de cómo hacerlo, también lo apreciaría.

Si alguien sabe de realmente simples complementos para esto, estaría extremadamente agradecido. He estado buscando en el complemento Redirecciones, pero me parece muy confuso (¡dolor de cabeza!). En cualquier caso, mis ideas a continuación (las fuentes son seguidas por => luego target) son lo que he recopilado de las instrucciones y capturas de pantalla de Redirecciones y otros tutoriales que he rastreado. Estoy bastante seguro de que serían aplicables independientemente de si los coloco directamente en el archivo .htaccess o utilizo ¿Redirecciones u otro complemento?

Entonces, esto es lo que estoy tratando de lograr y cómo creo que se debe hacer:

  1. Para mover Wordpress desde el subdirectorio a la raíz:

    /wp /(.*) => /$1
    
  2. Para todas las páginas actualmente dentro de los subdirectorios en la raíz, quiero eliminar y/o combinar un montón de páginas en una página de nivel superior:

    /products-directory /(.*) =>/products-top-level-page 
     
    /about-directory /(.*) =>/about-top- página de nivel 
     
    /services-directory /(.*) =>/services-top-level-page 
    
  3. Para un grupo de páginas de nivel superior que coinciden con un patrón específico, quiero dirigirlas a categorías específicas, por ejemplo. Todos los nombres de archivo comienzan con las mismas dos palabras como esta: same-Word-documentation-variación.html y quiero que mantengan sus nombres de archivo existentes, si configuro mis enlaces permanentes para que finalicen con `.html`, esto funcionará , Yo creo:

    /same-Word (. *) => /newcategory/$1
    

    ¿Cómo crearía la regla si no tengo permalinks que terminan en `.html`? (¡Creo que lo vi! Es el carácter "no", pero no estoy seguro de cómo usarlo aquí):

    /same-Word (. *) => /newcategory/$1!\.html
    
  4. Y luego, una vez que haya identificado y redireccionado las páginas específicas como se indicó anteriormente, eliminaré todo el resto (basura) y deseo enviar a los usuarios a la página de inicio (¿o tal vez a una publicación aleatoria?).

    Entonces, 2 preguntas aquí:

    1. ¿Cómo creo la regla que dice "para todo, excepto para los archivos ya redirigidos como anteriormente, haga esto"

    2. ¿Cómo evitaría que esa regla se aplique a las nuevas páginas y publicaciones que cree a partir de ahora?

    Una idea es que al eliminar, obtendré una página 404 que no se encuentra, ¿por lo tanto, debería crear la regla para la página 404 en sí? ¿Es eso lo que quiero hacer?

    Como he dicho, el sitio ha sido mal desarrollado (con el cliente instruyendo a las personas a simplemente "abrir una página" sin tener en cuenta la arquitectura adecuada, el SEO, etc.) - prácticamente no tiene ranking ni enlaces externos/de respaldo Para preocuparme, pero quiero entender el mejor enfoque desde una perspectiva de SEO y desarrollo adecuado.

  5. Además, ¿debería mover las imágenes existentes, etc., al directorio wp-content o dejarlas en su (s) sub-directorio (s)? Mi inclinación es realmente ir por un 'barrido limpio' - deshacerme de todo lo que parece desordenado, pero no estoy seguro de si esto sería más trabajo del que vale la pena ...

Gracias de antemano por cualquier y toda la orientación.

5
CJN

Hola @CJN: ,

Su primera pregunta, moviendo el directorio de WordPress se maneja de manera diferente al resto.

Mover WordPress desde el subdirectorio a la raíz:

Ingrese a /wp-config.php y agregue lo siguiente a las definiciones (usando el dominio de su cliente en lugar de example.com por supuesto):

define('WP_SITEURL', 'http://example.com');
define('WP_HOME',    WP_SITEURL);

301 Redirecciones usando template_loader y wp_safe_redirect()

Puede resolver la mayoría del resto de sus preguntas modificando .htaccess como @ Kau-Boy muestra cómo, o simplemente puede hacerlo en PHP . WordPress tiene un gancho template_redirect que puede usar para esto junto con la función wp_safe_redirect() para redirigir con un código de estado HTTP 301. Como puede ver, el resto es simplemente brutal para el código PHP y un poco de magia de expresión regular. Puede colocar este código prácticamente en cualquier lugar en el archivo functions.php de su tema:

add_action('template_redirect','my_template_redirect');
function my_template_redirect() {
  $redirect_to = false;
  list($url_path,$params) = explode('?',$_SERVER['REQUEST_URI']);
  $path_parts = explode('/',trim($url_path,'/'));
  switch ($path_parts[0]) {
    case 'products-directory':
      $redirect_to = '/products-top-level-page';
      break;
    case 'about-directory':
      $redirect_to = '/about-top-level-page';
      break;
    case 'services-directory':
      $redirect_to = '/services-top-level-page';
      break;
    default:
      if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
        $category = str_replace('.html','',$match[1]);
        $redirect_to = "/newcategory/{$category}";
      } else {
        // Do whatever else you need here
      }
  }
  if ($redirect_to) {
    wp_safe_redirect($redirect_to,301);
    exit();
  }
}

¿Considerar la usabilidad y no solo SEO?

Te preguntaría si realmente quieres hacer el # 2? OMI que hace que un sitio sea mucho menos utilizable para los usuarios que uno que está optimizado únicamente para el SEO percibido (y como fundador y coorganizador de una vez de este grupo No soy un neófito de SEO). en lugar de ver, simplemente suelta el "-directory" del primer segmento de la ruta de la URL. JMTCW de todos modos.

¿Generando 404 páginas?

Si necesitas emitir un 404 puedes hacerlo con el encabezado:

header("HTTP/1.0 404 Not Found");
exit;

Sin embargo, creo que eso no es lo que quieres hacer, ¿verdad? Creo que puedes lograr la lógica de redirección que necesites modificando la función PHP de arriba y respondiendo a la solicitud HTTP con un 301, ¿verdad?

Importando imágenes a la biblioteca de medios y redirigiendo 301

Podría moverlos a la biblioteca de medios y hacerlo le permitiría gestionarlos avanzando. Aquí hay un complemento que podría ayudar (aunque no estoy seguro de si está trabajando con 3.0; de lo contrario, podría ser una buena base de código con la que trabajar):

Codificación fija de la imagen 301 Redirecciona utilizando una matriz

Entonces, dado que sería una cosa de una sola vez podría simplemente codificar las URL de sus imágenes en una matriz y usarlas para que coincidan en su función de redireccionamiento. La modificación del valor predeterminado en la instrucción de cambio del código anterior podría tener este aspecto:

default:
  if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
    $category = str_replace('.html','',$match[1]);
    $redirect_to = "/newcategory/{$category}";
  } else {
    $images = array(
      '/images/image1.jpg' => '/wp-content/uploads/2010/08/image1.jpg',
      '/images/image2.jpg' => '/wp-content/uploads/2010/08/image2.jpg',
      '/images/image3.jpg' => '/wp-content/uploads/2010/08/image3.jpg',
      );
    if (in_array($url_path,$images)) {
      $redirect_to = $images[$url_path];
    } else  {
      // Do whatever else you need here
    }
  }

Usar preg_match() a 301 Redirigir imágenes por patrón de URL

Por supuesto, si las URL de sus imágenes siguen un patrón, podría optimizar gran parte o la totalidad de la matriz de imágenes utilizando una preg_match() en su lugar, así:

if (preg_match('#^/images/(.*)$#',$url_path,$match)) {
  $redirect_to = "/wp-content/uploads/2010/08/{$match[1]}";
}

¿Espero que esto ayude?

8
MikeSchinkel

Hay un complemento para cambiar de un enlace permanente a otro, pero estoy bastante seguro de que esto no será suficiente para sus necesidades. Tendrá que usar algunas reglas de reescritura de .htaccess. Intento darte algunos ejemplos para tu necesidad (no estoy seguro de si son todos correctos). Incluya todas esas líneas en un archivo llamado ".htaccess" en la raíz de su servidor. Fuera de las reglas de wordpress:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# your rules start here. Keep the following lines that has been produced by wordpress
RewriteBase /
RewriteRule wp/(.*)$ /$1 [R=301]
RewriteRule /products-directory/(.*)$ /products-top-level-page [R=301]
RewriteRule /about-directory/(.*)$ /about-top-level-page [R=301]
RewriteRule /services-directory/$ /services-top-level-page [R=301]
RewriteRule /same-Word(.*)$ /newcategory/$1 [R=301]

El indicador [R = 301] le indicará al navegador del cliente o al motor de búsqueda que es un redireccionamiento permanente.

Probablemente querrá actualizar todos los enlaces permanentes dentro de su base de datos de wordpress. Escribí un artículo sobre la actualización de una cadena en la base de datos . Lamentablemente no he traducido el post todavía. Pero las consultas deben ser claras, de lo contrario solo use la documentación de MySQL.

1
2ndkauboy

Uso esto: Redirecciones 301 simples plugin - lo usé en algunas páginas antes, y pronto voy a mover mi sitio de diseño web con todos sus archivos y carpetas dentro de mis archivos WP.

0
Steve Shearer