指南:站点级默认值¶
SEO_SUITE["DEFAULTS"] 和 SEO_SUITE["SITE_DEFAULTS"] 这两个设置构成一层元数据基线,所有页面都会继承。优先级更高的提供者(模型字段、视图、路径规则)会逐字段覆盖它们。
全局默认值¶
在 settings.py 中添加 SEO_SUITE。你设置的每个键都会与内置默认值深度合并,因此只需写出想要改动的部分:
SEO_SUITE = {
"DEFAULTS": {
"title_suffix": " | My Blog",
"robots": "index,follow",
"og": {
"type": "website",
"site_name": "My Blog",
},
},
}
内置的全局默认值(未被覆盖时生效):
| 字段 | 内置值 |
|---|---|
title_suffix |
""(无后缀) |
robots |
"index,follow" |
og.type |
"website" |
CANONICAL_DOMAIN 与 HTTPS¶
默认情况下,canonical URL 根据请求的 Host 头生成。若要无论请求来自何处都强制使用某个域名,设置 CANONICAL_DOMAIN:
SEO_SUITE = {
"CANONICAL_DOMAIN": "www.example.com",
"FORCE_HTTPS_CANONICAL": True, # default: True
}
设置了 CANONICAL_DOMAIN 之后,所有 canonical URL 都使用 https://www.example.com,即使在本地开发环境中,或位于未正确传递 Host 头的反向代理之后,也是如此。
FORCE_HTTPS_CANONICAL 会把所有 http:// 的 canonical URL 升级为 https://,即使没有设置 CANONICAL_DOMAIN 也同样生效。
按站点设置默认值(多站点项目)¶
安装了 django.contrib.sites(或设置了 SITE_ID)时,可以为每个站点提供不同的默认值:
SEO_SUITE = {
"DEFAULTS": {
"title_suffix": " | My Network",
"og": {"site_name": "My Network"},
},
"SITE_DEFAULTS": {
1: {
"title_suffix": " | My Blog",
"og": {"site_name": "My Blog"},
},
2: {
"title_suffix": " | My Shop",
"og": {"site_name": "My Shop"},
},
},
}
站点专属配置块(优先级 20)按同样的逐字段逻辑合并到全局默认值(优先级 10)之上。还可以在 SITE_DEFAULTS 中用 None 作为键,为所有没有专属条目的站点提供默认值:
"SITE_DEFAULTS": {
None: {"robots": "noindex"}, # applies when no site-specific match
1: {"robots": "index,follow"},
},
站点 ID 的解析方式¶
当前站点 ID 按以下回退链依次确定:
SEO_SUITE["SITE_ID_RESOLVER"]:一个可调用对象,接收 request 并返回整数站点 ID。需要自定义逻辑(子域名路由、按请求头选择等)时用它。django.contrib.sites.shortcuts.get_current_site(request):在安装了django.contrib.sites时使用。settings.SITE_ID:在已定义时使用。None:单站点,不应用任何按站点的默认值。
自定义解析器示例:
# myapp/utils.py
def my_site_id_resolver(request):
if request.get_host().startswith("shop."):
return 2
return 1
DEFAULT_SCHEMA_PROFILES¶
为全站每个页面添加 JSON-LD schema profile:
这些 profile 在全局默认值层(优先级 10)运行。按模型和按视图定义的 profile 会与它们一起累加。JSON-LD 块永远不会被更高优先级的层替换。
缓存解析后的元数据¶
对于高流量站点,可以启用解析结果缓存。缓存键按对象区分(模型 + 主键 + 代数计数器),因此保存和删除时会自动使过期值失效:
SEO_SUITE = {
"CACHE_TTL": 300, # seconds; 0 = disabled (default)
"CACHE_BACKEND": "default", # any Django cache alias
"CACHE_KEY_PREFIX": "seosuite:v1",
}
只有对象身份稳定(带主键的模型实例)的解析结果才会被缓存。列表页和不绑定模型的视图不在此处缓存。