Saltar al contenido
🛠 Cómo añadir la extensión .html a las URLs de WordPress

🛠 Cómo añadir la extensión .html a las URLs de WordPress

Añadir .html a las URL de WordPress sin plugins: tres métodos más eliminación segura con redirecciones.

¿Migró su sitio desde Joomla o HTML estático a WordPress y los buscadores ya indexaron cientos de páginas con terminación .html? No quiere perder posiciones, pero los ajustes de enlaces permanentes estándar no ofrecen ese formato.

En la práctica, el .html en una URL no es cuestión de estética. Es un seguro contra errores 404 durante una migración, cuando la estructura antigua site.ru/page.html cambia a site.ru/page/. Cada enlace roto en el índice significa tráfico perdido. Afortunadamente, WordPress permite añadir la extensión .html de forma nativa, sin trucos ni plugins.

A continuación, tres métodos: desde el panel de administración (el más sencillo), mediante código en functions.php y para tipos de contenido personalizados. Además, la eliminación segura del .html con una redirección si ya no necesita el formato.

💡 Resumen rápido:

  • Añada .html desde Ajustes → Enlaces permanentes, 30 segundos, sin código
  • Si el método nativo no funciona, edite functions.php (3 líneas)
  • Para tipos de contenido personalizados, el filtro post_type_link
  • Elimine .html sin errores 404, una redirección en .htaccess

Por qué los enlaces de WordPress necesitan la extensión.html

En la era de los sitios estáticos, cada página era un archivo físico .html en el servidor. El navegador solicitaba site.ru/about.html y recibía un documento ya preparado. WordPress funciona de manera distinta: todas las URL son virtuales, servidas por index.php mediante mod_rewrite.

Pero la costumbre de las terminaciones de «archivo» sigue viva. Escenarios típicos donde el .html es realmente necesario:

  • Rediseño o migración desde un sitio estático. Las URL antiguas ya están en el índice de Google y Yandex. Cambiarlas sin una redirección garantiza una caída de posiciones durante 2 a 4 meses.
  • Migración desde Joomla, Drupal, ModX. Muchos CMS de la vieja escuela generaban .html al final de la dirección por defecto.
  • Requisito del cliente. El cliente «lo quiere como estaba», punto final. Discutir lleva más tiempo que simplemente hacerlo.

WordPress resuelve los tres casos sin un solo plugin.

Método uno: desde el panel de administración

La ruta más rápida. Vaya a Ajustes → Enlaces permanentes y seleccione la opción «Estructura personalizada».

En el campo de estructura, añada .html al final de la plantilla. Por ejemplo:

1/%category%/%postname%.html

O si no necesita categorías:

1/%postname%.html

Haga clic en «Guardar cambios». Listo. Todas las URL de entradas nuevas y existentes obtendrán la terminación .html. Este método no afecta a las páginas del sitio (page); ellas necesitarán el código de la siguiente sección.

Nota: si el sitio ya tiene enlaces indexados sin .html, WordPress NO redirige automáticamente desde las URL antiguas a las nuevas. Necesitará un plugin de redirección independiente o reglas en .htaccess.

Método dos: mediante functions.php

A veces el panel de administración no cumple: el tema u otro plugin sobrescribe la estructura de enlaces. Entonces vamos al código.

Añada esto al functions.php de su tema hijo o mediante el plugin Code Snippets:

1/**
2 * Adds .html to the end of WordPress page URLs.
3 * After inserting the code, go to Settings → Permalinks
4 * and click "Save Changes" to flush the rewrite rules cache.
5 */
6add_action('init', function() {
7 global $wp_rewrite;
8 if (! strpos($wp_rewrite->get_page_permastruct(), '.html')) {
9 $wp_rewrite->page_structure .= '.html';
10 }
11});

Lo que sucede aquí: el gancho init se ejecuta en cada carga de WordPress y añade .html a la estructura de URL de las páginas mediante la propiedad page_structure del objeto global $wp_rewrite. La comprobación strpos evita la doble adición si el código se inserta dos veces.

Después de añadir el código, asegúrese de ir a Ajustes → Enlaces permanentes y hacer clic en «Guardar cambios». Sin este paso, WordPress no reconstruirá la caché de reglas de reescritura y las nuevas URL no funcionarán, obtendrá un error 404.

Si el método nativo y el código no ayudan, puede usar el plugin Permalink Manager Lite. Tiene más de 100.000 instalaciones activas, una calificación de 5 estrellas y admite reglas de reescritura para cualquier tipo de contenido, incluyendo taxonomías y WooCommerce.

Cómo añadir.html a tipos de contenido personalizados (CPT)

Su sitio tiene un portafolio, testimonios, productos u otro tipo de contenido creado mediante register_post_type. La pantalla estándar de «Enlaces permanentes» no les afecta. Trabajamos a través del filtro post_type_link:

1/**
2 * Adds .html extension to the URL of the custom post type "portfolio".
3 * Replace 'portfolio' with your CPT slug.
4 */
5function sdstudio_cpt_html_permalink($post_link, $post) {
6 if ($post->post_type === 'portfolio') {
7 return home_url('/portfolio/' . $post->post_name . '.html');
8 }
9 return $post_link;
10}
11add_filter('post_type_link', 'sdstudio_cpt_html_permalink', 10, 2);

Después de insertar el código, vaya de nuevo a Ajustes → Enlaces permanentes → Guardar cambios. El filtro post_type_link funciona sobre la marcha: WordPress construye la URL, usted la intercepta para el tipo de contenido deseado y añade .html.

Si el CPT está registrado con un slug personalizado ('rewrite' => array('slug' => 'works')), use ese en home_url() en lugar del nombre de tipo estándar.

Cómo eliminar.html sin romper la indexación

¿Decidió volver a URL limpias sin extensiones? Simplemente eliminar .html de los ajustes no es suficiente. Los enlaces antiguos que ya están en los índices de los buscadores se convertirán en errores 404.

Pasos a seguir:

  • Elimine .html del campo «Estructura personalizada» en Ajustes → Enlaces permanentes y guarde.
  • Elimine el código de functions.php si lo añadió.
  • Añada una redirección en .htaccess (en la raíz del sitio, antes del bloque # BEGIN WordPress):
1RewriteEngine On
2RewriteCond %{REQUEST_FILENAME} !-f
3RewriteRule ^portfolio/(.+)\.html$ /portfolio/$1 [R=301,L]

Para entradas y páginas normales, la regla es similar, solo reemplace /portfolio/ por el segmento necesario. R=301 indica a los buscadores que el cambio es permanente: la autoridad del enlace se transfiere a la nueva URL.

Compruebe el resultado: abra la dirección antigua con .html en un navegador, debería redirigir a la versión sin la extensión. Luego verifique Google Search Console en un par de semanas y confirme que el número de errores 404 indexados está disminuyendo.

Video: añadiendo.html en 2 minutos

Una breve demostración de los tres métodos en un sitio WordPress real:

⁉️🤔 Preguntas frecuentes

¿El método funciona con taxonomías, categorías y etiquetas?

La pantalla estándar de enlaces permanentes no afecta a las taxonomías. Las categorías y etiquetas necesitarían sus propias reglas de reescritura mediante add_rewrite_rule() o la funcionalidad de Permalink Manager Pro. Pero en la práctica, el .html en las URL de categorías se usa poco: los buscadores manejan /category/seo/ perfectamente sin una extensión.

¿Qué sucede con los enlaces antiguos sin.html después de cambiar la estructura?

WordPress no crea una redirección automática de las URL antiguas a las nuevas. Si el sitio ya está indexado, después de cambiar la estructura los enlaces antiguos comenzarán a devolver errores 404. Solución: un plugin de redirección (por ejemplo, Redirection) con seguimiento automático de cambios de enlaces permanentes. Este recuerda el slug antiguo y aplica un 301 automáticamente.

¿Puedo usar.php,.htm u otra extensión?

Técnicamente sí, WordPress procesa cualquier cadena en el campo «Estructura personalizada». Pero desde la perspectiva de los buscadores, .php parece sospechoso (normalmente revela la tecnología del servidor) y .htm es un formato obsoleto de la era de Windows 3.1. La extensión .html es neutral, familiar y no genera preguntas de usuarios ni bots de búsqueda.

¿Esto ayudará al migrar un blog de Blogger a WordPress?

Sí, este es un escenario clásico. Blogger servía URL en el formato /2024/06/post-title.html por defecto. Al importar a WordPress mediante la herramienta nativa, la estructura se rompe a /2024/06/post-title/. Añadir .html en los ajustes de enlaces permanentes preserva la compatibilidad, todas las direcciones antiguas continúan funcionando sin redirecciones manuales.

¿Debería añadir.html?: conclusión final

En resumen: para un proyecto WordPress completamente nuevo, el .html no es necesario. Las URL limpias como site.ru/post-name/ son el estándar que tanto usuarios como buscadores entienden.

Pero hay dos escenarios donde el .html está plenamente justificado: migrar desde un sitio estático u otro CMS, y migrar desde Blogger. En ambos casos, conserva sus posiciones en buscadores y se ahorra semanas de redirecciones manuales.

La ruta más fiable es el ajuste nativo desde el panel de administración. Si eso no funciona, functions.php. Para los CPT, el filtro post_type_link. Los tres métodos no requieren plugins y no añaden carga al sitio. Y cuando el .html ya no sea necesario, .htaccess con una redirección 301 transfiere limpiamente la autoridad a las nuevas URL.