Cómo Modificar CMS Prestashop Tiendas para Seo local

Desarrollado por Yel Martínez · Digital Strategist & Technologist

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.

PrestaShop · Smarty SEO local · Landings geo stores.tpl · functions.php Tiendas físicas · Automático
stores.tpl · Smarty · SEO local {foreach $stores as $store} <a href= {getStoreUrl name=$store.name} >{$store.name}</a> {/foreach} Geo 1 Geo 2 Geo 3
01 Problema Duplicación bucle
02 functions.php Smarty custom
03 stores.tpl Template geo
04 SEO local Landings geo
Qué resuelve este código

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.

0 enlaces manuales — la asignación es automática vía función Smarty personalizada
1 enlace por tienda — el problema de duplicación del bucle foreach queda resuelto
2 archivos a modificar — functions.php para la función y stores.tpl para el template
SEO local mejorado — cada tienda enlaza a su landing geo optimizada con marca+geo
El problema inicial

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.

Causa raíz — iteración anidada sin filtro por nombre

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.

Solución — función Smarty 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.

Código a implementar

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.

Paso 1 — Función Smarty en 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.

functions.php
Paso 2 — Llamada en 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.

stores.tpl
Código completo — 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 } ?>

Código completo — 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}

Consejos de implementación

Tres puntos críticos: nombres exactos, mantenimiento y entorno de pruebas

Coincidencia exacta de nombres
Los nombres en el array de $tiendas deben 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.tpl puede romper la visualización de toda la página de tiendas en producción.
Solución desarrollada por Yel Martínez

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.

Scroll al inicio