Hola @martabcn,
Gracias por la aclaración de la versión. Efectivamente, el problema que tienes con los hreflang en PrestaShop 1.7.2.1 radica en cómo estás utilizando el método addLink.
Para las etiquetas hreflang, el atributo rel siempre debe ser alternate, y el atributo hreflang se pasa como una opción adicional en el tercer parámetro. Tu código estaba utilizando hreflang como valor para rel, lo cual es incorrecto, y el atributo lang en lugar de hreflang.
Aquí tienes la corrección para tu override. Así debería funcionar correctamente:
class ProductController extends ProductControllerCore
{
public function initContent()
{
parent::initContent();
$id_product = (int)Tools::getValue('id_product');
if ($id_product) {
$product = new Product($id_product, false, $this->context->language->id);
if (Validate::isLoadedObject($product)) {
// Canonical
$canonicalUrl = $this->context->link->getProductLink($product, null, null, null, $this->context->language->id);
$this->context->controller->addLink('canonical', $canonicalUrl);
// Hreflang - Corrección
foreach (Language::getLanguages(true, $this->context->shop->id) as $lang) {
$hreflangUrl = $this->context->link->getProductLink($product, null, null, null, $lang['id_lang']);
$this->context->controller->addLink('alternate', $hreflangUrl, ['hreflang' => $lang['iso_code']]); // Corregido
}
}
}
}
}
Como bien señalan @miriam24 y @manueldigital93, modificar el core o usar overrides directos para funcionalidades tan críticas de SEO conlleva riesgos, especialmente con las actualizaciones de PrestaShop. Para una solución más mantenible y menos propensa a roturas, especialmente si tu tienda va a crecer o a actualizarse con frecuencia, te recomendaría considerar una herramienta de url canónicas y hreflang dedicada. Estos módulos están diseñados para integrarse sin sobrescribir archivos del core y suelen ser más robustos para diferentes escenarios de idiomas y tiendas.