all repos — searchix @ 5febc847935ea032eec67ab2a1304730815237a8

Search engine for NixOS, nix-darwin, home-manager and NUR users

feat: add canonical links to results and details pages

Alin
commit

5febc847935ea032eec67ab2a1304730815237a8

parent

9ab1a44e0a60fad5c01bc1b1a9521e40c4151cc6

M internal/components/data.gointernal/components/data.go
@@ -18,6 +18,7 @@ Sources []config.Source
Source config.Source Query string ExtraHeadHTML string + CanonicalURL string Code int Message string Title string
@@ -102,3 +103,20 @@ nu.RawQuery = q.Encode()
return nu.String() } + +func (u SearchNav) WithoutFacets() string { + nu := u.URL + originalQuery := nu.Query() + q := url.Values{} + for _, field := range []string{"query", "page"} { + if originalQuery.Has(field) { + q.Set(field, originalQuery.Get(field)) + } + } + if q.Has("page") && q.Get("page") == "1" { + q.Del("page") + } + nu.RawQuery = q.Encode() + + return nu.String() +}
M internal/components/page.gointernal/components/page.go
@@ -58,6 +58,12 @@ TitleAttr("Searchix "+source.String()),
Href(joinPath("/", source.Importer.String(), source.Key, "opensearch.xml")), ) }), + g.Iff(tdata.CanonicalURL != "", func() g.Node { + return Link( + Rel("canonical"), + Href(tdata.CanonicalURL), + ) + }), ), Body( Header(
M internal/components/results.gointernal/components/results.go
@@ -129,6 +129,12 @@ return Li(Class("term"), g.Group(children))
} func ResultsPage(r ResultData) g.Node { + r.CanonicalURL = r.SearchNav.WithoutFacets() + + return SearchPage(r.TemplateData, r, Results(r)) +} + +func DetailResultsPage(r ResultData) g.Node { return SearchPage(r.TemplateData, r, Results(r)) }
M internal/server/source.gointernal/server/source.go
@@ -102,11 +102,12 @@ } else if searchResult, _, searchErr := h.global.ExecuteSearch(h.searchSource(r), r); searchErr == nil &&
searchResult != nil { searchTitle := searchResult.Title searchResult.Title = h.getTitle(doc) + searchResult.CanonicalURL = "/" + index.GetKey(doc) searchResult.Description = components.MetaDescription(doc) searchResult.DetailContent = components.Detail(doc) searchResult.SearchURL = h.closeURL(r) searchResult.SearchTitle = searchTitle - baseErr = components.ResultsPage(*searchResult).Render(w) + baseErr = components.DetailResultsPage(*searchResult).Render(w) } else { tdata := components.TemplateData{ ExtraHeadHTML: h.global.cfg.Web.ExtraHeadHTML,