80136ac414d9cc8b29a9f1d9f9eb5ec71c9166dc
两处收尾,均针对当前启用的 template-07。 1) SEO 收口(ticket 05) 原实现只在带关键词时 noindex,不带关键词时输出 index,follow——等于邀请 搜索引擎收录一个只有「请输入关键词」的空页。改为无条件 noindex,follow: - 带关键词:同一批内容有无数种关键词组合入口,典型低质量/易重复页面 (沿用 useModuleRoute.ts 对 /article?keywords= 的既有约定) - 不带关键词:空页,对搜索引擎和用户都是垃圾页 - 保留 follow 而非 nofollow,让爬虫仍能顺着结果链接爬到详情页 无关键词时空页保持显示引导文案,不 404、不重定向——被索引才是问题, 而它已被 noindex 解决。canonical 维持指向 /search;sitemap 经运行时验证 本就不含搜索页(269 条 URL 无命中)。 明确不做:不把 /search 加进 robots.txt 的 Disallow。Disallow 是「禁止抓取」, 爬虫遵守后就不会去读页面里的 noindex,URL 仍可能出现在结果里(只是没有标题 摘要)——反而更糟。故 server/api/robots.txt.ts 未改动。 2) 配色对齐 template-07 搜索页原用 navy #1E2A47,与本模板不符:template-07 主色是 #1a6dff, 其 TenderList 用 text-blue-600 渲染价格。已改为: - 主色(按钮/聚焦边框/选中 Tab/计数)#1E2A47 -> #1a6dff - 标书价格 red #E5472E -> #2563eb(对齐 TenderList 的 text-blue-600) - 链接蓝统一为小写 #2563eb 实测:带/不带关键词两种情况的 robots 均为 noindex,follow;页面总数与三个 Tab 渲染正常;eslint 0 error / 0 warning。
通用企业官网程序
基于 Nuxt 4 + Vue 3 + TypeScript 的企业官网纯前端展示系统。
项目定位
- 本项目仅包含官网前台展示代码
- 不含后端管理端,所有数据通过调用 SaaS 后端 API 获取
- 支持多模板切换、多租户、独立域名绑定、订阅过期校验
目录结构
website/
├── app/ # 应用代码
│ ├── components/ # 公共组件
│ ├── composables/ # 组合式函数
│ ├── layouts/ # 布局
│ ├── pages/ # 页面路由
│ ├── templates/ # 模板集合
│ ├── types/ # TS 类型
│ ├── utils/ # 工具函数
│ └── assets/ # 样式资源
├── server/ # Nuxt Server
│ ├── api/ # API 代理
│ ├── middleware/ # 中间件
│ └── utils/ # 服务端工具
├── scripts/ # 脚本
└── templates/cloud-website # 模板预览图
安装依赖
npm install
本地开发
npm run dev
环境变量与打包
项目已按环境拆分配置文件,打生产包不再需要手改 .env:
| 命令 | 用途 | 读取的配置 |
|---|---|---|
npm run dev |
本地开发 | .env.development |
npm run build:prod |
生产打包 | .env.production |
npm run build |
等同 build:prod |
.env.production |
npm run build:dev |
用开发配置打包(排查用) | .env.development |
npm run dev:prod |
以生产配置本地起服务(排查用) | .env.production |
配置文件说明:
| 文件 | 是否提交 | 说明 |
|---|---|---|
.env.development |
✅ | 团队共享的开发配置,接口指向本地后端 |
.env.production |
✅ | 团队共享的生产配置,接口指向线上 |
.env.example |
✅ | 变量总览模板,新增变量时同步更新 |
.env.local |
❌ | 个人通用覆盖 |
.env.<环境>.local |
❌ | 个人针对某环境的覆盖,优先级最高 |
.env |
❌ | 历史遗留的个人配置,优先级最低 |
优先级(高 → 低):
进程环境变量 > .env.<环境>.local > .env.<环境> > .env.local > .env
只有「变量尚未定义」时才会被下一层填充,因此高优先级不会被低优先级顶掉,
.env 里残留的本地地址也不会再污染生产包。
发布前可自查产物是否干净:
grep -rl "127.0.0.1" .output/ || echo "产物干净,无本地地址"
模板系统
模板存放在 app/templates/ 目录下,每个模板独立目录,包含:
config.ts:模板配置components/:模板私有组件(Header、Footer 等)pages/:模板页面组件theme.css:模板主题变量
当前已实现:
template-01:科技蓝企业模板(完整)template-02~template-04:占位模板,后续根据设计稿实现
环境变量清单
完整变量说明见 .env.example。核心变量:
# 租户 / 模板(生产留空,由域名自动识别)
NUXT_PUBLIC_TENANT_ID=
# 应用产品 ID(app_product.product_id 数字主键,如 42;不是 productCode 'website')
NUXT_PUBLIC_APP_ID=42
NUXT_PUBLIC_TEMPLATE_ID=
# 接口地址(单一后端:内容/CMS、租户解析、模板解析全部走 hjc-api)
NUXT_PUBLIC_MODULES_API_BASE=https://hjc-api.sitelnk.cn/api
NUXT_PUBLIC_APP_API_BASE=https://hjc-api.sitelnk.cn
# 多租户域名
NUXT_PUBLIC_BASE_DOMAINS=shoplnk.cn,sitelink.cn,wsdns.cn
ℹ️
nuxt.config.ts内置的接口默认值已统一为https://hjc-api.sitelnk.cn(单后端)。.env.production中也显式指定同一地址。 若将来再次更换域名,请同步修改nuxt.config.ts、.env.production与.env.example。
接口说明
本项目通过 server/api/ 代理转发 SaaS 后端接口,前端不直接调用后端地址。
核心接口:
GET /api/site/info:站点信息GET /api/page/all:页面列表GET /api/page/detail?slug=xxx:页面详情GET /api/article/list:文章列表GET /api/product/list:产品列表GET /api/case/list:案例列表GET /api/subscription/status:订阅状态GET /api/sitemap.xml:动态站点地图GET /api/robots.txt:robots 文件POST /api/form/submit:表单提交
部署
npm run build
npm run preview
生产环境建议使用 Nginx 反向代理,配置泛域名 *.shoplnk.cn 指向 Nuxt 服务。
注意事项
- 模板组件为动态导入,新增模板后需在
app/templates/index.ts注册 - 域名绑定查询接口
/cms/cms-website/resolveDomain需 SaaS 后端实现 - 订阅状态接口
/api/app/subscription/check需 SaaS 后端实现
Description
Languages
Vue
47.5%
TypeScript
38.8%
HTML
10.6%
JavaScript
1.6%
CSS
0.6%
Other
0.9%