fix(web,schema): stop linking at redirects, and always attribute Article schema - #264
Merged
Merged
Conversation
…cle schema Three findings from the 2026-08 SEO audit, verified against the live site, the droplet and the Payload DB on 2026-09-09. Internal links to 3XX (523 pages flagged, 543 measured): /knowledge-hub and /legal sit in the nav and footer on every page and both 308 to their first document. The redirect map moves out of proxy.ts into lib/nav/section-index.ts so the proxy and every link site read the same pairs, and hrefs resolve through sectionIndexHref(). The proxy still 308s anyone arriving on the old path. Article author (319 of 457 nodes): articleSchema, blogPostingSchema and newsArticleSchema dropped `author` when a document had no named contributor, leaving knowledge-hub, news and resources failing Google's Article requirements. They now fall back to the Organization node, which is what the house byline and the case studies already resolve to. Named contributors still win where the CMS has them. Duplicate H1 across pages: the triam-security-rebrands `-2` slug now 308s to its unsuffixed canonical, matching the precedent set for why-containers. Both CMS documents stay in the sitemap until an editor sets seo.indexable=noindex. Also lifts the three footer legal links from a 21px to a 27px touch target, the last ones under the WCAG 2.5.8 AA floor; the nav columns already cleared it.
Both apps deploy from `main`, so one merge fires the Docker build and the Vercel build together and Vercel normally wins by several minutes. Any change where the web app stops sending a field the CMS still marks required will 400 every submission for the length of that gap. Hit while shipping the forms overhaul. The fix is to relax the constraint in prod before merging rather than trying to sequence two deploys off one branch.
…ail as Careers Every form told the visitor we would respond within 24 hours or one business day, and the confirmation emails repeated it. On screen that is a transient toast; in an inbox it is durable, forwardable, and reads as a commitment the team has not agreed to. Softened to what is actually true: someone will get back to you. Changed in both places, so the site and the email cannot promise different things. Also stops the lead confirmations going out signed "CleanStart Careers". BREVO_SENDER_NAME is the global fallback and was set to the careers identity, so demo requests, contact replies, newsletter welcomes and resource downloads were all branded as careers mail. The droplet value is now the generic brand; careers and partnerships keep their own names through CAREERS_SENDER_NAME and PARTNERS_SENDER_NAME.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three findings from the 2026-08 SEO audit, verified on 2026-09-09 against the live site, the droplet and the Payload DB.
Internal links pointing to 3XX (#49)
/knowledge-huband/legalsit in the nav and footer on every page, and both 308 to their first document — so all 543 crawled pages linked at a redirect. The redirect map moves out ofproxy.tsintolib/nav/section-index.tsso the proxy and every link site read the same pairs, and hrefs resolve throughsectionIndexHref(). The proxy still 308s anyone arriving on the old path.Article schema missing
author(#32)articleSchema,blogPostingSchemaandnewsArticleSchemadroppedauthorentirely when a document had no named contributor, leaving 319 of 457 Article nodes failing Google's Article requirements — knowledge-hub (238), news (34), resources (31) and 16 guides. They now fall back to the Organization node, which is what the house byline and the case studies already resolve to. Named contributors still win where the CMS has them.Duplicate H1 across pages (#55)
The
triam-security-rebrands…-2slug now 308s to its unsuffixed canonical, matching the precedent already set for thewhy-containerspair. Both duplicate pairs are consolidated at the edge.Footer tap targets (#62)
The three legal utility-row links go from a 21px to a 27px touch target — the last ones under the WCAG 2.5.8 AA floor. The nav columns already cleared it via the same pseudo-element pattern.
Verification
Verified in the production build, not just the source: knowledge-hub pages emit 0 links to bare
/knowledge-hubor/legal, and knowledge-hub / news / resources Article nodes all carryauthor, while/guidekeeps its namedPersonnodes.web: lint ✓ typecheck ✓ test ✓ (470) build ✓ (610/610 pages)·schema: lint ✓ typecheck ✓ test ✓ (101)Follow-up (not in this PR)
The two duplicate news documents stay in the sitemap until an editor sets
seo.indexable = noindexon each — the mechanism is documented in thenext.config.tsredirect comments. Content and metadata findings from the audit are owned by the SEO team.