一个可开源复用的多语言纯静态站点模板(HTML/CSS/JS),内置 SEO 相关文件(sitemap、robots)和常见部署/排错说明。
在线站点:
https://mockaddress.com
如果你 fork 本项目并部署到自己的域名,请把文中的mockaddress.com替换为你的域名。
- 纯静态:无需 PHP/Node 后端即可部署
- 多语言目录:默认支持中文(根目录)+
/en//ru//es/(可增删) - SEO 友好:内置
robots.txt、sitemap.xml(sitemap index)及各语言子 sitemap - 站点验证:可放置 Bing / Yandex / Baidu 等验证文件(示例文件已在仓库内)
站点已包含:
sitemap.xml:sitemap 索引文件(sitemapindex)sitemap-zh.xml/sitemap-en.xml/sitemap-ru.xml/sitemap-es.xml:语言子 sitemaprobots.txt:已声明全部 sitemapbaidu.txt:示例 URL 列表(可用于百度手动提交)- 站点验证文件:例如
BingSiteAuth.xml、yandex_*.html、baidu_verify_*.html
- 根目录页面:例如
index.html、about/index.html、usa-address/index.html等 - 多语言目录:
en/、ru/、es/下结构与根目录一致 - 静态资源:
css/、js/data/:JSON 数据文件(多语言目录也各有一份)
这是纯静态项目,直接用任意静态服务器预览即可。
python -m http.server 8080然后访问:
http://localhost:8080/http://localhost:8080/en/
npx --yes serve . -l 8080- 永远不要让 sitemap 走 SPA fallback(避免被
/index.html兜底) - 确保
location = /sitemap.xml只定义一次 - sitemap 必须是 XML 且从第一字节开始就是
<?xml ...?>(避免 BOM/错误页混入)
把
root改成你的站点目录;如你是 fork 部署,把mockaddress.com改成你的域名。
下面只展示 sitemap 和静态路由相关的关键片段,完整 SSL/日志请按你服务器环境补齐。
# sitemap index
location = /sitemap.xml {
default_type application/xml;
add_header Content-Type "application/xml; charset=UTF-8" always;
try_files $uri =404;
}
# language sitemaps
location ~ ^/sitemap-(zh|en|ru|es)\.xml$ {
default_type application/xml;
add_header Content-Type "application/xml; charset=UTF-8" always;
try_files $uri =404;
}
# static site (folder URLs -> index.html)
location / {
try_files $uri $uri/ /index.html;
}本项目使用 sitemap index + 多个子 sitemap 的方式:
sitemap.xml(索引)列出:https://mockaddress.com/sitemap-zh.xmlhttps://mockaddress.com/sitemap-en.xmlhttps://mockaddress.com/sitemap-ru.xmlhttps://mockaddress.com/sitemap-es.xml
不建议。
- 本站是文件夹形式 URL(例如
/usa-address/对应usa-address/index.html),sitemap 里用目录 URL 更符合 SEO 习惯。 - 只有当你的服务器真实对外 URL 必须带
index.html(例如访问/usa-address/会 404)时,才需要在 sitemap 中写成/usa-address/index.html。
robots.txt 位于根目录,并且:
- 禁止抓取保存地址页:
/saved-addresses/及各语言对应路径 - 声明了主 sitemap 和全部子 sitemap
提交给搜索引擎时,推荐提交 sitemap.xml(索引)即可。
你站点历史上遇到过 Google 无法抓取 sitemap 的典型原因有两类:
目标是让 sitemap 响应头稳定为:
Content-Type: application/xml; charset=UTF-8(推荐)
常见问题:
- 返回了
image/svg+xml(通常是 mime.types/匹配规则错误或被某个 location 覆盖) - 同时出现两个
Content-Type(例如text/xml+application/xml),会让部分工具误判
建议做法(核心原则):
- 给
sitemap.xml和sitemap-*.xml单独写location - 不要让它走 SPA fallback(不要被
try_files ... /index.html兜底) - 确保只定义一次
location = /sitemap.xml(避免重复定义报错)
如果你有类似:
try_files $uri $uri/ /index.html;
务必保证 sitemap 的 location 在它之前,并且 sitemap 使用:
try_files $uri =404;
在服务器上执行(或用浏览器 F12 / Network 看响应头):
- 检查索引是否可访问
https://mockaddress.com/sitemap.xml
- 检查子 sitemap 是否可访问
https://mockaddress.com/sitemap-zh.xmlhttps://mockaddress.com/sitemap-en.xmlhttps://mockaddress.com/sitemap-ru.xmlhttps://mockaddress.com/sitemap-es.xml
- 检查响应头 Content-Type 是否正确
- 期望:
application/xml; charset=UTF-8
- 期望:
- 检查返回内容是否从 XML 声明开始
- 第一行必须是
<?xml version="1.0" encoding="UTF-8"?> - 不能在它前面出现任何多余字符(包括 BOM/空白/错误页 HTML)
- 第一行必须是
这是正常现象。浏览器是否“折叠显示 XML”取决于浏览器自身与响应头;只要 XML 内容正确且 Content-Type 正确,搜索引擎即可抓取。
多数是浏览器缓存或扩展注入导致的显示差异。以搜索引擎结果为准:重点看 HTTP 状态码 与 Content-Type。
- 更新页面后,记得同步更新对应语言的子 sitemap(以及
sitemap.xml里的<lastmod>)。 robots.txt保持根目录可访问,且不要出现Disallow: /(会导致整站不可抓取)。
欢迎 PR / Issue:
- 修复多语言页面问题
- 增加更多语言目录
- 优化 sitemap 生成与校验脚本(如果你打算加入脚本)
如果你希望完全开源,建议添加 LICENSE 文件并在这里声明(例如 MIT)。
