You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网站Hreflang标签配置问题:默认英文URL去除/en后缀

解决Hreflang默认英文URL去除/en后缀的问题

我来帮你搞定这个需求——核心思路就是在生成alternate链接时,给默认英文(en)做特殊判断,跳过语言后缀的拼接。下面是具体的修改方案和细节解释:

修改后的完整代码

function genCanonicalData($baseURL, $currentLink, $loadedLanguages=array(), $return = false, $langSwitch=true){ 
    $data = $activeLang = $activeLangSlash = ''; 
    if(defined('ACTIVE_LANG')){ 
        $activeLangSlash = ACTIVE_LANG.'/'; 
        $activeLang = ACTIVE_LANG; 
    } 
    // 清理activeLink开头的斜杠,避免拼接时出现重复斜杠
    $activeLink = str_replace(array($baseURL.$activeLangSlash, $baseURL.$activeLang, $baseURL), '', $currentLink);
    $activeLink = ltrim($activeLink, '/');
    
    $data .= '<link rel="canonical" href="'.$currentLink.'" />'.PHP_EOL; 
    
    if($langSwitch) { 
        // 定义你的默认语言标识(这里是英文'en')
        $defaultLang = 'en';
        
        foreach ($loadedLanguages as $language) { 
            // 确保hreflang值存在, fallback到语言标识
            if (!isset($language[7])) $language[7] = $language[2]; 
            elseif ($language[7] === NULL) $language[7] = $language[2]; 
            
            // 构建语言路径:默认英文则为空,其他语言添加语言标识+斜杠
            $langPath = ($language[2] === $defaultLang) ? '' : $language[2] . '/';
            // 拼接URL并清理末尾多余斜杠
            $alternateHref = rtrim($baseURL . $langPath . $activeLink, '/');
            // 首页特殊处理:确保末尾带斜杠(可选,根据你的URL规范调整)
            if(empty($activeLink)){
                $alternateHref .= '/';
            }
            
            $data .= ' <link rel="alternate" hreflang="' . $language[7] . '" href="' . $alternateHref . '" />' . PHP_EOL; 
        } 
    } 
    
    return $return ? $data : print($data);
}

关键修改点说明

  1. 默认语言特殊判断:新增$defaultLang = 'en'变量,在循环生成每个alternate链接时,判断当前语言是否为默认英文——如果是,就不拼接$language[2]/这部分路径。
  2. URL规范处理:
    • 用ltrim($activeLink, '/')去掉$activeLink开头的斜杠,避免出现https://example.com//page这种不规范的URL。
    • 用rtrim($alternateHref, '/')清理拼接后URL末尾的多余斜杠,再针对首页(空$activeLink)手动添加斜杠,保证所有URL格式统一。
  3. 简化返回逻辑:最后把if($return) return $data; else echo $data;简化成return $return ? $data : print($data);,代码更简洁。

修改后的生成效果

现在生成的Hreflang标签会符合你的预期:

<link rel="canonical" href="https://example.com/" />
<link rel="alternate" hreflang="en" href="https://example.com/" />
<link rel="alternate" hreflang="ar" href="https://example.com/ar/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="es" href="https://example.com/es/" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/" />
<link rel="alternate" hreflang="it" href="https://example.com/it/" />
<link rel="alternate" hreflang="pt" href="https://example.com/pt/" />

这样默认英文的URL就不再带/en后缀,同时其他语言的链接结构保持正常,完全满足你的需求。

内容的提问来源于stack exchange,提问作者Vishal Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:37:31