Si tienes una estructura de páginas padre y páginas hijas o subpáginas, notarás que las urls de las subpáginas se basan en la página padre. En este artículo veremos cómo quitar el slug de la página padre de la url que se genera, lo haremos directamente a través de código.
Generalidades
Si tienes una estructura de páginas similar a la siguiente imagen:

La estructura de URL para una subpágina será en base a la página padre, por ejemplo:
https://dominio.com/grupo-ejemplo/mi-pagina-de-ejemplo/
Resultado Final
Sin embargo lo que queremos obtener es una URL que no tenga referencias de la página principal, es decir:
https://dominio.com/mi-pagina-de-ejemplo/
Código para cambiar la url
Antes de usar este código tienes que cambiar el enlace permanente de la página hija, puedes agregar un carater “_” delante por ejemplo, esto es debido a que si usas una parte del nombre inicial WordPress agregará igualmente el slug de la página padre.

Luego puedes agregar el siguiente código:
add_action('init', 'dcms_custom_rewrite_rule', 10, 0);
function dcms_custom_rewrite_rule() {
$id_page = 2;
$new_url='mi-pagina';
add_rewrite_rule("^{$new_url}/?$","index.php?page_id={$id_page}","top");
}
En el código anterior:
- Se usa el Hook init que hace referencia a la función dcms_custom_rewrite_rule
- Dentro de esta función hay dos variables que debes cambiar, la primera es el ID de la página
- La otra variable es el nuevo texto para el slug
- Con los valores de estas variables entonces se usa la función de WordPress add_rewrite_rule() para cambiar la url
Conclusión
Como has podido comprobar, puedes cambiar las urls de las páginas hijas y remover el slug de la página padre, hemos visto como realizar esto de manera simple a través de código.
Muy buen artículo, como siempre, John. Una consulta ya no tanto a nivel de código sino a nivel de SEO, no habría algún tipo de penalización debido a modificar esa url aunque a nivel de estructura siga manteniendo la estructura padre-hijo.
Un saludo y muchas gracias por tus artículos.
Hola Francisco, ese artículo precisamente surgió por un pedido de un cliente que contrató una asesoría SEO. Lo que sucedió es que el cliente tenía ya posicionada la página hija, pero con la url que no incluía la página padre. Sin embargo por organización, cambió la estructura de páginas, es decir, de cara al SEO quería mantener la url anterior, pero para organización le servía una página padre.
En conclusión, si ya tienes posicionada una página con una url directa, pero en algún momento la volviste subpágina, si que te puede servir este artículo.
Muchas gracias John, perfecta la explicación como siempre y gracias por tus vídeos y aclaraciones. Felicidades por el trabajo.
Hola, como te afecta con el sitemap, ya que si se genera con yoast seo, te genera el URL original.?
o eso no afecta?
Hola, simplemente te genera la url sin la página padre
Buenas Jhon,
Primera vez que comento, pero en bastantes momentos me ha salvado tu contenido. De las webs con más valor único en el sector sin duda alguna. Brutal.
Mi duda es: en mi caso tengo que hacer esto para unos 20 y pico artículos. ¿En este caso tendría que repetir el código por cada URL, o hay alguna manera de juntarlos en 1?.
Saludos y muchas gracias.
Hola, puedes abreviar leyendo un array de slugs de páginas, consultando con las funciones de WordPress todas las páginas que te interesan, una vez tengas los slugs si que podrías abreviar el código.
Buenas de nuevo,
Con ayuda de mi hermano informático pude hacerlo. Aquí dejo el resultado probado por si alguien tenía mi misma necesidad:
add_action('init', 'dcms_custom_rewrite_rule', 10, 0);
function dcms_custom_rewrite_rule() {
$id_paginas = array("1", "2");
$url_paginas = array("url-ejemplo-1", "url-ejemplo-2");
for ($contador = 0; $contador <= count($id_paginas.count); $contador++) {
$id_page = $id_paginas[$contador];
$new_url= $url_paginas[$contador];
add_rewrite_rule("^{$new_url}/?$","index.php?page_id={$id_page}","top");
}
}
Saludos.
Hola Javier, gracias por el aporte 🙂