020-29876379

网站建设行业

让千旭网络官网有多个城市分站,如城市广州对应广州网站建设,广州天河对应天河网站建设,我们先从广州网站建设,天河网站建设2个分站点说起,
实现了广州,天河分站后,再用同样的方法实现其它城市分站,如北京网站建设上海网站建设重庆网站建设等分站点。同时千旭城市分站点实现seo优化功能。


目标(先做"最简单服务页")
实现 **`https://guangzhou.wangzhanjianshe9.com.cn/fuwu.html`** 为静态导出可访问,并支持 **`https://www.wangzhanjianshe9.com.cn/cn/guangdong/guangzhou/fuwu.html` 301 跳转到 `https://guangzhou.wangzhanjianshe9.com.cn/fuwu.html`**(主域名路径版自动跳转至子域名 canonical)。

 

可执行步骤(按顺序做)

1)先定 1 个城市 + 1 个页面
- **城市 slug**:`guangzhou`
- **服务页 canonical URL(子域名版)**:`https://guangzhou.wangzhanjianshe9.com.cn/fuwu.html`
- **主域名路径版(301 跳转源)**:`https://www.wangzhanjianshe9.com.cn/cn/guangdong/guangzhou/fuwu.html`

2)创建城市目录与服务页(只做这一页)
在资源管理器(VFS)里:
- 在你的站点根(例如 `/sites/你的站点/`)下按层级新建目录:`cn/guangdong/guangzhou/`
- 在 `guangzhou/` 下创建服务页资源:
  - 推荐命名:`fuwu.html`(VFS 完整路径:`/cn/guangdong/guangzhou/fuwu.html`)
  - 页面模板/formatter:用你现有可复用的"服务页模板"(或先用最简单的静态页面也行)

3给这页设置 SEO(必须是服务端输出页面TDK,不用 JS 改)
在 `/sites/你的站点/cn/guangdong/guangzhou/fuwu.html` 的属性里设置(示例):
- `Title`:`广州网站建设_广州网站制作_广州网站设计`
- `Keywords`:`广州网站建设,广州网站制作,广州网站设计`
- `Description`:写广州版描述
- `canonical`:`https://guangzhou.wangzhanjianshe9.com.cn/fuwu.html`

> 关键点:**这些要在模板 head 中通过服务端渲染输出**(不要再写任何 JS 去覆盖 title/meta。

4)发布并静态导出(确认导出产物存在)
- 发布 `cn/guangdong/guangzhou/fuwu.html`
- 确认静态导出目录出现对应文件(以你当前模式通常会在):  
  `export/sites/你的站点/cn/guangdong/guangzhou/fuwu.html`  
  (实际站点目录名以你工程为准)

5)Nginx:子域名 `guangzhou.wangzhanjianshe9.com.cn` 正确命中导出文件
新增一个 `server {}` 块专门处理子域名,`/fuwu.html` 内部 rewrite 到静态导出路径:

明确需求实现:
- **新增 `server {}`**,`server_name guangzhou.wangzhanjianshe9.com.cn;`
- **`/fuwu.html` 规则**:匹配 `^/fuwu\.html$`,内部 rewrite 到 `/export/sites/你的站点/cn/guangdong/guangzhou/fuwu.html`
- **根路径跳转**:`location = / { return 301 https://guangzhou.wangzhanjianshe9.com.cn/fuwu.html; }`(根路径 `/` 301 跳到 `/fuwu.html`,其他路径正常访问)

6)DNS + ssl证书(为子域名入口做准备)
- DNS:加 `guangzhou.wangzhanjianshe9.com.cn`(或直接 `*.wangzhanjianshe9.com.cn`)指向 Nginx
- 证书:准备 `*.wangzhanjianshe9.com.cn` 通配证书(覆盖所有区/市/省 slug 子域名)

7)Nginx:主域名路径版 301 跳转到子域名 canonical
在 `www.wangzhanjianshe9.com.cn` 的 `server {}` 块里,加一条精确匹配规则:
- `location = /cn/guangdong/guangzhou/fuwu.html { return 301 https://guangzhou.wangzhanjianshe9.com.cn/fuwu.html; }`

后续批量扩展方案(让 codex max 实现):
- 改成正则匹配:`location ~* ^/cn/([a-z0-9-]+)/([a-z0-9-]+)/fuwu\.html$`
- 动态拼接子域名 canonical:`return 301 https://$2.wangzhanjianshe9.com.cn/fuwu.html;`

8)验证
- 访问 `https://guangzhou.wangzhanjianshe9.com.cn/fuwu.html`:页面能打开,查看源代码(不是审查元素)确认 `<title>`/meta 已是"广州…",`canonical` 指向子域名版
- 访问 `https://guangzhou.wangzhanjianshe9.com.cn`:确认 301 到 `https://guangzhou.wangzhanjianshe9.com.cn/fuwu.html`
- 访问 `https://www.wangzhanjianshe9.com.cn/cn/guangdong/guangzhou/fuwu.html`:确认 301 到 `https://guangzhou.wangzhanjianshe9.com.cn/fuwu.html`

 

功能实现:
"在现有静态导出 + Nginx rewrite 架构不动旧规则前提下:① 新增 `server_name guangzhou.wangzhanjianshe9.com.cn`,让 `/fuwu.html` 命中导出文件 `export/sites/.../cn/guangdong/guangzhou/fuwu.html`,并将根路径 `/` 301 跳转到 `/fuwu.html`;② 在 `www.wangzhanjianshe9.com.cn` server 块新增精确匹配 `/cn/guangdong/guangzhou/fuwu.html`,301 跳转到 `https://guangzhou.wangzhanjianshe9.com.cn/fuwu.html`。SEO 必须在首次 HTML 源码里,canonical 指向子域名版。"

 

每个层级都要一个服务页(国家/省/市/区都可访问)
那就是下面的这样,每层都建一个:
/cn/fuwu.html
/cn/guangdong/fuwu.html
/cn/guangdong/guangzhou/fuwu.html
/cn/guangdong/guangzhou/tianhe/fuwu.html
它们可以全部共用同一个设计版式,差异只来自"当前目录对应的区域 XML 配置"。
对应子域名 canonical 规律:
- `/cn/fuwu.html` → `https://cn.wangzhanjianshe9.com.cn/fuwu.html`
- `/cn/guangdong/fuwu.html` → `https://guangdong.wangzhanjianshe9.com.cn/fuwu.html`
- `/cn/guangdong/guangzhou/fuwu.html` → `https://guangzhou.wangzhanjianshe9.com.cn/fuwu.html`
- `/cn/guangdong/guangzhou/tianhe/fuwu.html` → `https://tianhe.wangzhanjianshe9.com.cn/fuwu.html`


总体思路(每层都有 `fuwu.html`,SEO 自动对应)

核心原则:"区域数据跟着目录走",让"目录=区域节点",然后每个目录里放一个固定命名的"区域配置内容(XML 内容)",`fuwu.html` 只读取"本目录的区域配置 + 父级区域配置",即可在静态导出时生成不同层级、不同地区的独立 HTML(含正确首屏 SEO)。

 

1)XSD 内容类型:做成 `RegionConfig`(后台可增删改)
建一个内容类型(XSD)比如 `RegionConfig`,字段建议:

- **基础识别**
  - `slug`:目录拼音(如 `guangdong`、`guangzhou`、`tianhe`)
  - `nameZh`:中文名(广东/广州/天河)
  - `type`:枚举(`country`/`province`/`municipality`/`city`/`district`)
- **SEO(按层级可覆盖、可继承)**
  - `seoTitleTpl`
  - `seoKeywordsTpl`
  - `seoDescriptionTpl`
  - `kwCore`(可选:核心词,如"网站建设")
  - `phone`(可选)

> SEO 字段建议支持占位符(模板字符串),例如:`{nameZh}`、`{fullNameZh}`、`{kwCore}`。  
> 生成最终 SEO 时:**先用本级模板;为空则向上继承父级模板**。

 

2)把"区域配置"放哪?用固定文件名绑定到目录(解决"与文件夹同名"的问题)
为了保证"后台新增/删除"天然和目录一致,推荐强约定:

- 每个区域目录下都必须有一个固定名字的配置文件:**`_region.xml`**(或 `region.xml`)
  - `/cn/_region.xml`(中国节点)
  - `/cn/guangdong/_region.xml`
  - `/cn/guangdong/guangzhou/_region.xml`
  - `/cn/guangdong/guangzhou/tianhe/_region.xml`

这样就不需要在系统里做"用 slug 去全站搜索匹配",也不怕重名;目录就是唯一定位。

同时你仍然可以在 XSD 里保留 `slug` 字段,并做校验(regex),但真正的"绑定关系"靠"文件放在该目录 + 固定文件名"完成,最稳。

 

3)`fuwu.html` 怎么拿到正确地区 + SEO(不靠 JS)
每个层级目录下都有自己的 `fuwu.html`(同模板/同容器结构):

- `fuwu.html` 渲染时:
  - 读取同目录的 `_region.xml`(本级)
  - 同时读取 祖先目录的 `_region.xml`(用于拼 `{fullNameZh}`、SEO 继承、面包屑等)
- 然后在 JSP/formatter 的 `<head>` 里**直接输出最终 `<title>`/keywords/description**(服务端渲染,静态导出后首屏源码就正确)

> 重点:**不要**在城市/区域版里写 JS 去改 `<title>` 或 meta;全部在网页里服务器端输出。

---

4)后台"增/减"一个区域节点的操作流程(可执行、可标准化)
以新增"天河区"为例(情况A):

1. 在 VFS 创建目录:`/cn/guangdong/guangzhou/tianhe/`
2. 在该目录新建内容:`_region.xml`(类型 `RegionConfig`),填写:
   - `slug=tianhe`,`nameZh=天河区`,`type=district`
   - SEO 模板/关键词/描述(可填或留空继承)
3. 在该目录新建页面:`fuwu.html`(容器页),选择统一服务页模板
4. 发布并静态导出

删除同理:删目录(或下线资源)即可。

 

5)SEO "对应关系"如何保证正确(并且可维护)
你最终会得到**一一对应**:

- "页面 canonical URL" = 该层级对应的子域名 + `/fuwu.html`
- "页面 SEO" = 本目录 `_region.xml`(优先)+ 父级 `_region.xml`(继承/拼全称)

不会出现"某个 slug 指向错地区"的问题,也不会出现"同名区县冲突"。

 

6)后续子域名入口(301)如何接上(与你这套目录模型完全兼容)
每个区域节点都遵循同一规律:主域名路径版 301 跳子域名 canonical。在 Nginx 维护一张映射表(或用正则批量处理):

- `www.wangzhanjianshe9.com.cn/cn/guangdong/guangzhou/tianhe/fuwu.html` → 301 → `https://tianhe.wangzhanjianshe9.com.cn/fuwu.html`
- `tianhe.wangzhanjianshe9.com.cn/` → 301 → `https://tianhe.wangzhanjianshe9.com.cn/fuwu.html`

目录模型不需要改。

任务拆解:
- 先做 `RegionConfig` 的 XSD + 模块配置,让后台能新建 `_region.xml`
- 再做一个"区域服务页模板/formatter(新的,不动你旧模板)",按目录读取 `_region.xml` 并服务端输出 SEO,canonical 自动指向对应子域名
- 最后补 Nginx:让各层级 `/cn/.../fuwu.html` 主域名路径版 301 跳对应子域名,子域名 server 块命中静态导出文件