From 63ebbebb0278dc8939716f6523f94c03b3c914ec Mon Sep 17 00:00:00 2001 From: nyne Date: Thu, 31 Jul 2025 16:23:55 +0800 Subject: [PATCH] SEO for collection page. --- frontend/src/pages/collection_page.tsx | 7 ++++++- server/middleware/frontend_middleware.go | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/frontend/src/pages/collection_page.tsx b/frontend/src/pages/collection_page.tsx index 7279979..9693896 100644 --- a/frontend/src/pages/collection_page.tsx +++ b/frontend/src/pages/collection_page.tsx @@ -33,6 +33,11 @@ export default function CollectionPage() { return; } + if (app.getPreFetchData()?.collection?.id === idInt) { + setCollection(app.getPreFetchData().collection); + return; + } + network.getCollection(idInt).then((res) => { if (res.success) { setCollection(res.data!); @@ -43,7 +48,7 @@ export default function CollectionPage() { }); } }); - }, [resourcesKey]); + }, [id]); const toBeDeletedRID = useRef(null); diff --git a/server/middleware/frontend_middleware.go b/server/middleware/frontend_middleware.go index 10b970a..fe7e1c8 100644 --- a/server/middleware/frontend_middleware.go +++ b/server/middleware/frontend_middleware.go @@ -133,6 +133,28 @@ func serveIndexHtml(c fiber.Ctx) error { preFetchData = url.PathEscape(string(preFetchDataJson)) } } + } else if strings.HasPrefix(path, "/collections/") { + collectionIDStr := strings.TrimPrefix(path, "/collections/") + collectionID, err := strconv.Atoi(collectionIDStr) + if err == nil { + coll, err := service.GetCollectionByID(uint(collectionID)) + if err == nil { + title = "Collection: " + coll.Title + description = utils.ArticleToDescription(coll.Article, 256) + if len(coll.Images) > 0 { + preview = fmt.Sprintf("%s/api/image/%d", serverBaseURL, coll.Images[0].ID) + } else { + preview = fmt.Sprintf("%s/api/avatar/%d", serverBaseURL, coll.User.ID) + } + if len(coll.Images) > 0 { + preview = fmt.Sprintf("%s/api/image/%d", serverBaseURL, coll.Images[0].ID) + } + preFetchDataJson, _ := json.Marshal(map[string]interface{}{ + "collection": coll, + }) + preFetchData = url.PathEscape(string(preFetchDataJson)) + } + } } content = strings.ReplaceAll(content, "{{SiteName}}", siteName)