Vincular tiendas físicas en PrestaShop con landings geo para SEO local
Solución técnica para enlazar automáticamente cada tienda del listado de PrestaShop con su landing geo optimizada para SEO local. Función Smarty personalizada en stores.tpl — sin duplicación manual, sin errores de asignación.
Vincular tiendas físicas con landings geo: automatización sin errores manuales
El objetivo es vincular automáticamente los nombres de las tiendas en la página "Nuestras Tiendas" de PrestaShop con las landings geo creadas en el CMS y optimizadas para SEO local. Cada tienda física tiene ubicación real, búsquedas orgánicas de marca+geo y servicios diferenciados — la landing geo conecta esa intención de búsqueda con la información correcta.
Con esta solución, cada tienda del listado tiene su enlace personalizado y funcional sin necesidad de insertarlo manualmente. El array de datos en la función Smarty asigna la URL de forma automática basándose en el nombre exacto de la tienda en PrestaShop.
functions.php para la función y stores.tpl para el template
Duplicación en el bucle foreach: todas las tiendas en cada ubicación
Al implementar la solución inicial, se mostraban todos los nombres de tiendas en cada ubicación en lugar de solo la tienda correspondiente. La causa: el bucle foreach recorría todas las tiendas dentro de cada iteración, sin filtrar por la tienda actual.
El bucle recorría el array completo de tiendas para cada posición del listado, sin comprobar si el nombre de la tienda del array coincidía con la tienda actual del foreach de Smarty. Resultado: todas las URLs aparecían en todas las posiciones.
getStoreUrl con búsqueda por nombre exacto
La función getStoreUrl recibe el nombre de la tienda actual como parámetro y busca en el array solo la entrada cuyo name coincide exactamente. Devuelve una única URL por tienda, o # como fallback si no se encuentra coincidencia.
Dos archivos, dos pasos: functions.php y stores.tpl
La solución completa requiere modificar solo dos archivos del tema de PrestaShop. La función va en el PHP del tema y la llamada va en el template Smarty de tiendas.
functions.php
Define la función smarty_function_getStoreUrl en el archivo functions.php del tema. El array $tiendas mapea cada nombre de tienda exacto con su URL de landing geo. La función hace un foreach del array y devuelve la URL cuando encuentra coincidencia de nombre.
stores.tpl
En el template stores.tpl, dentro del {foreach $stores as $store}, envuelve el nombre de cada tienda en un enlace que usa {getStoreUrl name=$store.name} como href. Smarty llama a la función PHP con el nombre actual y devuelve la URL exacta para esa tienda.
functions.php
<?php
function smarty_function_getStoreUrl($params, &$smarty) {
$tiendas = [
['name' => 'Tienda Geo1', 'url' => 'https://www.ecommerce.com/p/27-tienda-geo1'],
['name' => 'Tienda Geo2', 'url' => 'https://www.ecommerce.com/p/29-tienda-geo2'],
// Añade el resto de tiendas aquí...
];
$storeName = $params['name'];
foreach ($tiendas as $tienda) {
if ($tienda['name'] === $storeName) {
return $tienda['url'];
}
}
return '#'; // Fallback si no hay coincidencia
}
?>
stores.tpl
{extends file='page.tpl'}
{block name='page_title'}
{l s='Our stores' d='Shop.Theme.Global'}
{/block}
{block name='page_content_container'}
<section id="content" class="page-content page-stores">
{foreach $stores as $store}
<h2 class="h3 card-title my-custom-class">
<a href="{getStoreUrl name=$store.name}">{$store.name}</a>
</h2>
{/foreach}
</section>
{/block}
Tres puntos críticos: nombres exactos, mantenimiento y entorno de pruebas
- Coincidencia exacta de nombres
- Los nombres en el array de
$tiendasdeben coincidir exactamente con los nombres de tienda registrados en el panel de PrestaShop — incluyendo mayúsculas, acentos y espacios. Una diferencia de un carácter hace que la función devuelva el fallback#en lugar de la URL correcta. - Array externo para catálogos grandes o cambiantes
- Si el número de tiendas es elevado o cambia con frecuencia, considera gestionar el array desde un archivo externo (JSON o CSV) en lugar de hardcodearlo en
functions.php. Facilita el mantenimiento sin necesidad de tocar código PHP cada vez que se añade o modifica una tienda. - Prueba en staging antes de producción
- Aplica los cambios primero en un entorno de desarrollo o staging para verificar que cada tienda recibe el enlace correcto y que no hay regresiones en el template de tiendas. Un error en
stores.tplpuede romper la visualización de toda la página de tiendas en producción.
Yel Martínez, Digital Strategist & Technologist — especialista en SEO técnico, desarrollo PrestaShop y estrategia de presencia local para eCommerce con tiendas físicas. Para proyectos de SEO local, arquitectura de tiendas o desarrollo PrestaShop: contacto.
