{"id":6374,"date":"2022-08-24T11:58:00","date_gmt":"2022-08-24T09:58:00","guid":{"rendered":"https:\/\/www.loading.es\/blog\/?p=6374"},"modified":"2026-04-21T10:19:48","modified_gmt":"2026-04-21T08:19:48","slug":"evitar-errores-con-url-amigables-en-prestashop-y-wordpress","status":"publish","type":"post","link":"https:\/\/www.loading.es\/blog\/evitar-errores-con-url-amigables-en-prestashop-y-wordpress\/","title":{"rendered":"Evitar errores con URL amigables en Prestashop y WordPress"},"content":{"rendered":"\n<p>Los <strong>errores con URL amigables en Prestashop y WordPress<\/strong> suelen aparecer cuando varias instalaciones comparten dominio, subdirectorios o reglas de reescritura. El problema no siempre est\u00e1 en el mismo punto: a veces falla el CMS, a veces el <code>.htaccess<\/code> y otras veces la configuraci\u00f3n del servidor.<\/p>\n\n\n\n<p>Esto se ve mucho en escenarios como estos:<\/p>\n\n\n\n<ul>\n<li><code>dominio.com<\/code> en producci\u00f3n y <code>dominio.com\/blog<\/code> para WordPress<\/li>\n\n\n\n<li><code>dominio.com<\/code> con WordPress y <code>dominio.com\/tienda<\/code> con PrestaShop<\/li>\n\n\n\n<li>una instalaci\u00f3n principal y otra en <code>dominio.com\/pruebas<\/code><\/li>\n<\/ul>\n\n\n\n<p>En todos ellos, el s\u00edntoma suele ser parecido: <strong>la portada carga, pero las URLs internas devuelven 404<\/strong>, se crean bucles, las redirecciones pisan otra instalaci\u00f3n o el cambio solo funciona en Apache y no en nginx.<\/p>\n\n\n\n<p>Aqu\u00ed vamos a centrarnos en <strong>diagnosticar qu\u00e9 est\u00e1 fallando y c\u00f3mo corregirlo<\/strong> sin mezclar soluciones que solo sirven en casos concretos.<\/p>\n\n\n\n<p><strong><em>Tabla de Contenidos<\/em><\/strong>:<\/p>\n\n\n\n<div class=\"wp-block-aioseo-table-of-contents\"><ul><li><a href=\"#aioseo-por-que-fallan-las-url-amigables-en-wordpress-y-prestashop\">Por qu\u00e9 fallan las URL amigables en WordPress y PrestaShop<\/a><\/li><li><a href=\"#aioseo-errores-mas-comunes-al-usar-wordpress-y-prestashop-en-el-mismo-dominio\">Errores m\u00e1s comunes al usar WordPress y PrestaShop en el mismo dominio<\/a><ul><\/ul><\/li><li><a href=\"#aioseo-como-detectar-si-el-problema-esta-en-htaccess-en-el-cms-o-en-el-servidor\">C\u00f3mo detectar si el problema est\u00e1 en .htaccess, en el CMS o en el servidor<\/a><ul><\/ul><\/li><li><a href=\"#aioseo-errores-habituales-de-url-amigables-en-wordpress\">Errores habituales de URL amigables en WordPress<\/a><ul><\/ul><\/li><li><a href=\"#aioseo-errores-habituales-de-url-amigables-en-prestashop\">Errores habituales de URL amigables en PrestaShop<\/a><ul><\/ul><\/li><li><a href=\"#aioseo-apache-y-nginx-no-gestionan-las-url-amigables-de-la-misma-forma\">Apache y nginx no gestionan las URL amigables de la misma forma<\/a><ul><\/ul><\/li><li><a href=\"#aioseo-conclusion\">Conclusi\u00f3n<\/a><\/li><li><a href=\"#aioseo-preguntas-frecuentes-sobre-url-amigables-en-prestashop-y-wordpress\">Preguntas frecuentes sobre URL amigables en Prestashop y WordPress (FAQ)<\/a><\/li><\/ul><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.loading.es\/hosting-wordpress\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" loading=\"lazy\" width=\"1000\" height=\"100\" src=\"https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-hosting-wordpress.png\" alt=\"Oferta Contratar Hosting WordPress\" class=\"wp-image-8079\" srcset=\"https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-hosting-wordpress.png 1000w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-hosting-wordpress-300x30.png 300w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-hosting-wordpress-768x77.png 768w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-hosting-wordpress-850x85.png 850w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-por-que-fallan-las-url-amigables-en-wordpress-y-prestashop\">Por qu\u00e9 fallan las URL amigables en WordPress y PrestaShop<\/h2>\n\n\n\n<p>Las URL amigables funcionan gracias a una capa de reescritura. El CMS recibe una URL limpia, como <code>\/blog\/mi-articulo\/<\/code> o <code>\/tienda\/camiseta-azul.html<\/code>, y la traduce a su ruta interna real.<\/p>\n\n\n\n<p>Cuando esa traducci\u00f3n falla, el error suele venir de uno de estos frentes:<\/p>\n\n\n\n<ul>\n<li><strong>El CMS no ha regenerado bien sus reglas<\/strong><\/li>\n\n\n\n<li><strong>La ruta base no coincide con la carpeta real<\/strong><\/li>\n\n\n\n<li><strong>El servidor no est\u00e1 aplicando la reescritura como espera el CMS<\/strong><\/li>\n\n\n\n<li><strong>Otra instalaci\u00f3n del mismo dominio est\u00e1 interfiriendo<\/strong><\/li>\n<\/ul>\n\n\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap');\n\n#comp-ld-108, #comp-ld-108 * { box-sizing: border-box; }\n#comp-ld-108 {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  color: inherit;\n  max-width: 720px;\n  margin: 2rem auto;\n  padding: 0;\n}\n\n#comp-ld-108 .ld-diag-card {\n  background: #faf9f7;\n  border: 0.5px solid #e0ddd6;\n  border-radius: 14px;\n  overflow: hidden;\n}\n\n#comp-ld-108 .ld-diag-header {\n  background: #37363d;\n  padding: 20px 24px 18px;\n  display: flex;\n  align-items: center;\n  gap: 14px;\n}\n\n#comp-ld-108 .ld-diag-header-icon {\n  width: 40px;\n  height: 40px;\n  background: #db7424;\n  border-radius: 10px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n}\n\n#comp-ld-108 .ld-diag-header-icon svg {\n  width: 22px;\n  height: 22px;\n}\n\n#comp-ld-108 .ld-diag-header-title {\n  margin: 0 0 2px;\n  font-size: 16px;\n  font-weight: 500;\n  color: #fff;\n  line-height: 1.35;\n}\n\n#comp-ld-108 .ld-diag-header-desc {\n  margin: 0;\n  font-size: 13px;\n  color: #b0aeb5;\n  line-height: 1.45;\n}\n\n#comp-ld-108 .ld-diag-progress {\n  padding: 14px 24px 0;\n  display: none;\n  align-items: center;\n  gap: 10px;\n}\n\n#comp-ld-108 .ld-diag-step-dots {\n  display: flex;\n  gap: 6px;\n}\n\n#comp-ld-108 .ld-diag-dot {\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  background: #e0ddd6;\n  transition: all 0.3s ease;\n}\n\n#comp-ld-108 .ld-diag-dot.is-active {\n  background: #db7424;\n  transform: scale(1.25);\n}\n\n#comp-ld-108 .ld-diag-dot.is-done {\n  background: #37363d;\n}\n\n#comp-ld-108 .ld-diag-step-label {\n  font-size: 12px;\n  color: #888;\n  margin-left: auto;\n}\n\n#comp-ld-108 .ld-diag-body {\n  padding: 22px 24px 24px;\n}\n\n#comp-ld-108 .ld-diag-question {\n  font-size: 15px;\n  font-weight: 500;\n  color: #37363d;\n  margin: 0 0 6px;\n  line-height: 1.4;\n}\n\n#comp-ld-108 .ld-diag-hint {\n  font-size: 12px;\n  color: #999;\n  margin: 0 0 18px;\n  line-height: 1.45;\n}\n\n#comp-ld-108 .ld-diag-options {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n\n#comp-ld-108 .ld-diag-btn,\n#comp-ld-108 .ld-diag-back,\n#comp-ld-108 .ld-diag-restart {\n  font-family: inherit;\n}\n\n#comp-ld-108 .ld-diag-btn {\n  background: #fff;\n  border: 1.5px solid #e0ddd6;\n  border-radius: 10px;\n  padding: 13px 16px;\n  text-align: left;\n  cursor: pointer;\n  font-size: 14px;\n  color: #37363d;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  transition: border-color 0.2s ease, background 0.2s ease, transform 0.15s ease;\n  width: 100%;\n}\n\n#comp-ld-108 .ld-diag-btn:hover {\n  border-color: #db7424;\n  background: #fdf4ec;\n  transform: translateX(3px);\n}\n\n#comp-ld-108 .ld-diag-btn-icon {\n  width: 32px;\n  height: 32px;\n  border-radius: 8px;\n  background: #f3f1ee;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  font-size: 16px;\n}\n\n#comp-ld-108 .ld-diag-btn:hover .ld-diag-btn-icon {\n  background: #fbe6d0;\n}\n\n#comp-ld-108 .ld-diag-btn-label {\n  flex: 1;\n  line-height: 1.35;\n}\n\n#comp-ld-108 .ld-diag-btn-arrow {\n  color: #ccc;\n  font-size: 16px;\n  transition: color 0.2s ease;\n}\n\n#comp-ld-108 .ld-diag-btn:hover .ld-diag-btn-arrow {\n  color: #db7424;\n}\n\n#comp-ld-108 .ld-diag-result {\n  animation: ldDiagFadeIn108 0.4s ease;\n}\n\n@keyframes ldDiagFadeIn108 {\n  from {\n    opacity: 0;\n    transform: translateY(8px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n#comp-ld-108 .ld-diag-result-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  background: #db7424;\n  color: #fff;\n  font-size: 12px;\n  font-weight: 500;\n  border-radius: 6px;\n  padding: 4px 10px;\n  margin-bottom: 14px;\n}\n\n#comp-ld-108 .ld-diag-result-title {\n  font-size: 17px;\n  font-weight: 500;\n  color: #37363d;\n  margin: 0 0 10px;\n  line-height: 1.4;\n}\n\n#comp-ld-108 .ld-diag-result-desc {\n  font-size: 14px;\n  color: #555;\n  line-height: 1.65;\n  margin: 0 0 18px;\n}\n\n#comp-ld-108 .ld-diag-result-steps {\n  margin: 0 0 20px;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n\n#comp-ld-108 .ld-diag-result-step {\n  display: flex;\n  align-items: flex-start;\n  gap: 10px;\n}\n\n#comp-ld-108 .ld-diag-step-num {\n  width: 24px;\n  height: 24px;\n  border-radius: 50%;\n  background: #37363d;\n  color: #fff;\n  font-size: 12px;\n  font-weight: 500;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  margin-top: 1px;\n}\n\n#comp-ld-108 .ld-diag-step-text {\n  font-size: 13px;\n  color: #444;\n  line-height: 1.55;\n}\n\n#comp-ld-108 .ld-diag-step-text code {\n  background: #f0ece6;\n  border-radius: 4px;\n  padding: 1px 5px;\n  font-family: 'SF Mono', Consolas, 'Liberation Mono', Menlo, monospace;\n  font-size: 12px;\n  color: #37363d;\n}\n\n#comp-ld-108 .ld-diag-step-text strong {\n  font-weight: 700;\n}\n\n#comp-ld-108 .ld-diag-step-text em {\n  font-style: italic;\n}\n\n#comp-ld-108 .ld-diag-result-alert {\n  background: #fdf4ec;\n  border-left: 3px solid #db7424;\n  border-radius: 0 8px 8px 0;\n  padding: 10px 14px;\n  font-size: 13px;\n  color: #6b4c2a;\n  margin-bottom: 18px;\n  line-height: 1.55;\n}\n\n#comp-ld-108 .ld-diag-actions {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n#comp-ld-108 .ld-diag-restart {\n  background: transparent;\n  border: 1.5px solid #37363d;\n  border-radius: 8px;\n  padding: 9px 16px;\n  font-size: 13px;\n  color: #37363d;\n  cursor: pointer;\n  transition: background 0.2s ease;\n}\n\n#comp-ld-108 .ld-diag-restart:hover {\n  background: #f0ede8;\n}\n\n#comp-ld-108 .ld-diag-back {\n  background: transparent;\n  border: 1.5px solid #e0ddd6;\n  border-radius: 8px;\n  padding: 9px 16px;\n  font-size: 13px;\n  color: #888;\n  cursor: pointer;\n  transition: background 0.2s ease;\n}\n\n#comp-ld-108 .ld-diag-back:hover {\n  background: #f5f3f0;\n}\n\n#comp-ld-108 .ld-diag-btn:focus-visible,\n#comp-ld-108 .ld-diag-back:focus-visible,\n#comp-ld-108 .ld-diag-restart:focus-visible {\n  outline: 2px solid #00bcdf;\n  outline-offset: 2px;\n}\n\n@media (max-width: 640px) {\n  #comp-ld-108 .ld-diag-header {\n    padding: 18px 18px 16px;\n    align-items: flex-start;\n  }\n\n  #comp-ld-108 .ld-diag-progress,\n  #comp-ld-108 .ld-diag-body {\n    padding-left: 18px;\n    padding-right: 18px;\n  }\n\n  #comp-ld-108 .ld-diag-actions {\n    flex-direction: column;\n  }\n\n  #comp-ld-108 .ld-diag-actions button {\n    width: 100%;\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  #comp-ld-108 * {\n    transition: none !important;\n    animation: none !important;\n  }\n}\n<\/style>\n\n<div id=\"comp-ld-108\">\n  <div class=\"ld-diag-card\">\n    <div class=\"ld-diag-header\">\n      <div class=\"ld-diag-header-icon\">\n        <svg viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\">\n          <circle cx=\"11\" cy=\"11\" r=\"9\" stroke=\"white\" stroke-width=\"1.5\"\/>\n          <path d=\"M11 7v5l3 3\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\"\/>\n        <\/svg>\n      <\/div>\n      <div class=\"ld-diag-header-text\">\n        <div class=\"ld-diag-header-title\">Diagn\u00f3stico de URL amigables<\/div>\n        <p class=\"ld-diag-header-desc\">Responde 3 preguntas y obt\u00e9n la soluci\u00f3n exacta<\/p>\n      <\/div>\n    <\/div>\n    <div class=\"ld-diag-progress\" data-role=\"progress\" aria-hidden=\"true\">\n      <div class=\"ld-diag-step-dots\" data-role=\"dots\"><\/div>\n      <span class=\"ld-diag-step-label\" data-role=\"step-label\"><\/span>\n    <\/div>\n    <div class=\"ld-diag-body\" data-role=\"content\" aria-live=\"polite\"><\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function () {\n  const ROOT_ID = 'comp-ld-108';\n\n  const steps = [\n    {\n      q: '\u00bfQu\u00e9 tipo de servidor utiliza tu alojamiento?',\n      hint: 'Si usas Plesk o cPanel est\u00e1ndar, probablemente es Apache.',\n      options: [\n        { icon: '\u2699\ufe0f', label: 'Apache (cPanel, Plesk)', next: 's_apache' },\n        { icon: '\u26a1', label: 'nginx (Nginx Proxy Manager, VPS manual)', next: 's_nginx' },\n        { icon: '\u2753', label: 'No lo s\u00e9 con certeza', next: 's_check_server' }\n      ]\n    }\n  ];\n\n  const branches = {\n    s_apache: {\n      q: '\u00bfCu\u00e1l es la situaci\u00f3n de tu instalaci\u00f3n?',\n      hint: 'Piensa en c\u00f3mo est\u00e1 organizado tu dominio.',\n      options: [\n        { icon: '\ud83c\udf10', label: 'Un solo CMS en la ra\u00edz del dominio', next: 's_apache_root' },\n        { icon: '\ud83d\udcc1', label: 'CMS en un subdirectorio (\/blog, \/tienda\u2026)', next: 's_apache_subdir' },\n        { icon: '\ud83d\udd00', label: 'WordPress y PrestaShop conviviendo en el mismo dominio', next: 's_apache_both' }\n      ]\n    },\n    s_nginx: {\n      q: '\u00bfQu\u00e9 CMS est\u00e1 fallando?',\n      hint: 'nginx no usa .htaccess; la soluci\u00f3n va en la configuraci\u00f3n del servidor.',\n      options: [\n        { icon: '\ud83d\udcdd', label: 'WordPress con URLs internas en 404', next: 'r_nginx_wp' },\n        { icon: '\ud83d\uded2', label: 'PrestaShop con productos o categor\u00edas en 404', next: 'r_nginx_ps' },\n        { icon: '\ud83d\udd00', label: 'Ambos o no estoy seguro', next: 'r_nginx_both' }\n      ]\n    },\n    s_check_server: {\n      q: '\u00bfPuedes acceder al panel de tu alojamiento?',\n      hint: 'Esto nos ayuda a identificar el servidor sin necesidad de SSH.',\n      options: [\n        { icon: '\u2705', label: 'S\u00ed, tengo Plesk', next: 'r_check_plesk' },\n        { icon: '\u2705', label: 'S\u00ed, tengo cPanel', next: 'r_check_cpanel' },\n        { icon: '\u274c', label: 'Solo tengo acceso FTP o SSH', next: 'r_check_ftp' }\n      ]\n    },\n    s_apache_root: {\n      q: '\u00bfQu\u00e9 CMS es y cu\u00e1l es el s\u00edntoma exacto?',\n      hint: '',\n      options: [\n        { icon: '\ud83d\udcdd', label: 'WordPress \u2014 entradas o p\u00e1ginas devuelven 404', next: 'r_wp_permalink' },\n        { icon: '\ud83d\uded2', label: 'PrestaShop \u2014 productos o categor\u00edas en 404', next: 'r_ps_htaccess' },\n        { icon: '\ud83d\udd01', label: 'Cualquiera \u2014 la portada carga pero todo lo dem\u00e1s falla', next: 'r_rewrite_off' }\n      ]\n    },\n    s_apache_subdir: {\n      q: '\u00bfQu\u00e9 CMS est\u00e1 en el subdirectorio?',\n      hint: 'El RewriteBase del .htaccess debe coincidir con la ruta f\u00edsica.',\n      options: [\n        { icon: '\ud83d\udcdd', label: 'WordPress en \/blog u otro subdirectorio', next: 'r_wp_subdir' },\n        { icon: '\ud83d\uded2', label: 'PrestaShop en \/tienda u otro subdirectorio', next: 'r_ps_subdir' }\n      ]\n    },\n    s_apache_both: {\n      q: '\u00bfCu\u00e1l de los dos falla?',\n      hint: 'Puede que las reglas de reescritura de uno interfieran con el otro.',\n      options: [\n        { icon: '\ud83d\udcdd', label: 'Falla WordPress pero PrestaShop va bien', next: 'r_wp_conflict' },\n        { icon: '\ud83d\uded2', label: 'Falla PrestaShop pero WordPress va bien', next: 'r_ps_conflict' },\n        { icon: '\ud83d\udca5', label: 'Los dos fallan', next: 'r_both_conflict' }\n      ]\n    }\n  };\n\n  const results = {\n    r_wp_permalink: {\n      badge: 'WordPress \u00b7 Apache',\n      title: 'Regenera los enlaces permanentes',\n      desc: 'Es el primer paso siempre. WordPress necesita reescribir su .htaccess cuando cambias la estructura de URLs.',\n      steps: [\n        'Entra en <code>Ajustes \u2192 Enlaces permanentes<\/code>.',\n        'Sin cambiar nada, pulsa <strong>Guardar cambios<\/strong>.',\n        'Comprueba que el .htaccess contiene el bloque <code># BEGIN WordPress<\/code> con <code>RewriteBase \/<\/code>.',\n        'Si el archivo no se actualiza autom\u00e1ticamente, c\u00f3pialo manualmente desde el panel de Permalinks.'\n      ],\n      alert: 'Si el error persiste tras guardar, revisa que mod_rewrite est\u00e1 activado en el servidor y que el .htaccess tiene permisos de escritura (644).'\n    },\n    r_ps_htaccess: {\n      badge: 'PrestaShop \u00b7 Apache',\n      title: 'Regenera el .htaccess desde el panel de PrestaShop',\n      desc: 'PrestaShop genera su propio .htaccess. Si est\u00e1 corrupto o desactualizado, las URLs simplificadas dejan de funcionar.',\n      steps: [\n        'Entra en <code>Par\u00e1metros \u2192 SEO y URLs<\/code>.',\n        'Activa <strong>URL amigables<\/strong> si no lo est\u00e1.',\n        'Pulsa <strong>Generar el archivo .htaccess<\/strong> al final de la p\u00e1gina.',\n        'Verifica que el archivo generado existe en la ra\u00edz del dominio.'\n      ],\n      alert: 'Si el back office no carga, ve directamente a phpMyAdmin y revisa que <code>domain<\/code> y <code>physical_uri<\/code> en la tabla <code>ps_shop_url<\/code> apuntan a la ra\u00edz correcta.'\n    },\n    r_rewrite_off: {\n      badge: 'Apache \u00b7 mod_rewrite',\n      title: 'mod_rewrite no est\u00e1 activo o no se aplica',\n      desc: 'Si la portada carga (el index.php se ejecuta) pero todas las URLs internas fallan, lo m\u00e1s habitual es que mod_rewrite est\u00e9 desactivado o que el .htaccess no se interprete.',\n      steps: [\n        'En Plesk: comprueba en <code>Configuraci\u00f3n de Apache y nginx<\/code> que est\u00e1 activo el m\u00f3dulo rewrite.',\n        'Verifica que existe un .htaccess en la carpeta ra\u00edz de la instalaci\u00f3n.',\n        'Aseg\u00farate de que el .htaccess contiene <code>RewriteEngine On<\/code>.',\n        'Si tienes acceso SSH, ejecuta <code>apache2ctl -M | grep rewrite<\/code> para confirmar.'\n      ],\n      alert: null\n    },\n    r_wp_subdir: {\n      badge: 'WordPress \u00b7 Subdirectorio',\n      title: 'RewriteBase y direcci\u00f3n del sitio mal configurados',\n      desc: 'Cuando WordPress vive en un subdirectorio, tanto el .htaccess como los ajustes del CMS deben reflejar esa ruta.',\n      steps: [\n        'Abre el .htaccess dentro de la carpeta del subdirectorio (p.ej. <code>\/blog\/.htaccess<\/code>).',\n        'Cambia <code>RewriteBase \/<\/code> a <code>RewriteBase \/blog\/<\/code>.',\n        'Cambia <code>RewriteRule . \/index.php<\/code> a <code>RewriteRule . \/blog\/index.php<\/code>.',\n        'En <code>Ajustes \u2192 General<\/code> de WordPress, confirma que <em>Direcci\u00f3n de WordPress<\/em> incluye <code>\/blog<\/code> y <em>Direcci\u00f3n del sitio<\/em> es la URL p\u00fablica correcta.',\n        'Guarda los enlaces permanentes una vez m\u00e1s para aplicar.'\n      ],\n      alert: 'Si no puedes entrar al panel, corrige los valores directamente en wp_options: las filas siteurl y home deben tener la URL con el subdirectorio.'\n    },\n    r_ps_subdir: {\n      badge: 'PrestaShop \u00b7 Subdirectorio',\n      title: 'physical_uri y URL base de la tienda mal configurados',\n      desc: 'PrestaShop en subdirectorio necesita que la base de datos y el .htaccess coincidan con la ruta real.',\n      steps: [\n        'Entra en phpMyAdmin y busca la tabla <code>ps_shop_url<\/code>.',\n        'Aseg\u00farate de que <code>physical_uri<\/code> es <code>\/tienda\/<\/code> (con barra al final).',\n        'Regenera el .htaccess desde <code>SEO y URLs<\/code> una vez corregido.',\n        'Borra la cach\u00e9 de PrestaShop desde <code>Par\u00e1metros avanzados \u2192 Rendimiento<\/code>.'\n      ],\n      alert: null\n    },\n    r_wp_conflict: {\n      badge: 'Conflicto WordPress vs PrestaShop',\n      title: 'El .htaccess de la ra\u00edz pisa las reglas de WordPress',\n      desc: 'Cuando PrestaShop est\u00e1 en la ra\u00edz y WordPress en un subdirectorio, las reglas de PS pueden capturar las peticiones antes de que WP las procese.',\n      steps: [\n        'Abre el .htaccess de la ra\u00edz y localiza el bloque de PrestaShop.',\n        'Aseg\u00farate de que WordPress tiene su propio .htaccess dentro de su carpeta (<code>\/blog\/.htaccess<\/code>) con <code>RewriteBase \/blog\/<\/code>.',\n        'En el .htaccess de la ra\u00edz, a\u00f1ade antes del bloque de PS: <code>RewriteRule ^blog\/ - [L]<\/code> para que PS no intercepte esas rutas.',\n        'Si el conflicto persiste, valora a\u00f1adir <code>RewriteOptions IgnoreInherit<\/code> en el .htaccess de WordPress, solo si hay herencia real de reglas.'\n      ],\n      alert: 'RewriteOptions IgnoreInherit solo ayuda cuando hay herencia expl\u00edcita de reglas padre\u2192hijo en Apache. No es una soluci\u00f3n universal para conflictos entre instalaciones.'\n    },\n    r_ps_conflict: {\n      badge: 'Conflicto PrestaShop vs WordPress',\n      title: 'Las reglas de WordPress en la ra\u00edz interfieren con PrestaShop',\n      desc: 'Si WordPress ocupa la ra\u00edz, su bloque del .htaccess puede redirigir todas las peticiones a su index.php antes de que PrestaShop las procese.',\n      steps: [\n        'Abre el .htaccess de la ra\u00edz.',\n        'A\u00f1ade una excepci\u00f3n antes del bloque de WordPress: <code>RewriteRule ^tienda\/ - [L]<\/code>.',\n        'Regenera el .htaccess de PrestaShop desde su panel (SEO y URLs).',\n        'Confirma que <code>physical_uri<\/code> en <code>ps_shop_url<\/code> apunta a <code>\/tienda\/<\/code>.'\n      ],\n      alert: null\n    },\n    r_both_conflict: {\n      badge: 'Conflicto total',\n      title: 'Separar las reglas de cada instalaci\u00f3n',\n      desc: 'Cuando los dos CMS fallan simult\u00e1neamente, casi siempre hay un .htaccess en la ra\u00edz que mezcla reglas de ambos o una URL base incorrecta en la base de datos.',\n      steps: [\n        'Haz una copia del .htaccess actual antes de tocarlo.',\n        'Aseg\u00farate de que cada CMS tiene su propio .htaccess en su propia carpeta.',\n        'El .htaccess de la ra\u00edz solo debe contener exclusiones: una l\u00ednea <code>RewriteRule ^blog\/ - [L]<\/code> y una <code>RewriteRule ^tienda\/ - [L]<\/code>.',\n        'Revisa en base de datos: <code>siteurl<\/code>\/<code>home<\/code> en wp_options y <code>physical_uri<\/code> en ps_shop_url.',\n        'Regenera permalinks en WP y .htaccess en PS despu\u00e9s de cada cambio.'\n      ],\n      alert: 'Si tras estos pasos siguen fallando, verifica en Plesk que no hay directivas globales en la configuraci\u00f3n de Apache que hereden reglas hacia los subdirectorios.'\n    },\n    r_nginx_wp: {\n      badge: 'WordPress \u00b7 nginx',\n      title: 'A\u00f1ade un bloque location para WordPress en nginx',\n      desc: 'nginx no lee .htaccess. Toda la l\u00f3gica de reescritura debe estar en la configuraci\u00f3n del servidor.',\n      steps: [\n        'Localiza el bloque de configuraci\u00f3n del dominio en nginx (en Plesk: <code>Configuraci\u00f3n de Apache y nginx \u2192 Directivas adicionales nginx<\/code>).',\n        'Si WordPress est\u00e1 en la ra\u00edz, a\u00f1ade dentro del bloque <code>server<\/code>: <code>try_files $uri $uri\/ \/index.php?$args;<\/code>',\n        'Si est\u00e1 en un subdirectorio <code>\/blog<\/code>, a\u00f1ade un <code>location \/blog\/ { try_files $uri $uri\/ \/blog\/index.php?$args; }<\/code>',\n        'Recarga nginx: <code>nginx -s reload<\/code> o desde el panel de Plesk.'\n      ],\n      alert: 'No edites el .htaccess esperando que nginx lo interprete. Ese archivo no tiene ning\u00fan efecto en nginx.'\n    },\n    r_nginx_ps: {\n      badge: 'PrestaShop \u00b7 nginx',\n      title: 'Configura el bloque location para PrestaShop en nginx',\n      desc: 'PrestaShop genera un .htaccess pensado para Apache. En nginx hay que trasladar esa l\u00f3gica al servidor.',\n      steps: [\n        'A\u00f1ade un bloque en la configuraci\u00f3n de nginx para el subdirectorio de la tienda:',\n        '<code>location \/tienda\/ { try_files $uri $uri\/ \/tienda\/index.php?$args; }<\/code>',\n        'Aseg\u00farate de que las peticiones a archivos est\u00e1ticos (.css, .js, .png) no pasan por PHP.',\n        'Recarga nginx y borra la cach\u00e9 de PrestaShop.'\n      ],\n      alert: 'Confirma tambi\u00e9n en ps_shop_url que domain y physical_uri tienen los valores correctos, o PrestaShop generar\u00e1 URLs con la ruta incorrecta.'\n    },\n    r_nginx_both: {\n      badge: 'nginx \u00b7 Diagn\u00f3stico general',\n      title: 'Revisa los bloques location de cada instalaci\u00f3n',\n      desc: 'En nginx, cada aplicaci\u00f3n en subdirectorio necesita su propio bloque location con try_files apuntando a su index.php.',\n      steps: [\n        'Para WordPress en \/blog: <code>location \/blog\/ { try_files $uri $uri\/ \/blog\/index.php?$args; }<\/code>',\n        'Para PrestaShop en \/tienda: <code>location \/tienda\/ { try_files $uri $uri\/ \/tienda\/index.php?$args; }<\/code>',\n        'Verifica que no hay reglas globales que capturen todas las peticiones antes de estos bloques.',\n        'Recarga nginx y prueba URLs internas de cada instalaci\u00f3n por separado.'\n      ],\n      alert: null\n    },\n    r_check_plesk: {\n      badge: 'Identificar servidor \u00b7 Plesk',\n      title: 'C\u00f3mo identificar el servidor en Plesk',\n      desc: 'Plesk puede funcionar con Apache, nginx o una combinaci\u00f3n de ambos. Aqu\u00ed te decimos c\u00f3mo comprobarlo.',\n      steps: [\n        'Entra en Plesk y ve a <code>Sitios web y dominios \u2192 Configuraci\u00f3n de Apache y nginx<\/code>.',\n        'Si ves opciones para ambos, probablemente nginx act\u00faa como proxy inverso y Apache procesa PHP.',\n        'Si solo ves opciones de Apache, el servidor es Apache puro.',\n        'Vuelve al diagn\u00f3stico y selecciona el tipo de servidor correcto.'\n      ],\n      alert: null\n    },\n    r_check_cpanel: {\n      badge: 'Identificar servidor \u00b7 cPanel',\n      title: 'cPanel casi siempre usa Apache',\n      desc: 'En la gran mayor\u00eda de instalaciones de cPanel, el servidor web es Apache con mod_rewrite activo. El .htaccess funciona con normalidad.',\n      steps: [\n        'Puedes confirmar el servidor en <code>cPanel \u2192 Informaci\u00f3n del servidor<\/code> o en la cabecera HTTP de cualquier p\u00e1gina.',\n        'Para comprobar la cabecera: abre DevTools \u2192 Network \u2192 recarga la p\u00e1gina \u2192 click en el documento \u2192 Headers \u2192 busca <code>Server:<\/code>.',\n        'Vuelve al diagn\u00f3stico y selecciona Apache.'\n      ],\n      alert: null\n    },\n    r_check_ftp: {\n      badge: 'Identificar servidor \u00b7 FTP\/SSH',\n      title: 'Identifica el servidor desde SSH',\n      desc: 'Con acceso SSH puedes confirmar el servidor en segundos.',\n      steps: [\n        'Ejecuta <code>apache2 -v<\/code> o <code>httpd -v<\/code> para ver si Apache est\u00e1 instalado.',\n        'Ejecuta <code>nginx -v<\/code> para comprobar nginx.',\n        'Si ambos responden, probablemente nginx es el proxy y Apache gestiona PHP.',\n        'Vuelve al diagn\u00f3stico con la informaci\u00f3n correcta.'\n      ],\n      alert: null\n    }\n  };\n\n  function init() {\n    const root = document.getElementById(ROOT_ID);\n    if (!root) {\n      return;\n    }\n\n    const progressEl = root.querySelector('[data-role=\"progress\"]');\n    const dotsEl = root.querySelector('[data-role=\"dots\"]');\n    const labelEl = root.querySelector('[data-role=\"step-label\"]');\n    const contentEl = root.querySelector('[data-role=\"content\"]');\n\n    const totalSteps = 3;\n    let history = [];\n    let currentStep = 'start';\n\n    function renderDots() {\n      progressEl.style.display = 'flex';\n      dotsEl.innerHTML = '';\n\n      for (let i = 0; i < totalSteps; i += 1) {\n        const dot = document.createElement('div');\n        dot.className = 'ld-diag-dot';\n\n        if (i < history.length) {\n          dot.classList.add('is-done');\n        } else if (i === history.length) {\n          dot.classList.add('is-active');\n        }\n\n        dotsEl.appendChild(dot);\n      }\n\n      labelEl.textContent = 'Paso ' + Math.min(history.length + 1, totalSteps) + ' de ' + totalSteps;\n    }\n\n    function renderQuestion(data) {\n      const hintMarkup = data.hint ? '<p class=\"ld-diag-hint\">' + data.hint + '<\/p>' : '';\n      const optionsMarkup = data.options.map(function (opt) {\n        return [\n          '<button type=\"button\" class=\"ld-diag-btn\" data-next=\"',\n          opt.next,\n          '\">',\n          '<span class=\"ld-diag-btn-icon\">',\n          opt.icon,\n          '<\/span>',\n          '<span class=\"ld-diag-btn-label\">',\n          opt.label,\n          '<\/span>',\n          '<span class=\"ld-diag-btn-arrow\" aria-hidden=\"true\">\u203a<\/span>',\n          '<\/button>'\n        ].join('');\n      }).join('');\n\n      const backMarkup = history.length > 0\n        ? '<div style=\"margin-top:16px\"><button type=\"button\" class=\"ld-diag-back\" data-action=\"back\">\u2190 Volver<\/button><\/div>'\n        : '';\n\n      contentEl.innerHTML = [\n        '<p class=\"ld-diag-question\">', data.q, '<\/p>',\n        hintMarkup,\n        '<div class=\"ld-diag-options\">', optionsMarkup, '<\/div>',\n        backMarkup\n      ].join('');\n    }\n\n    function renderResult(key) {\n      const result = results[key];\n      if (!result) {\n        return;\n      }\n\n      progressEl.style.display = 'none';\n\n      const stepsMarkup = result.steps.map(function (step, index) {\n        return [\n          '<div class=\"ld-diag-result-step\">',\n          '<div class=\"ld-diag-step-num\">', String(index + 1), '<\/div>',\n          '<div class=\"ld-diag-step-text\">', step, '<\/div>',\n          '<\/div>'\n        ].join('');\n      }).join('');\n\n      const alertMarkup = result.alert\n        ? '<div class=\"ld-diag-result-alert\">\u26a0 ' + result.alert + '<\/div>'\n        : '';\n\n      contentEl.innerHTML = [\n        '<div class=\"ld-diag-result\">',\n        '<div class=\"ld-diag-result-badge\">',\n        '<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\"><circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"white\" stroke-width=\"1.2\"\/><path d=\"M4 6l1.5 1.5L8 4.5\" stroke=\"white\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>',\n        result.badge,\n        '<\/div>',\n        '<p class=\"ld-diag-result-title\">', result.title, '<\/p>',\n        '<p class=\"ld-diag-result-desc\">', result.desc, '<\/p>',\n        '<div class=\"ld-diag-result-steps\">', stepsMarkup, '<\/div>',\n        alertMarkup,\n        '<div class=\"ld-diag-actions\">',\n        '<button type=\"button\" class=\"ld-diag-back\" data-action=\"back\">\u2190 Volver<\/button>',\n        '<button type=\"button\" class=\"ld-diag-restart\" data-action=\"restart\">Reiniciar diagn\u00f3stico<\/button>',\n        '<\/div>',\n        '<\/div>'\n      ].join('');\n    }\n\n    function renderStep(stepKey) {\n      const data = stepKey === 'start' ? steps[0] : (branches[stepKey] || null);\n\n      if (!data) {\n        renderResult(stepKey);\n        return;\n      }\n\n      renderDots();\n      renderQuestion(data);\n    }\n\n    function choose(next) {\n      history.push(currentStep);\n      currentStep = next;\n      renderStep(next);\n    }\n\n    function goBack() {\n      if (history.length === 0) {\n        return;\n      }\n\n      currentStep = history.pop();\n      renderStep(currentStep);\n    }\n\n    function restart() {\n      history = [];\n      currentStep = 'start';\n      renderStep('start');\n    }\n\n    contentEl.addEventListener('click', function (event) {\n      const button = event.target.closest('button');\n      if (!button || !contentEl.contains(button)) {\n        return;\n      }\n\n      const next = button.getAttribute('data-next');\n      const action = button.getAttribute('data-action');\n\n      if (next) {\n        choose(next);\n        return;\n      }\n\n      if (action === 'back') {\n        goBack();\n        return;\n      }\n\n      if (action === 'restart') {\n        restart();\n      }\n    });\n\n    renderStep('start');\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init, { once: true });\n  } else {\n    init();\n  }\n})();\n<\/script>\n\n\n\n\n<p><\/p>\n\n\n\n<p>WordPress y PrestaShop no fallan exactamente igual.<\/p>\n\n\n\n<p><strong>WordPress<\/strong> depende mucho de los enlaces permanentes y, en Apache, del bloque correcto en <code>.htaccess<\/code>. <strong>PrestaShop<\/strong> genera su propio <code>.htaccess<\/code> desde el panel y adem\u00e1s necesita que la tienda tenga bien resueltas su URL principal, su ruta f\u00edsica y sus redirecciones.<\/p>\n\n\n\n<p>La parte importante es esta: <strong>una URL amigable rota no significa autom\u00e1ticamente que el <code>.htaccess<\/code> est\u00e9 mal<\/strong>. Tambi\u00e9n puede haber un ajuste incorrecto dentro del CMS, una instalaci\u00f3n movida a un subdirectorio sin terminar de ajustar o un servidor nginx intentando resolver una configuraci\u00f3n pensada para Apache.<\/p>\n\n\n\n<!-- BLOQUE: por-que-fallan-las-url-amigables -->\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap');\n\n#comp-ld-101, #comp-ld-101 * { box-sizing: border-box; }\n#comp-ld-101 {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  color: #37363d;\n  max-width: 720px;\n  margin: 2rem auto;\n  padding: 1.5rem;\n}\n\n#comp-ld-101 .ld-card {\n  background: linear-gradient(135deg, #f4f4f6 0%, #ffffff 100%);\n  border-radius: 16px;\n  padding: 1.5rem;\n  box-shadow: 0 4px 20px rgba(55, 54, 61, 0.08);\n  border: 1px solid rgba(55, 54, 61, 0.08);\n}\n\n#comp-ld-101 .ld-header {\n  display: flex;\n  align-items: center;\n  gap: 0.75rem;\n  margin-bottom: 1.25rem;\n}\n\n#comp-ld-101 .ld-icon {\n  width: 40px;\n  height: 40px;\n  background: linear-gradient(135deg, #db7424 0%, #e89252 100%);\n  border-radius: 10px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n#comp-ld-101 .ld-icon svg {\n  width: 22px;\n  height: 22px;\n  stroke: white;\n  stroke-width: 2;\n  fill: none;\n}\n\n#comp-ld-101 .ld-title {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #37363d;\n  line-height: 1.3;\n}\n\n#comp-ld-101 .ld-chips {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.75rem;\n}\n\n#comp-ld-101 .ld-chip {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  background: white;\n  border: 2px solid;\n  border-radius: 24px;\n  padding: 0.625rem 1rem;\n  font-size: 0.85rem;\n  font-weight: 500;\n  transition: all 0.2s ease;\n  cursor: default;\n}\n\n#comp-ld-101 .ld-chip:nth-child(1) { border-color: #db7424; color: #db7424; }\n#comp-ld-101 .ld-chip:nth-child(2) { border-color: #00bcdf; color: #00bcdf; }\n#comp-ld-101 .ld-chip:nth-child(3) { border-color: #198754; color: #198754; }\n#comp-ld-101 .ld-chip:nth-child(4) { border-color: #6b7280; color: #6b7280; }\n\n#comp-ld-101 .ld-chip:hover {\n  transform: translateY(-2px);\n  box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n}\n\n#comp-ld-101 .ld-chip-num {\n  width: 24px;\n  height: 24px;\n  border-radius: 50%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 0.75rem;\n  font-weight: 700;\n  flex-shrink: 0;\n}\n\n#comp-ld-101 .ld-chip:nth-child(1) .ld-chip-num { background: #db7424; color: white; }\n#comp-ld-101 .ld-chip:nth-child(2) .ld-chip-num { background: #00bcdf; color: white; }\n#comp-ld-101 .ld-chip:nth-child(3) .ld-chip-num { background: #198754; color: white; }\n#comp-ld-101 .ld-chip:nth-child(4) .ld-chip-num { background: #6b7280; color: white; }\n\n@media (max-width: 480px) {\n  #comp-ld-101 { padding: 1rem; }\n  #comp-ld-101 .ld-title { font-size: 1rem; }\n  #comp-ld-101 .ld-chip { font-size: 0.8rem; padding: 0.5rem 0.875rem; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  #comp-ld-101 * { transition: none !important; animation: none !important; }\n}\n<\/style>\n\n<div id=\"comp-ld-101\">\n  <div class=\"ld-card\">\n    <div class=\"ld-header\">\n      <div class=\"ld-icon\">\n        <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 6v6l4 2\"\/><\/svg>\n      <\/div>\n      <span class=\"ld-title\">\u00bfPor qu\u00e9 realmente fallan tus URLs amigables?<\/span>\n    <\/div>\n    <div class=\"ld-chips\">\n      <div class=\"ld-chip\"><span class=\"ld-chip-num\">1<\/span>El CMS no regener\u00f3 bien sus reglas<\/div>\n      <div class=\"ld-chip\"><span class=\"ld-chip-num\">2<\/span>La ruta base no coincide con la carpeta real<\/div>\n      <div class=\"ld-chip\"><span class=\"ld-chip-num\">3<\/span>El servidor no aplica la reescritura como espera<\/div>\n      <div class=\"ld-chip\"><span class=\"ld-chip-num\">4<\/span>Otra instalaci\u00f3n est\u00e1 interfiriendo<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n<!-- FIN BLOQUE: por-que-fallan-las-url-amigables -->\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-errores-mas-comunes-al-usar-wordpress-y-prestashop-en-el-mismo-dominio\">Errores m\u00e1s comunes al usar WordPress y PrestaShop en el mismo dominio<\/h2>\n\n\n\n<p>El patr\u00f3n se repite bastante cuando varias aplicaciones conviven dentro del mismo dominio.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-dominio-com-y-blog\"><code>dominio.com<\/code> y <code>\/blog<\/code><\/h3>\n\n\n\n<p>Aqu\u00ed suele haber una instalaci\u00f3n principal en la ra\u00edz y WordPress en <code>\/blog<\/code>.<\/p>\n\n\n\n<p>Los fallos t\u00edpicos son estos:<\/p>\n\n\n\n<ul>\n<li>La ra\u00edz responde bien, pero <code>\/blog\/entrada\/<\/code> devuelve 404<\/li>\n\n\n\n<li>WordPress genera enlaces con una base incorrecta<\/li>\n\n\n\n<li>El <code>.htaccess<\/code> de la ra\u00edz redirige o reescribe antes de que WordPress procese su parte<\/li>\n\n\n\n<li>En nginx no existe un bloque espec\u00edfico para <code>\/blog\/<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-dominio-com-y-tienda\"><code>dominio.com<\/code> y <code>\/tienda<\/code><\/h3>\n\n\n\n<p>Este caso es muy habitual cuando la web corporativa va por un lado y la tienda por otro.<\/p>\n\n\n\n<p>Los errores m\u00e1s comunes son:<\/p>\n\n\n\n<ul>\n<li>PrestaShop genera URLs simplificadas, pero el servidor no las resuelve<\/li>\n\n\n\n<li>La tienda arranca en <code>\/tienda<\/code>, pero algunas rutas intentan abrirse desde la ra\u00edz<\/li>\n\n\n\n<li>Aparecen 404 en productos o categor\u00edas despu\u00e9s de cambiar la configuraci\u00f3n SEO<\/li>\n\n\n\n<li>Una redirecci\u00f3n global en la ra\u00edz pisa las rutas de la tienda<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-instalacion-principal-y-pruebas\">Instalaci\u00f3n principal y <code>\/pruebas<\/code><\/h3>\n\n\n\n<p>Es el escenario m\u00e1s delicado porque se mezclan producci\u00f3n, staging y reglas heredadas.<\/p>\n\n\n\n<p>Aqu\u00ed conviene revisar sobre todo:<\/p>\n\n\n\n<ul>\n<li>Si la instalaci\u00f3n de pruebas est\u00e1 indexando o redirigiendo como si fuera la principal<\/li>\n\n\n\n<li>Si comparte reglas de reescritura que no deber\u00eda<\/li>\n\n\n\n<li>Si la URL base de la copia sigue apuntando al dominio principal<\/li>\n\n\n\n<li>Si hay cach\u00e9 o redirecciones antiguas todav\u00eda activas<\/li>\n<\/ul>\n\n\n\n<p>En algunos montajes de Apache aparece la directiva <code>RewriteOptions IgnoreInherit<\/code>. <strong>Hay que tratarla como un caso t\u00e9cnico concreto<\/strong>, no como una receta universal. Si el problema real est\u00e1 en la URL base del CMS, en los enlaces permanentes o en nginx, esa l\u00ednea no te va a arreglar nada por s\u00ed sola.<\/p>\n\n\n\n<!-- BLOQUE: errores-mas-comunes-mismo-dominio -->\n<style>\n#comp-ld-102, #comp-ld-102 * { box-sizing: border-box; }\n#comp-ld-102 {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  color: #37363d;\n  max-width: 720px;\n  margin: 2rem auto;\n  padding: 1.5rem;\n}\n\n#comp-ld-102 .ld-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 1rem;\n}\n\n#comp-ld-102 .ld-scenario {\n  background: white;\n  border-radius: 14px;\n  padding: 1.25rem;\n  border: 2px solid;\n  transition: all 0.25s ease;\n}\n\n#comp-ld-102 .ld-scenario:nth-child(1) { border-color: #db7424; }\n#comp-ld-102 .ld-scenario:nth-child(2) { border-color: #00bcdf; }\n#comp-ld-102 .ld-scenario:nth-child(3) { border-color: #198754; }\n\n#comp-ld-102 .ld-scenario:hover {\n  transform: translateY(-4px);\n  box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n}\n\n#comp-ld-102 .ld-scenario-icon {\n  width: 44px;\n  height: 44px;\n  border-radius: 10px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-bottom: 0.875rem;\n}\n\n#comp-ld-102 .ld-scenario:nth-child(1) .ld-scenario-icon { background: rgba(219, 116, 36, 0.12); }\n#comp-ld-102 .ld-scenario:nth-child(2) .ld-scenario-icon { background: rgba(0, 188, 223, 0.12); }\n#comp-ld-102 .ld-scenario:nth-child(3) .ld-scenario-icon { background: rgba(25, 135, 84, 0.12); }\n\n#comp-ld-102 .ld-scenario-icon svg {\n  width: 24px;\n  height: 24px;\n  stroke-width: 2;\n  fill: none;\n}\n\n#comp-ld-102 .ld-scenario:nth-child(1) .ld-scenario-icon svg { stroke: #db7424; }\n#comp-ld-102 .ld-scenario:nth-child(2) .ld-scenario-icon svg { stroke: #00bcdf; }\n#comp-ld-102 .ld-scenario:nth-child(3) .ld-scenario-icon svg { stroke: #198754; }\n\n#comp-ld-102 .ld-scenario-path {\n  font-family: 'SF Mono', 'Fira Code', monospace;\n  font-size: 0.8rem;\n  font-weight: 600;\n  padding: 0.375rem 0.625rem;\n  background: #f4f4f6;\n  border-radius: 6px;\n  margin-bottom: 0.625rem;\n  display: inline-block;\n}\n\n#comp-ld-102 .ld-scenario-title {\n  font-size: 0.95rem;\n  font-weight: 700;\n  color: #37363d;\n  margin-bottom: 0.375rem;\n}\n\n#comp-ld-102 .ld-scenario-issue {\n  font-size: 0.8rem;\n  color: #6b7280;\n  line-height: 1.4;\n}\n\n@media (max-width: 640px) {\n  #comp-ld-102 .ld-grid { grid-template-columns: 1fr; }\n  #comp-ld-102 .ld-scenario { padding: 1rem; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  #comp-ld-102 * { transition: none !important; animation: none !important; }\n}\n<\/style>\n\n<div id=\"comp-ld-102\">\n  <div class=\"ld-grid\">\n    <div class=\"ld-scenario\">\n      <div class=\"ld-scenario-icon\">\n        <svg viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><polyline points=\"14 2 14 8 20 8\"\/><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"\/><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"\/><\/svg>\n      <\/div>\n      <span class=\"ld-scenario-path\">dominio.com\/blog<\/span>\n      <div class=\"ld-scenario-title\">WordPress en subdirectorio<\/div>\n      <div class=\"ld-scenario-issue\">La ra\u00edz responde, pero \/blog\/entrada\/ devuelve 404<\/div>\n    <\/div>\n    <div class=\"ld-scenario\">\n      <div class=\"ld-scenario-icon\">\n        <svg viewBox=\"0 0 24 24\"><path d=\"M3 3h18v18H3zM9 9h6v6H9z\"\/><\/svg>\n      <\/div>\n      <span class=\"ld-scenario-path\">dominio.com\/tienda<\/span>\n      <div class=\"ld-scenario-title\">PrestaShop en subdirectorio<\/div>\n      <div class=\"ld-scenario-issue\">URLs simplificadas activadas pero productos dan 404<\/div>\n    <\/div>\n    <div class=\"ld-scenario\">\n      <div class=\"ld-scenario-icon\">\n        <svg viewBox=\"0 0 24 24\"><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"\/><\/svg>\n      <\/div>\n      <span class=\"ld-scenario-path\">dominio.com\/pruebas<\/span>\n      <div class=\"ld-scenario-title\">Copia de pruebas<\/div>\n      <div class=\"ld-scenario-issue\">Reglas heredadas y redirecciones al dominio principal<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n<!-- FIN BLOQUE: errores-mas-comunes-mismo-dominio -->\n\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-como-detectar-si-el-problema-esta-en-htaccess-en-el-cms-o-en-el-servidor\">C\u00f3mo detectar si el problema est\u00e1 en .htaccess, en el CMS o en el servidor<\/h2>\n\n\n\n<p>Lo m\u00e1s \u00fatil es seguir un orden y no empezar tocando reglas a ciegas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-1-comprueba-si-falla-toda-la-web-o-solo-las-urls-internas\">1. Comprueba si falla toda la web o solo las URLs internas<\/h3>\n\n\n\n<p>Si la portada carga y el panel de administraci\u00f3n tambi\u00e9n, pero fallan entradas, productos o categor\u00edas, lo normal es que el problema est\u00e9 en la <strong>reescritura<\/strong> y no en PHP ni en la base de datos.<\/p>\n\n\n\n<p>Si falla todo, el problema puede ser m\u00e1s amplio: ruta rota, dominio mal resuelto, error 500 o configuraci\u00f3n del servidor.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-2-revisa-primero-el-cms\">2. Revisa primero el CMS<\/h3>\n\n\n\n<p>Antes de editar archivos, entra en el panel.<\/p>\n\n\n\n<p>En <strong>WordPress<\/strong>, vuelve a guardar los enlaces permanentes en <strong>Ajustes &gt; Enlaces permanentes<\/strong>.<\/p>\n\n\n\n<p>En <strong>PrestaShop<\/strong>, revisa <strong>SEO y URLs<\/strong> y vuelve a regenerar el archivo <code>.htaccess<\/code> si procede. Si necesitas repasar la parte m\u00e1s b\u00e1sica, puedes echarle un vistazo a <a href=\"https:\/\/www.loading.es\/blog\/como-activar-urls-amigables-en-prestashop-1-7\/\" target=\"_blank\" rel=\"noopener\" title=\"Urls amigables en PrestaShop\">nuestro<\/a><a href=\"https:\/\/www.loading.es\/blog\/como-activar-urls-amigables-en-prestashop-1-7\/\"> post sobre c\u00f3mo activar URLs amigables en PrestaShop<\/a>.<\/p>\n\n\n\n<p>Si con eso vuelve a funcionar, el problema estaba en el CMS o en un archivo no actualizado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-3-revisa-el-archivo-htaccess-desde-plesk\">3. Revisa el archivo <code>.htaccess<\/code> desde Plesk<\/h3>\n\n\n\n<p>En Loading, lo l\u00f3gico es empezar por el <strong>Administrador de archivos de Plesk<\/strong>.<\/p>\n\n\n\n<p>Busca estas se\u00f1ales:<\/p>\n\n\n\n<ul>\n<li>Que el archivo exista en la carpeta correcta<\/li>\n\n\n\n<li>Que no haya un bloque de WordPress copiado en la instalaci\u00f3n equivocada<\/li>\n\n\n\n<li>Que no existan redirecciones globales demasiado agresivas<\/li>\n\n\n\n<li>Que PrestaShop no tenga mezcladas reglas manuales dentro de su bloque autogenerado<\/li>\n<\/ul>\n\n\n\n<p>Un bloque b\u00e1sico y correcto de WordPress en Apache suele verse as\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># BEGIN WordPress\n&lt;IfModule mod_rewrite.c&gt;\nRewriteEngine On\nRewriteBase \/\nRewriteRule ^index\\.php$ - &#91;L]\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteRule . \/index.php &#91;L]\n&lt;\/IfModule&gt;\n# END WordPress<\/code><\/pre>\n\n\n\n<p>Si WordPress est\u00e1 en <code>\/blog<\/code>, la base debe reflejarlo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># BEGIN WordPress\n&lt;IfModule mod_rewrite.c&gt;\nRewriteEngine On\nRewriteBase \/blog\/\nRewriteRule ^index\\.php$ - &#91;L]\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteRule . \/blog\/index.php &#91;L]\n&lt;\/IfModule&gt;\n# END WordPress<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-4-distingue-apache-de-nginx\">4. Distingue Apache de nginx<\/h3>\n\n\n\n<p>Este punto ahorra mucho tiempo.<\/p>\n\n\n\n<p>Si el servidor usa <strong>Apache<\/strong>, <code>.htaccess<\/code> y <code>mod_rewrite<\/code> importan.<\/p>\n\n\n\n<p>Si el servidor usa <strong>nginx<\/strong>, <strong><code>.htaccess<\/code> no se interpreta<\/strong>. En ese caso la l\u00f3gica tiene que estar en la configuraci\u00f3n del servidor, no en el archivo del CMS.<\/p>\n\n\n\n<p>Un ejemplo muy b\u00e1sico en nginx para una instalaci\u00f3n en <code>\/blog<\/code> ser\u00eda este:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>location \/blog\/ {\n    try_files $uri $uri\/ \/blog\/index.php?$args;\n}<\/code><\/pre>\n\n\n\n<p>Y para una tienda en <code>\/tienda<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>location \/tienda\/ {\n    try_files $uri $uri\/ \/tienda\/index.php?$args;\n}<\/code><\/pre>\n\n\n\n<p>Si en nginx tocas <code>.htaccess<\/code> y no pasa nada, eso es normal. <strong>Ese archivo no se est\u00e1 usando<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-5-si-el-panel-no-abre-revisa-la-url-base-en-phpmyadmin\">5. Si el panel no abre, revisa la URL base en phpMyAdmin<\/h3>\n\n\n\n<p>Cuando no puedes entrar al CMS, la pista puede estar en la base de datos.<\/p>\n\n\n\n<p>En <strong>WordPress<\/strong>, revisa <code>siteurl<\/code> y <code>home<\/code> en la tabla <code>wp_options<\/code>.<\/p>\n\n\n\n<p>En <strong>PrestaShop<\/strong>, revisa <code>domain<\/code>, <code>domain_ssl<\/code> y <code>physical_uri<\/code> en <code>ps_shop_url<\/code>.<\/p>\n\n\n\n<p>Si estos valores apuntan a la ra\u00edz cuando la instalaci\u00f3n vive en <code>\/blog<\/code>, <code>\/tienda<\/code> o <code>\/pruebas<\/code>, las URL amigables van a salir mal aunque el <code>.htaccess<\/code> est\u00e9 perfecto.<\/p>\n\n\n\n<!-- BLOQUE: como-detectar-problema -->\n<style>\n#comp-ld-103, #comp-ld-103 * { box-sizing: border-box; }\n#comp-ld-103 {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  color: #37363d;\n  max-width: 720px;\n  margin: 2rem auto;\n  padding: 1.5rem;\n}\n\n#comp-ld-103 .ld-container {\n  background: linear-gradient(145deg, #ffffff 0%, #f8f9fa 100%);\n  border-radius: 20px;\n  padding: 2rem;\n  border: 1px solid rgba(55, 54, 61, 0.08);\n  box-shadow: 0 8px 32px rgba(55, 54, 61, 0.06);\n}\n\n#comp-ld-103 .ld-header {\n  text-align: center;\n  margin-bottom: 1.75rem;\n}\n\n#comp-ld-103 .ld-header-icon {\n  width: 56px;\n  height: 56px;\n  background: linear-gradient(135deg, #37363d 0%, #4a4952 100%);\n  border-radius: 14px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin: 0 auto 1rem;\n  box-shadow: 0 4px 16px rgba(55, 54, 61, 0.2);\n}\n\n#comp-ld-103 .ld-header-icon svg {\n  width: 28px;\n  height: 28px;\n  stroke: white;\n  stroke-width: 2;\n  fill: none;\n}\n\n#comp-ld-103 .ld-header-title {\n  font-size: 1.15rem;\n  font-weight: 700;\n  color: #37363d;\n}\n\n#comp-ld-103 .ld-steps {\n  display: flex;\n  flex-direction: column;\n  gap: 0.75rem;\n}\n\n#comp-ld-103 .ld-step {\n  display: flex;\n  align-items: flex-start;\n  gap: 1rem;\n  background: white;\n  border-radius: 12px;\n  padding: 1rem 1.25rem;\n  border: 2px solid transparent;\n  transition: all 0.2s ease;\n}\n\n#comp-ld-103 .ld-step:hover {\n  border-color: #00bcdf;\n  box-shadow: 0 4px 16px rgba(0, 188, 223, 0.1);\n}\n\n#comp-ld-103 .ld-step-num {\n  width: 36px;\n  height: 36px;\n  background: linear-gradient(135deg, #00bcdf 0%, #33c9e5 100%);\n  border-radius: 50%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1rem;\n  font-weight: 700;\n  color: white;\n  flex-shrink: 0;\n}\n\n#comp-ld-103 .ld-step-content {\n  flex: 1;\n}\n\n#comp-ld-103 .ld-step-title {\n  font-size: 0.95rem;\n  font-weight: 700;\n  color: #37363d;\n  margin-bottom: 0.25rem;\n}\n\n#comp-ld-103 .ld-step-desc {\n  font-size: 0.85rem;\n  color: #6b7280;\n  line-height: 1.4;\n}\n\n#comp-ld-103 .ld-step-arrow {\n  align-self: center;\n  width: 24px;\n  height: 24px;\n  opacity: 0.4;\n}\n\n#comp-ld-103 .ld-step-arrow svg {\n  width: 100%;\n  height: 100%;\n  stroke: #37363d;\n  stroke-width: 2;\n  fill: none;\n}\n\n@media (max-width: 480px) {\n  #comp-ld-103 .ld-container { padding: 1.25rem; }\n  #comp-ld-103 .ld-step { padding: 0.875rem 1rem; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  #comp-ld-103 * { transition: none !important; animation: none !important; }\n}\n<\/style>\n\n<div id=\"comp-ld-103\">\n  <div class=\"ld-container\">\n    <div class=\"ld-header\">\n    <\/div>\n    <div class=\"ld-steps\">\n      <div class=\"ld-step\">\n        <span class=\"ld-step-num\">1<\/span>\n        <div class=\"ld-step-content\">\n          <div class=\"ld-step-title\">\u00bfFallan solo las URLs internas?<\/div>\n          <div class=\"ld-step-desc\">Si la portada y el panel cargan, el problema suele estar en la reescritura<\/div>\n        <\/div>\n        <div class=\"ld-step-arrow\"><svg viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg><\/div>\n      <\/div>\n      <div class=\"ld-step\">\n        <span class=\"ld-step-num\">2<\/span>\n        <div class=\"ld-step-content\">\n          <div class=\"ld-step-title\">Revisa primero el CMS<\/div>\n          <div class=\"ld-step-desc\">WordPress: Ajustes > Enlaces permanentes. PrestaShop: SEO y URLs<\/div>\n        <\/div>\n        <div class=\"ld-step-arrow\"><svg viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg><\/div>\n      <\/div>\n      <div class=\"ld-step\">\n        <span class=\"ld-step-num\">3<\/span>\n        <div class=\"ld-step-content\">\n          <div class=\"ld-step-title\">Verifica .htaccess en Plesk<\/div>\n          <div class=\"ld-step-desc\">Administrador de archivos: comprueba ubicaci\u00f3n, bloques correctos y redirecciones<\/div>\n        <\/div>\n        <div class=\"ld-step-arrow\"><svg viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg><\/div>\n      <\/div>\n      <div class=\"ld-step\">\n        <span class=\"ld-step-num\">4<\/span>\n        <div class=\"ld-step-content\">\n          <div class=\"ld-step-title\">Distingue Apache de nginx<\/div>\n          <div class=\"ld-step-desc\">Apache usa .htaccess. nginx usa reglas de servidor, no el archivo del CMS<\/div>\n        <\/div>\n        <div class=\"ld-step-arrow\"><svg viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg><\/div>\n      <\/div>\n      <div class=\"ld-step\">\n        <span class=\"ld-step-num\">5<\/span>\n        <div class=\"ld-step-content\">\n          <div class=\"ld-step-title\">Revisa la base de datos<\/div>\n          <div class=\"ld-step-desc\">WordPress: wp_options (siteurl\/home). PrestaShop: ps_shop_url (physical_uri)<\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n<!-- FIN BLOQUE: como-detectar-problema -->\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-errores-habituales-de-url-amigables-en-wordpress\">Errores habituales de URL amigables en WordPress<\/h2>\n\n\n\n<p>WordPress suele fallar por cuatro motivos muy concretos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-enlaces-permanentes-cambiados-pero-reglas-no-aplicadas\">Enlaces permanentes cambiados pero reglas no aplicadas<\/h3>\n\n\n\n<p>Es el cl\u00e1sico. Cambias la estructura, guardas, y las entradas devuelven 404.<\/p>\n\n\n\n<p>En Apache, WordPress necesita poder escribir o al menos mostrar las reglas correctas. Si tu instalaci\u00f3n no puede actualizar el archivo autom\u00e1ticamente, tendr\u00e1s que revisar el bloque manualmente.<\/p>\n\n\n\n<p>La <strong>documentaci\u00f3n oficial de WordPress<\/strong> explica c\u00f3mo se comportan los enlaces permanentes y qu\u00e9 ocurre cuando la estructura cambia. Si adem\u00e1s est\u00e1s moviendo la instalaci\u00f3n a una carpeta propia o sirviendo la web desde ra\u00edz con WordPress en subdirectorio, tambi\u00e9n conviene revisar la <a href=\"https:\/\/developer.wordpress.org\/advanced-administration\/server\/wordpress-in-directory\/\" target=\"_blank\" rel=\"noopener\" title=\"documentaci\u00f3n de WordPress sobre errores en la instalaci\u00f3n del directorio\">gu\u00eda oficial de WordPress sobre instalaciones en directorio propio<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-wordpress-en-subdirectorio-con-direccion-mal-configurada\">WordPress en subdirectorio con direcci\u00f3n mal configurada<\/h3>\n\n\n\n<p>Aqu\u00ed se mezclan dos campos distintos:<\/p>\n\n\n\n<ul>\n<li><strong>Direcci\u00f3n de WordPress<\/strong><\/li>\n\n\n\n<li><strong>Direcci\u00f3n del sitio<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Si WordPress est\u00e1 f\u00edsicamente en <code>\/blog<\/code> pero alguna de esas URLs sigue apuntando a la ra\u00edz, empiezan los fallos de enlaces permanentes, las redirecciones raras y los recursos cargados desde rutas incorrectas.<\/p>\n\n\n\n<p>Si trabajas con un entorno optimizado de <a href=\"https:\/\/www.loading.es\/hosting-wordpress\/index.html\" target=\"_blank\" rel=\"noopener\" title=\"Hosting WordPress en Loading\">hosting WordPress<\/a>, esta parte suele venir m\u00e1s encauzada, pero aun as\u00ed hay que revisar la ruta cuando mueves instalaciones o clonas una web a <code>\/pruebas<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-htaccess-correcto-para-raiz-pero-incorrecto-para-blog\"><code>.htaccess<\/code> correcto para ra\u00edz, pero incorrecto para <code>\/blog<\/code><\/h3>\n\n\n\n<p>Copiar el bloque de una instalaci\u00f3n en ra\u00edz dentro de otra que vive en subdirectorio rompe muchas rutas.<\/p>\n\n\n\n<p>Por ejemplo, si WordPress vive en <code>\/blog<\/code>, no deber\u00edas dejar una base como esta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RewriteBase \/\nRewriteRule . \/index.php &#91;L]<\/code><\/pre>\n\n\n\n<p>Lo coherente ser\u00eda ajustar la base a la carpeta real:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RewriteBase \/blog\/\nRewriteRule . \/blog\/index.php &#91;L]<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-nginx-sin-try_files-para-la-instalacion-concreta\">Nginx sin <code>try_files<\/code> para la instalaci\u00f3n concreta<\/h3>\n\n\n\n<p>Si la portada carga pero las entradas no, y el servidor usa nginx, el error suele estar aqu\u00ed.<\/p>\n\n\n\n<p>WordPress necesita una regla que env\u00ede las rutas no resueltas a <code>index.php<\/code>. Si no existe, la URL amigable termina en 404 aunque la configuraci\u00f3n del CMS sea correcta.<\/p>\n\n\n\n<p>Un ejemplo m\u00ednimo ser\u00eda este:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>location \/blog\/ {\n    try_files $uri $uri\/ \/blog\/index.php?$args;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-redirecciones-antiguas-o-pruebas-mal-clonadas\">Redirecciones antiguas o pruebas mal clonadas<\/h3>\n\n\n\n<p>Cuando copias una web a <code>\/pruebas<\/code>, es f\u00e1cil arrastrar:<\/p>\n\n\n\n<ul>\n<li>Redirecciones al dominio principal<\/li>\n\n\n\n<li>URLs absolutas antiguas<\/li>\n\n\n\n<li>Cach\u00e9 de plugins o del propio servidor<\/li>\n\n\n\n<li>reglas que fuerzan HTTPS, <code>www<\/code> o una ruta antigua<\/li>\n<\/ul>\n\n\n\n<p>Si el error aparece solo en la copia, piensa primero en <strong>configuraci\u00f3n arrastrada<\/strong>, no en el CMS desde cero.<\/p>\n\n\n\n<!-- BLOQUE: errores-habituales-wordpress -->\n<style>\n#comp-ld-104, #comp-ld-104 * { box-sizing: border-box; }\n#comp-ld-104 {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  color: #37363d;\n  max-width: 720px;\n  margin: 2rem auto;\n  padding: 1.5rem;\n}\n\n#comp-ld-104 .ld-card {\n  background: white;\n  border-radius: 16px;\n  padding: 1.5rem;\n  border: 1px solid rgba(0, 188, 223, 0.2);\n  box-shadow: 0 4px 20px rgba(0, 188, 223, 0.08);\n}\n\n#comp-ld-104 .ld-header {\n  display: flex;\n  align-items: center;\n  gap: 0.875rem;\n  margin-bottom: 1.25rem;\n  padding-bottom: 1rem;\n  border-bottom: 2px solid #f4f4f6;\n}\n\n#comp-ld-104 .ld-header-icon {\n  width: 44px;\n  height: 44px;\n  background: linear-gradient(135deg, #00bcdf 0%, #33c9e5 100%);\n  border-radius: 10px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n#comp-ld-104 .ld-header-icon svg {\n  width: 24px;\n  height: 24px;\n  stroke: white;\n  stroke-width: 2;\n  fill: none;\n}\n\n#comp-ld-104 .ld-header-title {\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #37363d;\n}\n\n#comp-ld-104 .ld-checklist {\n  display: flex;\n  flex-direction: column;\n  gap: 0.75rem;\n  margin-bottom: 1.25rem;\n}\n\n#comp-ld-104 .ld-check-item {\n  display: flex;\n  align-items: flex-start;\n  gap: 0.75rem;\n  padding: 0.875rem;\n  background: #f4f4f6;\n  border-radius: 10px;\n  transition: all 0.2s ease;\n}\n\n#comp-ld-104 .ld-check-item:hover {\n  background: rgba(0, 188, 223, 0.08);\n  transform: translateX(4px);\n}\n\n#comp-ld-104 .ld-check-icon {\n  width: 22px;\n  height: 22px;\n  background: #00bcdf;\n  border-radius: 5px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  margin-top: 1px;\n}\n\n#comp-ld-104 .ld-check-icon svg {\n  width: 14px;\n  height: 14px;\n  stroke: white;\n  stroke-width: 3;\n  fill: none;\n}\n\n#comp-ld-104 .ld-check-text {\n  flex: 1;\n  font-size: 0.9rem;\n  line-height: 1.45;\n  color: #37363d;\n}\n\n#comp-ld-104 .ld-terminal {\n  background: #1e1e1e;\n  border-radius: 12px;\n  overflow: hidden;\n  box-shadow: 0 8px 24px rgba(0,0,0,0.3);\n}\n\n#comp-ld-104 .ld-terminal-header {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  padding: 0.625rem 0.875rem;\n  background: #2d2d2d;\n  border-bottom: 1px solid #3d3d3d;\n}\n\n#comp-ld-104 .ld-terminal-btn {\n  width: 12px;\n  height: 12px;\n  border-radius: 50%;\n}\n\n#comp-ld-104 .ld-terminal-btn:nth-child(1) { background: #ff5f56; }\n#comp-ld-104 .ld-terminal-btn:nth-child(2) { background: #ffbd2e; }\n#comp-ld-104 .ld-terminal-btn:nth-child(3) { background: #27c93f; }\n\n#comp-ld-104 .ld-terminal-title {\n  margin-left: auto;\n  font-family: 'SF Mono', 'Fira Code', monospace;\n  font-size: 0.7rem;\n  color: #888;\n}\n\n#comp-ld-104 .ld-terminal-body {\n  padding: 1rem;\n  font-family: 'SF Mono', 'Fira Code', monospace;\n  font-size: 0.8rem;\n  line-height: 1.6;\n  color: #e4e4e4;\n  overflow-x: auto;\n}\n\n#comp-ld-104 .ld-terminal-body .ld-comment { color: #6a9955; }\n#comp-ld-104 .ld-terminal-body .ld-directive { color: #569cd6; }\n#comp-ld-104 .ld-terminal-body .ld-string { color: #ce9178; }\n#comp-ld-104 .ld-terminal-body .ld-keyword { color: #c586c0; }\n\n@media (max-width: 480px) {\n  #comp-ld-104 { padding: 1rem; }\n  #comp-ld-104 .ld-terminal-body { font-size: 0.75rem; padding: 0.875rem; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  #comp-ld-104 * { transition: none !important; animation: none !important; }\n}\n<\/style>\n\n<div id=\"comp-ld-104\">\n  <div class=\"ld-card\">\n    <div class=\"ld-header\">\n      <div class=\"ld-header-icon\">\n        <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M8 12l3 3 5-5\"\/><\/svg>\n      <\/div>\n      <span class=\"ld-header-title\">Errores habituales en WordPress<\/span>\n    <\/div>\n    <div class=\"ld-checklist\">\n      <div class=\"ld-check-item\">\n        <span class=\"ld-check-icon\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span>\n        <span class=\"ld-check-text\">Enlaces permanentes cambiados pero las reglas no se aplicaron<\/span>\n      <\/div>\n      <div class=\"ld-check-item\">\n        <span class=\"ld-check-icon\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span>\n        <span class=\"ld-check-text\">Direcci\u00f3n de WordPress vs Direcci\u00f3n del sitio mal configuradas<\/span>\n      <\/div>\n      <div class=\"ld-check-item\">\n        <span class=\"ld-check-icon\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span>\n        <span class=\"ld-check-text\"><code>RewriteBase<\/code> correcto para ra\u00edz, incorrecto para subdirectorio<\/span>\n      <\/div>\n      <div class=\"ld-check-item\">\n        <span class=\"ld-check-icon\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span>\n        <span class=\"ld-check-text\">nginx sin <code>try_files<\/code> para la instalaci\u00f3n espec\u00edfica<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"ld-terminal\">\n      <div class=\"ld-terminal-header\">\n        <span class=\"ld-terminal-btn\"><\/span>\n        <span class=\"ld-terminal-btn\"><\/span>\n        <span class=\"ld-terminal-btn\"><\/span>\n        <span class=\"ld-terminal-title\">.htaccess<\/span>\n      <\/div>\n      <div class=\"ld-terminal-body\">\n<span class=\"ld-comment\"># Correcto para WordPress en \/blog<\/span>\n<span class=\"ld-directive\">RewriteBase<\/span> \/blog\/\n<span class=\"ld-directive\">RewriteRule<\/span> . \/blog\/index.php [L]\n\n<span class=\"ld-comment\"># Incorrecto (apunta a ra\u00edz)<\/span>\n<span class=\"ld-directive\">RewriteBase<\/span> \/\n<span class=\"ld-directive\">RewriteRule<\/span> . \/index.php [L]<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n<!-- FIN BLOQUE: errores-habituales-wordpress -->\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-errores-habituales-de-url-amigables-en-prestashop\">Errores habituales de URL amigables en PrestaShop<\/h2>\n\n\n\n<p>En PrestaShop el patr\u00f3n cambia un poco. Aqu\u00ed el fallo suele estar en la regeneraci\u00f3n del archivo, en la URL de tienda o en rutas que se pisan con otra instalaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-url-simplificadas-activadas-pero-sin-efecto-real\">URL simplificadas activadas, pero sin efecto real<\/h3>\n\n\n\n<p>Puedes activar la opci\u00f3n en el panel y seguir viendo errores 404 si el servidor no aplica la reescritura o si el archivo generado no est\u00e1 donde toca.<\/p>\n\n\n\n<p>Lo correcto es empezar por el back office y no por editar a mano. Revisa <strong>SEO y URLs<\/strong>, guarda cambios y, si hace falta, regenera el archivo <code>.htaccess<\/code>.<\/p>\n\n\n\n<p>Si tu tienda est\u00e1 en un entorno espec\u00edfico de <a href=\"https:\/\/www.loading.es\/hosting-prestashop\/index.html\" target=\"_blank\" rel=\"noopener\" title=\"Hosting PrestaShop en Loadaing\">hosting Pres<\/a><a href=\"https:\/\/www.loading.es\/hosting-prestashop\/index.html\">taShop<\/a>, esta parte suele ser m\u00e1s previsible, pero los fallos siguen apareciendo cuando la tienda comparte dominio con otra aplicaci\u00f3n o cuando se mueve a <code>\/tienda<\/code> o <code>\/pruebas<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-tocar-a-mano-el-bloque-que-prestashop-genera-automaticamente\">Tocar a mano el bloque que PrestaShop genera autom\u00e1ticamente<\/h3>\n\n\n\n<p>Aqu\u00ed hay un error muy com\u00fan: editar dentro del bloque que PrestaShop reconstruye.<\/p>\n\n\n\n<p>La propia documentaci\u00f3n de PrestaShop recuerda que el <code>.htaccess<\/code> se genera autom\u00e1ticamente y que ese bloque no conviene tocarlo a mano. Puedes revisarlo en la <a href=\"https:\/\/help-center.prestashop.com\/hc\/en-us\/articles\/28895846740242--Understanding-and-modifying-the-htaccess-file-of-PrestaShop\" target=\"_blank\" rel=\"noopener\" title=\"Gu\u00eda oficial sobre el archivos htaccess en PrestaShop\">gu\u00eda oficial sobre el archivo <code>.htaccess<\/code> de PrestaShop<\/a>.<\/p>\n\n\n\n<p>El bloque suele ir delimitado con comentarios de este tipo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ~~start~~ Do not remove this comment, PrestaShop uses it to build your .htaccess file\n...\n# ~~end~~<\/code><\/pre>\n\n\n\n<p>Si necesitas una redirecci\u00f3n puntual, es mejor dejarla <strong>fuera<\/strong> de ese bloque y probarla con cuidado.<\/p>\n\n\n\n<p>Por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Redirect 301 \/categoria-antigua.html \/categoria-nueva.html<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-la-tienda-vive-en-tienda-pero-la-url-base-sigue-apuntando-a-la-raiz\">La tienda vive en <code>\/tienda<\/code>, pero la URL base sigue apuntando a la ra\u00edz<\/h3>\n\n\n\n<p>Este error da s\u00edntomas muy claros:<\/p>\n\n\n\n<ul>\n<li>Productos que abren mal<\/li>\n\n\n\n<li>Categor\u00edas con 404<\/li>\n\n\n\n<li>Im\u00e1genes o recursos que se llaman desde rutas incorrectas<\/li>\n\n\n\n<li>Redirecciones que te sacan de <code>\/tienda<\/code><\/li>\n<\/ul>\n\n\n\n<p>Si el back office no carga, revisa <code>ps_shop_url<\/code> en phpMyAdmin y confirma que <code>physical_uri<\/code> apunta a <code>\/tienda\/<\/code> o a la carpeta real que corresponda.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-productos-y-categorias-que-cambian-de-url-sin-redireccion\">Productos y categor\u00edas que cambian de URL sin redirecci\u00f3n<\/h3>\n\n\n\n<p>PrestaShop puede resolver bien la estructura general y aun as\u00ed dejarte 404 concretos en productos, categor\u00edas o p\u00e1ginas CMS.<\/p>\n\n\n\n<p>Suele pasar cuando:<\/p>\n\n\n\n<ul>\n<li>Cambias el slug<\/li>\n\n\n\n<li>Desactivas un producto sin revisar su destino<\/li>\n\n\n\n<li>Borras categor\u00edas o fichas antiguas<\/li>\n\n\n\n<li>Mueves la tienda entre producci\u00f3n y pruebas<\/li>\n<\/ul>\n\n\n\n<p>Aqu\u00ed no basta con que la URL amigable funcione. Tambi\u00e9n necesitas que la tienda <strong>redirija correctamente<\/strong> y no deje rutas hu\u00e9rfanas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-conflictos-entre-la-tienda-principal-y-una-copia-en-pruebas\">Conflictos entre la tienda principal y una copia en <code>\/pruebas<\/code><\/h3>\n\n\n\n<p>Si has clonado una tienda para probar cambios, revisa esto antes de culpar a las URL simplificadas:<\/p>\n\n\n\n<ul>\n<li>dominio y SSL en la copia<\/li>\n\n\n\n<li><code>physical_uri<\/code><\/li>\n\n\n\n<li>cach\u00e9 de PrestaShop<\/li>\n\n\n\n<li>reglas manuales heredadas del entorno principal<\/li>\n<\/ul>\n\n\n\n<p>En este escenario es muy f\u00e1cil que la copia intente comportarse como la tienda original.<\/p>\n\n\n\n<!-- BLOQUE: errores-habituales-prestashop -->\n<style>\n#comp-ld-105, #comp-ld-105 * { box-sizing: border-box; }\n#comp-ld-105 {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  color: #37363d;\n  max-width: 720px;\n  margin: 2rem auto;\n  padding: 1.5rem;\n}\n\n#comp-ld-105 .ld-card {\n  background: white;\n  border-radius: 16px;\n  padding: 1.5rem;\n  border: 1px solid rgba(219, 116, 36, 0.2);\n  box-shadow: 0 4px 20px rgba(219, 116, 36, 0.08);\n}\n\n#comp-ld-105 .ld-header {\n  display: flex;\n  align-items: center;\n  gap: 0.875rem;\n  margin-bottom: 1.25rem;\n  padding-bottom: 1rem;\n  border-bottom: 2px solid #f4f4f6;\n}\n\n#comp-ld-105 .ld-header-icon {\n  width: 44px;\n  height: 44px;\n  background: linear-gradient(135deg, #db7424 0%, #e89252 100%);\n  border-radius: 10px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n#comp-ld-105 .ld-header-icon svg {\n  width: 24px;\n  height: 24px;\n  stroke: white;\n  stroke-width: 2;\n  fill: none;\n}\n\n#comp-ld-105 .ld-header-title {\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #37363d;\n}\n\n#comp-ld-105 .ld-checklist {\n  display: flex;\n  flex-direction: column;\n  gap: 0.75rem;\n  margin-bottom: 1.25rem;\n}\n\n#comp-ld-105 .ld-check-item {\n  display: flex;\n  align-items: flex-start;\n  gap: 0.75rem;\n  padding: 0.875rem;\n  background: #f4f4f6;\n  border-radius: 10px;\n  transition: all 0.2s ease;\n}\n\n#comp-ld-105 .ld-check-item:hover {\n  background: rgba(219, 116, 36, 0.08);\n  transform: translateX(4px);\n}\n\n#comp-ld-105 .ld-check-icon {\n  width: 22px;\n  height: 22px;\n  background: #db7424;\n  border-radius: 5px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  margin-top: 1px;\n}\n\n#comp-ld-105 .ld-check-icon svg {\n  width: 14px;\n  height: 14px;\n  stroke: white;\n  stroke-width: 3;\n  fill: none;\n}\n\n#comp-ld-105 .ld-check-text {\n  flex: 1;\n  font-size: 0.9rem;\n  line-height: 1.45;\n  color: #37363d;\n}\n\n#comp-ld-105 .ld-terminal {\n  background: #1e1e1e;\n  border-radius: 12px;\n  overflow: hidden;\n  box-shadow: 0 8px 24px rgba(0,0,0,0.3);\n}\n\n#comp-ld-105 .ld-terminal-header {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  padding: 0.625rem 0.875rem;\n  background: #2d2d2d;\n  border-bottom: 1px solid #3d3d3d;\n}\n\n#comp-ld-105 .ld-terminal-btn {\n  width: 12px;\n  height: 12px;\n  border-radius: 50%;\n}\n\n#comp-ld-105 .ld-terminal-btn:nth-child(1) { background: #ff5f56; }\n#comp-ld-105 .ld-terminal-btn:nth-child(2) { background: #ffbd2e; }\n#comp-ld-105 .ld-terminal-btn:nth-child(3) { background: #27c93f; }\n\n#comp-ld-105 .ld-terminal-title {\n  margin-left: auto;\n  font-family: 'SF Mono', 'Fira Code', monospace;\n  font-size: 0.7rem;\n  color: #888;\n}\n\n#comp-ld-105 .ld-terminal-body {\n  padding: 1rem;\n  font-family: 'SF Mono', 'Fira Code', monospace;\n  font-size: 0.8rem;\n  line-height: 1.6;\n  color: #e4e4e4;\n  overflow-x: auto;\n}\n\n#comp-ld-105 .ld-terminal-body .ld-comment { color: #6a9955; }\n#comp-ld-105 .ld-terminal-body .ld-tag { color: #808080; }\n\n@media (max-width: 480px) {\n  #comp-ld-105 { padding: 1rem; }\n  #comp-ld-105 .ld-terminal-body { font-size: 0.75rem; padding: 0.875rem; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  #comp-ld-105 * { transition: none !important; animation: none !important; }\n}\n<\/style>\n\n<div id=\"comp-ld-105\">\n  <div class=\"ld-card\">\n    <div class=\"ld-header\">\n      <div class=\"ld-header-icon\">\n        <svg viewBox=\"0 0 24 24\"><path d=\"M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z\"\/><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"\/><path d=\"M16 10a4 4 0 0 1-8 0\"\/><\/svg>\n      <\/div>\n      <span class=\"ld-header-title\">Errores habituales en PrestaShop<\/span>\n    <\/div>\n    <div class=\"ld-checklist\">\n      <div class=\"ld-check-item\">\n        <span class=\"ld-check-icon\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span>\n        <span class=\"ld-check-text\">URLs simplificadas activadas pero el servidor no las aplica<\/span>\n      <\/div>\n      <div class=\"ld-check-item\">\n        <span class=\"ld-check-icon\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span>\n        <span class=\"ld-check-text\">Editar a mano el bloque que PrestaShop genera autom\u00e1ticamente<\/span>\n      <\/div>\n      <div class=\"ld-check-item\">\n        <span class=\"ld-check-icon\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span>\n        <span class=\"ld-check-text\"><code>physical_uri<\/code> en <code>ps_shop_url<\/code> apunta a la ra\u00edz en vez de \/tienda\/<\/span>\n      <\/div>\n      <div class=\"ld-check-item\">\n        <span class=\"ld-check-icon\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span>\n        <span class=\"ld-check-text\">Productos y categor\u00edas cambiados sin redirecci\u00f3n 301<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"ld-terminal\">\n      <div class=\"ld-terminal-header\">\n        <span class=\"ld-terminal-btn\"><\/span>\n        <span class=\"ld-terminal-btn\"><\/span>\n        <span class=\"ld-terminal-btn\"><\/span>\n        <span class=\"ld-terminal-title\">.htaccess<\/span>\n      <\/div>\n      <div class=\"ld-terminal-body\">\n<span class=\"ld-tag\"># ~~start~~<\/span> <span class=\"ld-comment\">No editar: bloque autogenerado<\/span>\n<span class=\"ld-comment\"># Tus redirecciones van FUERA de estos comentarios<\/span>\n<span class=\"ld-tag\"># ~~end~~<\/span>\n\n<span class=\"ld-comment\"># Ejemplo: redirecci\u00f3n 301 manual<\/span>\nRedirect 301 \/categoria-antigua.html \/categoria-nueva.html<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n<!-- FIN BLOQUE: errores-habituales-prestashop -->\n\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-apache-y-nginx-no-gestionan-las-url-amigables-de-la-misma-forma\">Apache y nginx no gestionan las URL amigables de la misma forma<\/h2>\n\n\n\n<p>Este es uno de los errores de enfoque m\u00e1s habituales.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-en-apache-si-cuentan-htaccess-y-mod_rewrite\">En Apache s\u00ed cuentan <code>.htaccess<\/code> y <code>mod_rewrite<\/code><\/h3>\n\n\n\n<p>Cuando trabajas sobre Apache, WordPress y PrestaShop dependen de reglas de reescritura para convertir URLs limpias en rutas internas v\u00e1lidas.<\/p>\n\n\n\n<p>Eso significa que aqu\u00ed s\u00ed tiene sentido revisar:<\/p>\n\n\n\n<ul>\n<li><code>RewriteEngine On<\/code><\/li>\n\n\n\n<li><code>RewriteBase<\/code><\/li>\n\n\n\n<li>reglas de paso a <code>index.php<\/code><\/li>\n\n\n\n<li>redirecciones manuales mal colocadas<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-en-nginx-la-logica-va-en-el-servidor\">En nginx la l\u00f3gica va en el servidor<\/h3>\n\n\n\n<p>nginx no lee <code>.htaccess<\/code>.<\/p>\n\n\n\n<p>Por eso, si migras una instalaci\u00f3n que funcionaba en Apache y copias solo el CMS, puedes encontrarte con una web que carga la portada pero rompe todas las URLs internas. <strong>No faltan reglas en el CMS. Faltan reglas en nginx<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-donde-encaja-rewriteoptions-ignoreinherit\">D\u00f3nde encaja <code>RewriteOptions IgnoreInherit<\/code><\/h3>\n\n\n\n<p>Esta directiva merece una aclaraci\u00f3n, porque viene del caso original del post.<\/p>\n\n\n\n<p><code>RewriteOptions IgnoreInherit<\/code> <strong>no arregla cualquier conflicto entre ra\u00edz y subdirectorios<\/strong>. En Apache se usa para evitar la herencia de reglas cuando existe una configuraci\u00f3n padre que est\u00e1 propagando reglas de reescritura a niveles inferiores, por ejemplo con <code>InheritDown<\/code> o <code>InheritDownBefore<\/code>.<\/p>\n\n\n\n<p>Un esquema simplificado ser\u00eda este:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Contexto padre\n&lt;IfModule mod_rewrite.c&gt;\nRewriteEngine On\nRewriteOptions InheritDown\n&lt;\/IfModule&gt;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Contexto hijo\n&lt;IfModule mod_rewrite.c&gt;\nRewriteEngine On\nRewriteOptions IgnoreInherit\n&lt;\/IfModule&gt;<\/code><\/pre>\n\n\n\n<p>\u00bfCu\u00e1ndo tiene sentido?<\/p>\n\n\n\n<ul>\n<li>Cuando sabes que existe herencia real de reglas<\/li>\n\n\n\n<li>Cuando el conflicto est\u00e1 en Apache<\/li>\n\n\n\n<li>Cuando la instalaci\u00f3n hija necesita aislar su propia l\u00f3gica de reescritura<\/li>\n<\/ul>\n\n\n\n<p>\u00bfCu\u00e1ndo no te va a sacar del problema?<\/p>\n\n\n\n<ul>\n<li>Si el error est\u00e1 en <code>siteurl<\/code>, <code>home<\/code> o <code>ps_shop_url<\/code><\/li>\n\n\n\n<li>Si el servidor es nginx<\/li>\n\n\n\n<li>Si el bloque de WordPress o PrestaShop apunta a una base incorrecta<\/li>\n\n\n\n<li>Si una copia en <code>\/pruebas<\/code> sigue usando el dominio de producci\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>Dicho de forma simple: <strong>puede ser \u00fatil en un caso concreto, pero no sustituye al diagn\u00f3stico<\/strong>.<\/p>\n\n\n\n<!-- BLOQUE: apache-vs-nginx -->\n<style>\n#comp-ld-106, #comp-ld-106 * { box-sizing: border-box; }\n#comp-ld-106 {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  color: #e4e4e4;\n  max-width: 720px;\n  margin: 2rem auto;\n  padding: 1.5rem;\n}\n\n#comp-ld-106 .ld-container {\n  background: linear-gradient(145deg, #37363d 0%, #2a2930 100%);\n  border-radius: 20px;\n  padding: 1.5rem;\n  box-shadow: 0 12px 40px rgba(0,0,0,0.4);\n}\n\n#comp-ld-106 .ld-header {\n  text-align: center;\n  margin-bottom: 1.5rem;\n}\n\n#comp-ld-106 .ld-header-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.5rem;\n  background: rgba(255,255,255,0.08);\n  padding: 0.5rem 1rem;\n  border-radius: 24px;\n  font-size: 0.85rem;\n  font-weight: 600;\n  margin-bottom: 0.75rem;\n}\n\n#comp-ld-106 .ld-header-badge svg {\n  width: 18px;\n  height: 18px;\n  stroke: #db7424;\n  stroke-width: 2;\n  fill: none;\n}\n\n#comp-ld-106 .ld-header-title {\n  font-size: 1.15rem;\n  font-weight: 700;\n  color: white;\n}\n\n#comp-ld-106 .ld-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1rem;\n}\n\n#comp-ld-106 .ld-panel {\n  background: #1e1e1e;\n  border-radius: 14px;\n  overflow: hidden;\n  border: 1px solid rgba(255,255,255,0.08);\n}\n\n#comp-ld-106 .ld-panel-header {\n  display: flex;\n  align-items: center;\n  gap: 0.625rem;\n  padding: 0.875rem 1rem;\n  background: #252525;\n  border-bottom: 1px solid #333;\n}\n\n#comp-ld-106 .ld-panel-icon {\n  width: 28px;\n  height: 28px;\n  border-radius: 6px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n#comp-ld-106 .ld-panel:nth-child(1) .ld-panel-icon { background: #db7424; }\n#comp-ld-106 .ld-panel:nth-child(2) .ld-panel-icon { background: #00bcdf; }\n\n#comp-ld-106 .ld-panel-icon svg {\n  width: 16px;\n  height: 16px;\n  stroke: white;\n  stroke-width: 2;\n  fill: none;\n}\n\n#comp-ld-106 .ld-panel-title {\n  font-size: 0.95rem;\n  font-weight: 700;\n  color: white;\n}\n\n#comp-ld-106 .ld-panel-body {\n  padding: 1rem;\n}\n\n#comp-ld-106 .ld-point {\n  display: flex;\n  align-items: flex-start;\n  gap: 0.625rem;\n  margin-bottom: 0.75rem;\n  font-size: 0.8rem;\n  line-height: 1.4;\n  color: #aaa;\n}\n\n#comp-ld-106 .ld-point:last-child { margin-bottom: 0; }\n\n#comp-ld-106 .ld-bullet {\n  width: 6px;\n  height: 6px;\n  border-radius: 50%;\n  margin-top: 0.4rem;\n  flex-shrink: 0;\n}\n\n#comp-ld-106 .ld-panel:nth-child(1) .ld-bullet { background: #db7424; }\n#comp-ld-106 .ld-panel:nth-child(2) .ld-bullet { background: #00bcdf; }\n\n#comp-ld-106 .ld-terminal {\n  background: #0d0d0d;\n  border-radius: 8px;\n  overflow: hidden;\n  margin-top: 0.75rem;\n}\n\n#comp-ld-106 .ld-terminal-header {\n  display: flex;\n  align-items: center;\n  gap: 0.375rem;\n  padding: 0.375rem 0.625rem;\n  background: #1a1a1a;\n  border-bottom: 1px solid #2a2a2a;\n}\n\n#comp-ld-106 .ld-terminal-btn {\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n}\n\n#comp-ld-106 .ld-terminal-btn:nth-child(1) { background: #ff5f56; }\n#comp-ld-106 .ld-terminal-btn:nth-child(2) { background: #ffbd2e; }\n#comp-ld-106 .ld-terminal-btn:nth-child(3) { background: #27c93f; }\n\n#comp-ld-106 .ld-terminal-body {\n  padding: 0.75rem;\n  font-family: 'SF Mono', 'Fira Code', monospace;\n  font-size: 0.7rem;\n  line-height: 1.55;\n  color: #e4e4e4;\n  overflow-x: auto;\n}\n\n#comp-ld-106 .ld-terminal-body .ld-directive { color: #569cd6; }\n#comp-ld-106 .ld-terminal-body .ld-string { color: #ce9178; }\n#comp-ld-106 .ld-terminal-body .ld-comment { color: #6a9955; }\n#comp-ld-106 .ld-terminal-body .ld-keyword { color: #c586c0; }\n\n#comp-ld-106 .ld-ignore-box {\n  background: rgba(219, 116, 36, 0.1);\n  border: 1px solid rgba(219, 116, 36, 0.3);\n  border-radius: 10px;\n  padding: 1rem;\n  margin-top: 1.25rem;\n}\n\n#comp-ld-106 .ld-ignore-title {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  font-size: 0.85rem;\n  font-weight: 700;\n  color: #db7424;\n  margin-bottom: 0.5rem;\n}\n\n#comp-ld-106 .ld-ignore-title svg {\n  width: 18px;\n  height: 18px;\n  stroke: #db7424;\n  stroke-width: 2;\n  fill: none;\n}\n\n#comp-ld-106 .ld-ignore-text {\n  font-size: 0.8rem;\n  line-height: 1.5;\n  color: #bbb;\n}\n\n#comp-ld-106 .ld-ignore-text code {\n  background: rgba(255,255,255,0.1);\n  padding: 0.125rem 0.375rem;\n  border-radius: 4px;\n  font-family: 'SF Mono', 'Fira Code', monospace;\n  color: #db7424;\n}\n\n@media (max-width: 640px) {\n  #comp-ld-106 .ld-grid { grid-template-columns: 1fr; }\n  #comp-ld-106 .ld-terminal-body { font-size: 0.65rem; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  #comp-ld-106 * { transition: none !important; animation: none !important; }\n}\n<\/style>\n\n<div id=\"comp-ld-106\">\n  <div class=\"ld-container\">\n    <div class=\"ld-header\">\n      <div class=\"ld-header-badge\">\n        <svg viewBox=\"0 0 24 24\"><path d=\"M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5\"\/><\/svg>\n        Diferencias clave\n      <\/div>\n      <div class=\"ld-header-title\">Apache vs nginx: c\u00f3mo gestionan las URL amigables<\/div>\n    <\/div>\n    <div class=\"ld-grid\">\n      <div class=\"ld-panel\">\n        <div class=\"ld-panel-header\">\n          <div class=\"ld-panel-icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\"\/><\/svg><\/div>\n          <span class=\"ld-panel-title\">Apache<\/span>\n        <\/div>\n        <div class=\"ld-panel-body\">\n          <div class=\"ld-point\"><span class=\"ld-bullet\"><\/span>Lee y aplica .htaccess<\/div>\n          <div class=\"ld-point\"><span class=\"ld-bullet\"><\/span>Usa mod_rewrite<\/div>\n          <div class=\"ld-point\"><span class=\"ld-bullet\"><\/span>Reglas por directorio<\/div>\n          <div class=\"ld-terminal\">\n            <div class=\"ld-terminal-header\">\n              <span class=\"ld-terminal-btn\"><\/span>\n              <span class=\"ld-terminal-btn\"><\/span>\n              <span class=\"ld-terminal-btn\"><\/span>\n            <\/div>\n            <div class=\"ld-terminal-body\">\n<span class=\"ld-directive\">RewriteEngine<\/span> <span class=\"ld-string\">On<\/span>\n<span class=\"ld-directive\">RewriteBase<\/span> \/blog\/\n<span class=\"ld-directive\">RewriteRule<\/span> . \/blog\/index.php [L]<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"ld-panel\">\n        <div class=\"ld-panel-header\">\n          <div class=\"ld-panel-icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"\/><path d=\"M22 6l-10 7L2 6\"\/><\/svg><\/div>\n          <span class=\"ld-panel-title\">nginx<\/span>\n        <\/div>\n        <div class=\"ld-panel-body\">\n          <div class=\"ld-point\"><span class=\"ld-bullet\"><\/span>No lee .htaccess<\/div>\n          <div class=\"ld-point\"><span class=\"ld-bullet\"><\/span>Configuraci\u00f3n en servidor<\/div>\n          <div class=\"ld-point\"><span class=\"ld-bullet\"><\/span>try_files para reescritura<\/div>\n          <div class=\"ld-terminal\">\n            <div class=\"ld-terminal-header\">\n              <span class=\"ld-terminal-btn\"><\/span>\n              <span class=\"ld-terminal-btn\"><\/span>\n              <span class=\"ld-terminal-btn\"><\/span>\n            <\/div>\n            <div class=\"ld-terminal-body\">\nlocation \/blog\/ {\n    <span class=\"ld-keyword\">try_files<\/span> <span class=\"ld-string\">$uri $uri\/<\/span>\n    \/blog\/index.php?<span class=\"ld-string\">$args<\/span>;\n}<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n    <div class=\"ld-ignore-box\">\n      <div class=\"ld-ignore-title\">\n        <svg viewBox=\"0 0 24 24\"><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"\/><\/svg>\n        Sobre RewriteOptions IgnoreInherit\n      <\/div>\n      <div class=\"ld-ignore-text\">\n        Solo tiene sentido en Apache cuando existe <strong>herencia real<\/strong> de reglas entre configuraciones padre e hijo. <strong>No es una soluci\u00f3n universal<\/strong> para errores 404, nginx o problemas de URL base en el CMS.\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n<!-- FIN BLOQUE: apache-vs-nginx -->\n\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-conclusion\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>Cuando WordPress y PrestaShop comparten dominio o subdirectorios, los errores de URL amigables casi nunca se resuelven bien con una \u00fanica l\u00ednea copiada de otro sitio.<\/p>\n\n\n\n<p>Lo que mejor funciona es revisar el problema por capas: <strong>CMS, ruta base, <code>.htaccess<\/code> si hay Apache, configuraci\u00f3n del servidor si hay nginx y valores guardados en base de datos<\/strong>. A partir de ah\u00ed ya puedes corregir el origen real del fallo, tanto en <code>dominio.com\/blog<\/code> como en <code>dominio.com\/tienda<\/code> o en una copia dentro de <code>\/pruebas<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.loading.es\/hosting-prestashop\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" loading=\"lazy\" width=\"1000\" height=\"100\" src=\"https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-hosting-prestashop.png\" alt=\"Oferta Contratar Hosting PrestaShop\" class=\"wp-image-8077\" srcset=\"https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-hosting-prestashop.png 1000w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-hosting-prestashop-300x30.png 300w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-hosting-prestashop-768x77.png 768w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-hosting-prestashop-850x85.png 850w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-preguntas-frecuentes-sobre-url-amigables-en-prestashop-y-wordpress\">Preguntas frecuentes sobre URL amigables en Prestashop y WordPress (FAQ)<\/h2>\n\n\n\n<!-- BLOQUE: faq -->\n<style>\n#comp-ld-107, #comp-ld-107 * { box-sizing: border-box; }\n#comp-ld-107 {\n  font-family: inherit;\n  color: #37363d;\n  max-width: 720px;\n  margin: 2rem auto;\n  padding: 0 1.5rem;\n}\n\n#comp-ld-107 .ld-faq-item {\n  border-bottom: 1px solid rgba(55, 54, 61, 0.1);\n}\n\n#comp-ld-107 .ld-faq-item:last-child {\n  border-bottom: none;\n}\n\n#comp-ld-107 summary {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 1rem;\n  padding: 1.125rem 0;\n  font-weight: 700;\n  font-size: 0.95rem;\n  color: #37363d;\n  cursor: pointer;\n  list-style: none;\n  transition: color 0.2s ease;\n}\n\n#comp-ld-107 summary:hover {\n  color: #db7424;\n}\n\n#comp-ld-107 summary::-webkit-details-marker {\n  display: none;\n}\n\n#comp-ld-107 summary::after {\n  content: '+';\n  width: 24px;\n  height: 24px;\n  border-radius: 50%;\n  background: rgba(219, 116, 36, 0.1);\n  color: #db7424;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1rem;\n  font-weight: 700;\n  flex-shrink: 0;\n  transition: all 0.2s ease;\n}\n\n#comp-ld-107 details[open] summary::after {\n  content: '\u2013';\n  background: rgba(219, 116, 36, 0.2);\n}\n\n#comp-ld-107 .ld-faq-answer {\n  padding: 0 0 1.125rem 0;\n  font-size: 0.9rem;\n  line-height: 1.55;\n  color: #4b5563;\n}\n\n#comp-ld-107 .ld-faq-answer code {\n  background: #f4f4f6;\n  padding: 0.125rem 0.375rem;\n  border-radius: 4px;\n  font-family: 'SF Mono', 'Fira Code', monospace;\n  font-size: 0.85em;\n}\n\n#comp-ld-107 summary:focus-visible {\n  outline: 2px solid #db7424;\n  outline-offset: 2px;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  #comp-ld-107 * { transition: none !important; animation: none !important; }\n}\n<\/style>\n\n<div id=\"comp-ld-107\">\n  <details class=\"ld-faq-item\">\n    <summary>\u00bfSi guardo los enlaces permanentes en WordPress se arregla siempre?<\/summary>\n    <div class=\"ld-faq-answer\">No. Si el problema est\u00e1 en nginx, en la URL base o en un archivo .htaccess mal planteado, guardar no basta.<\/div>\n  <\/details>\n  <details class=\"ld-faq-item\">\n    <summary>\u00bfPuedo usar el mismo archivo .htaccess para WordPress y PrestaShop?<\/summary>\n    <div class=\"ld-faq-answer\">No es lo recomendable. Cada instalaci\u00f3n debe tener reglas coherentes con su ruta y su CMS.<\/div>\n  <\/details>\n  <details class=\"ld-faq-item\">\n    <summary>\u00bfRewriteOptions IgnoreInherit sirve para cualquier error 404?<\/summary>\n    <div class=\"ld-faq-answer\">No. Solo encaja en ciertos escenarios de Apache con herencia real de reglas.<\/div>\n  <\/details>\n  <details class=\"ld-faq-item\">\n    <summary>\u00bfEn nginx tengo que tocar el archivo .htaccess?<\/summary>\n    <div class=\"ld-faq-answer\">No. nginx no lo interpreta. Las reglas deben ir en la configuraci\u00f3n del servidor.<\/div>\n  <\/details>\n  <details class=\"ld-faq-item\">\n    <summary>\u00bfQu\u00e9 debo revisar primero si uso Plesk?<\/summary>\n    <div class=\"ld-faq-answer\">Primero el panel del CMS. Despu\u00e9s el Administrador de archivos de Plesk y, si hace falta, los valores de base de datos en phpMyAdmin.<\/div>\n  <\/details>\n  <details class=\"ld-faq-item\">\n    <summary>\u00bfQu\u00e9 tabla suele dar pistas cuando una instalaci\u00f3n en subdirectorio apunta mal?<\/summary>\n    <div class=\"ld-faq-answer\">En WordPress, wp_options. En PrestaShop, ps_shop_url.<\/div>\n  <\/details>\n<\/div>\n<!-- FIN BLOQUE: faq -->\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-4 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-el-blog-de-loading wp-block-embed-el-blog-de-loading\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"K6lXquZ7u9\"><a href=\"https:\/\/www.loading.es\/blog\/enlaces-follow-enlaces-no-follow-seo\/\">Qu\u00e9 son los enlaces follow y no follow y por qu\u00e9 importan en SEO<\/a><\/blockquote><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"\u00abQu\u00e9 son los enlaces follow y no follow y por qu\u00e9 importan en SEO\u00bb \u2014 El blog de Loading\" src=\"https:\/\/www.loading.es\/blog\/enlaces-follow-enlaces-no-follow-seo\/embed\/#?secret=SBzLQT6ZCE#?secret=K6lXquZ7u9\" data-secret=\"K6lXquZ7u9\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-el-blog-de-loading wp-block-embed-el-blog-de-loading\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"3ljE2zd5wd\"><a href=\"https:\/\/www.loading.es\/blog\/encontrar-enlaces-rotos-wordpress\/\">C\u00f3mo encontrar enlaces rotos en WordPress<\/a><\/blockquote><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"\u00abC\u00f3mo encontrar enlaces rotos en WordPress\u00bb \u2014 El blog de Loading\" src=\"https:\/\/www.loading.es\/blog\/encontrar-enlaces-rotos-wordpress\/embed\/#?secret=JeuQ903dIU#?secret=3ljE2zd5wd\" data-secret=\"3ljE2zd5wd\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-el-blog-de-loading wp-block-embed-el-blog-de-loading\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"TYxniLbR7m\"><a href=\"https:\/\/www.loading.es\/blog\/sitemap-prestashop\/\">C\u00f3mo crear y configurar el sitemap en PrestaShop paso a paso<\/a><\/blockquote><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"\u00abC\u00f3mo crear y configurar el sitemap en PrestaShop paso a paso\u00bb \u2014 El blog de Loading\" src=\"https:\/\/www.loading.es\/blog\/sitemap-prestashop\/embed\/#?secret=RK5BvfOgND#?secret=TYxniLbR7m\" data-secret=\"TYxniLbR7m\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n\n\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfSi guardo los enlaces permanentes en WordPress se arregla siempre?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"No. Si el problema est\u00e1 en nginx, en la URL base o en un .htaccess mal planteado, guardar no basta.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfPuedo usar el mismo .htaccess para WordPress y PrestaShop?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"No es lo recomendable. Cada instalaci\u00f3n debe tener reglas coherentes con su ruta y su CMS.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfRewriteOptions IgnoreInherit sirve para cualquier error 404?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"No. Solo encaja en ciertos escenarios de Apache con herencia real de reglas.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfEn nginx tengo que tocar .htaccess?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"No. nginx no lo interpreta. Las reglas deben ir en la configuraci\u00f3n del servidor.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfQu\u00e9 debo revisar primero si uso Plesk?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Primero el panel del CMS. Despu\u00e9s el Administrador de archivos de Plesk y, si hace falta, los valores de base de datos en phpMyAdmin.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfQu\u00e9 tabla suele dar pistas cuando una instalaci\u00f3n en subdirectorio apunta mal?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"En WordPress, wp_options. En PrestaShop, ps_shop_url.\"\n      }\n    }\n  ]\n}\n<\/script>\n\n\n\n<p class=\"has-text-align-center\"><strong>S\u00edguenos en<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-social-links aligncenter is-layout-flex wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a href=\"https:\/\/www.facebook.com\/loading.hosting\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-instagram  wp-block-social-link\"><a href=\"https:\/\/www.instagram.com\/loading.es\/\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,4.622c2.403,0,2.688,0.009,3.637,0.052c0.877,0.04,1.354,0.187,1.671,0.31c0.42,0.163,0.72,0.358,1.035,0.673 c0.315,0.315,0.51,0.615,0.673,1.035c0.123,0.317,0.27,0.794,0.31,1.671c0.043,0.949,0.052,1.234,0.052,3.637 s-0.009,2.688-0.052,3.637c-0.04,0.877-0.187,1.354-0.31,1.671c-0.163,0.42-0.358,0.72-0.673,1.035 c-0.315,0.315-0.615,0.51-1.035,0.673c-0.317,0.123-0.794,0.27-1.671,0.31c-0.949,0.043-1.233,0.052-3.637,0.052 s-2.688-0.009-3.637-0.052c-0.877-0.04-1.354-0.187-1.671-0.31c-0.42-0.163-0.72-0.358-1.035-0.673 c-0.315-0.315-0.51-0.615-0.673-1.035c-0.123-0.317-0.27-0.794-0.31-1.671C4.631,14.688,4.622,14.403,4.622,12 s0.009-2.688,0.052-3.637c0.04-0.877,0.187-1.354,0.31-1.671c0.163-0.42,0.358-0.72,0.673-1.035 c0.315-0.315,0.615-0.51,1.035-0.673c0.317-0.123,0.794-0.27,1.671-0.31C9.312,4.631,9.597,4.622,12,4.622 M12,3 C9.556,3,9.249,3.01,8.289,3.054C7.331,3.098,6.677,3.25,6.105,3.472C5.513,3.702,5.011,4.01,4.511,4.511 c-0.5,0.5-0.808,1.002-1.038,1.594C3.25,6.677,3.098,7.331,3.054,8.289C3.01,9.249,3,9.556,3,12c0,2.444,0.01,2.751,0.054,3.711 c0.044,0.958,0.196,1.612,0.418,2.185c0.23,0.592,0.538,1.094,1.038,1.594c0.5,0.5,1.002,0.808,1.594,1.038 c0.572,0.222,1.227,0.375,2.185,0.418C9.249,20.99,9.556,21,12,21s2.751-0.01,3.711-0.054c0.958-0.044,1.612-0.196,2.185-0.418 c0.592-0.23,1.094-0.538,1.594-1.038c0.5-0.5,0.808-1.002,1.038-1.594c0.222-0.572,0.375-1.227,0.418-2.185 C20.99,14.751,21,14.444,21,12s-0.01-2.751-0.054-3.711c-0.044-0.958-0.196-1.612-0.418-2.185c-0.23-0.592-0.538-1.094-1.038-1.594 c-0.5-0.5-1.002-0.808-1.594-1.038c-0.572-0.222-1.227-0.375-2.185-0.418C14.751,3.01,14.444,3,12,3L12,3z M12,7.378 c-2.552,0-4.622,2.069-4.622,4.622S9.448,16.622,12,16.622s4.622-2.069,4.622-4.622S14.552,7.378,12,7.378z M12,15 c-1.657,0-3-1.343-3-3s1.343-3,3-3s3,1.343,3,3S13.657,15,12,15z M16.804,6.116c-0.596,0-1.08,0.484-1.08,1.08 s0.484,1.08,1.08,1.08c0.596,0,1.08-0.484,1.08-1.08S17.401,6.116,16.804,6.116z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Instagram<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-twitter  wp-block-social-link\"><a href=\"https:\/\/twitter.com\/loading_es\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M22.23,5.924c-0.736,0.326-1.527,0.547-2.357,0.646c0.847-0.508,1.498-1.312,1.804-2.27 c-0.793,0.47-1.671,0.812-2.606,0.996C18.324,4.498,17.257,4,16.077,4c-2.266,0-4.103,1.837-4.103,4.103 c0,0.322,0.036,0.635,0.106,0.935C8.67,8.867,5.647,7.234,3.623,4.751C3.27,5.357,3.067,6.062,3.067,6.814 c0,1.424,0.724,2.679,1.825,3.415c-0.673-0.021-1.305-0.206-1.859-0.513c0,0.017,0,0.034,0,0.052c0,1.988,1.414,3.647,3.292,4.023 c-0.344,0.094-0.707,0.144-1.081,0.144c-0.264,0-0.521-0.026-0.772-0.074c0.522,1.63,2.038,2.816,3.833,2.85 c-1.404,1.1-3.174,1.756-5.096,1.756c-0.331,0-0.658-0.019-0.979-0.057c1.816,1.164,3.973,1.843,6.29,1.843 c7.547,0,11.675-6.252,11.675-11.675c0-0.178-0.004-0.355-0.012-0.531C20.985,7.47,21.68,6.747,22.23,5.924z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Twitter<\/span><\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Cuando instalamos varias aplicaciones en un mismo dominio\/subdominio podemos tener problemas con las reglas del fichero .htaccess o URL amigables.<br \/>\nEl problema surge porque la aplicaci\u00f3n que est\u00e1 en el subdirectorio hereda las reglas del fichero .htaccess de la carpeta ra\u00edz.<\/p>\n","protected":false},"author":1,"featured_media":11512,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[49,35,66],"tags":[5,50,329,72],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/posts\/6374"}],"collection":[{"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/comments?post=6374"}],"version-history":[{"count":15,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/posts\/6374\/revisions"}],"predecessor-version":[{"id":11511,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/posts\/6374\/revisions\/11511"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/media\/11512"}],"wp:attachment":[{"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/media?parent=6374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/categories?post=6374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/tags?post=6374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}