织梦支持多城市分站搭建吗

织梦CMS多城市分站二级域名

织梦CMS 本身没有原生的多城市分站模块,但凭借其灵活的栏目体系与自定义字段,完全可以通过“二级域名 + 城市栏目 + 模板切换”的方式搭建出结构清晰的多城市分站。本文给出一套可落地的实施方案。

一、多城市分站的常见架构

对于多数本地化站点,二级域名 + 单库多栏目的方案在 SEO 与运维间最为均衡。

二、城市栏目规划

1. 栏目层级设计

在织梦后台按城市建顶级栏目,下挂相同的业务子栏目,保证各城市结构一致便于模板复用:

北京(栏目ID 10)
  ├─ 公司动态
  ├─ 产品服务
  └─ 联系我们
上海(栏目ID 11)
  ├─ 公司动态
  ├─ 产品服务
  └─ 联系我们

2. 自定义字段存储城市信息

利用织梦自定义字段为每篇文档标记所属城市,便于跨栏目聚合。在“频道模型 → 自定义字段”中新增 city 字段,类型为下拉单选。

三、二级域名解析与绑定

1. 域名泛解析

在域名服务商处添加泛解析记录,将所有城市子域名指向同一服务器:

*.example.com → 服务器IP(A记录)

2. Nginx 配置通配符 server

server {
    listen 80;
    server_name ~^(?<city>.+)\.example\.com$;
    root /www/wwwroot/example;
    index index.html index.php;

    # 将城市前缀传入 PHP
    location / {
        try_files $uri $uri/ /index.php?city=$city;
    }
}
宝塔可在站点设置中添加泛域名绑定,无需手写 server_name 正则。

四、城市自动识别与模板切换

1. 入口文件识别城市

/include/common.inc.php 末尾加入城市识别逻辑,将二级域名前缀写入全局变量:

$host=$_SERVER['HTTP_HOST'];
if(preg_match('/^([a-z]+)\.example\.com$/i', $host, $m)){
    $cfg_city=$m[1];   // bj / sh / gz
} else {
    $cfg_city='www';
}
$GLOBALS['cfg_city']=$cfg_city;

2. 模板按城市加载

在模板目录下为每个城市建子目录,调用时动态拼接路径:

// 模板调用示例
$tpl="/templets/{$cfg_city}/list.htm";
$pv=new PartView();
$pv->SetTemplet($tpl);
$pv->Display();

五、城市数据隔离

1. 列表按城市过滤

在 arclist 调用中通过城市字段过滤,确保北京站只显示北京内容:

{dede:arclist typeid='10' addfields='city' channelid='1'}
  [field:city runphp='yes']if(@me!=$GLOBALS['cfg_city'])@me='';[/field:city]
{/dede:arclist}

2. 公共内容共享

公司介绍、产品库等无地域属性的内容放在公共栏目,所有城市站统一调用,避免重复维护。

六、SEO 与多城市注意事项

百度对多城市分站有专门审查,若各城市内容高度雷同仅替换城市名,可能被判为采集站群降权。

七、性能优化

多城市站点页面量大,建议开启静态生成并为每个城市单独生成目录,配合 CDN 按城市节点缓存,降低服务器压力。

城市数量超过 50 个时,单库方案会出现栏目膨胀,可考虑分库或引入城市配置表替代栏目。

多城市分站落地建议

多城市分站是本地化运营的有效手段,但成功的关键不在技术而在内容差异化。建议先用 3-5 个核心城市跑通流程,验证内容生产能力后再规模化扩展。每个城市配置专人或 AI 辅助产出本地新闻、本地案例,配合独立的客服与落地页,让分站真正具备本地服务能力,而非仅做城市关键词的流量入口,才能在搜索引擎与用户两端建立长期价值。