From 5512bab10550b7a70079260ea0f5786d07b7de4a Mon Sep 17 00:00:00 2001 From: fish Date: Wed, 11 Nov 2026 17:39:21 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=AD=E5=89=A7=20SEO=20=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E8=B7=9F=E9=9A=8F=20Playlet.Title=20=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 每次创建/更新时,把 Playlet.Title 覆盖写入 SeoInfo.Title,与 Description(desc + 自动模板) 一起保持前后台 SEO 字段同步。 Co-Authored-By: Claude Opus 4.7 --- web/service/srv_playlet/playlet.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/web/service/srv_playlet/playlet.go b/web/service/srv_playlet/playlet.go index dfcd540..72eec39 100644 --- a/web/service/srv_playlet/playlet.go +++ b/web/service/srv_playlet/playlet.go @@ -1623,6 +1623,10 @@ func applyPlayletDescription(doc *playletmod.Playlet) { } doc.Description = description doc.SeoInfo.Description = description + // SEO 标题跟随 Playlet.Title 同步。 + if title := strings.TrimSpace(doc.Title); title != "" { + doc.SeoInfo.Title = title + } } func applyPlayletDescriptionOnUpdate(exist *playletmod.Playlet, req *proto.PlayletUpdateReq, setDoc bson.M) { @@ -1636,6 +1640,10 @@ func applyPlayletDescriptionOnUpdate(exist *playletmod.Playlet, req *proto.Playl if playName == "" { return } + title := strings.TrimSpace(exist.Title) + if req.Title != nil { + title = strings.TrimSpace(*req.Title) + } desc := exist.Desc if req.Desc != nil { desc = strings.TrimSpace(*req.Desc) @@ -1658,7 +1666,11 @@ func applyPlayletDescriptionOnUpdate(exist *playletmod.Playlet, req *proto.Playl } } seo = normalizeSeoValue(seo) + // 每次 description 更新 → SEO 描述、SEO 标题同步。 seo.Description = description + if title != "" { + seo.Title = title + } setDoc["seoInfo"] = seo }