Skip to content

SEO: move TMiR transcripts to tmir.reactiflux.com, fix site metadata - #374

Merged
vcarl merged 1 commit into
mainfrom
seo-improvements
Oct 3, 2026
Merged

vcarl merged 1 commit into
mainfrom
seo-improvements

Conversation

@vcarl

@vcarl vcarl commented Oct 2, 2026

Copy link
Copy Markdown
Member

Why

The 40 This Month in React transcripts lived here and on tmir.reactiflux.com with no canonical between them, so the two sites competed for the same searches. The site-wide metadata also had gaps: the homepage was titled "Welcome" with no description, no page had a canonical tag, and /transcripts copied the newest transcript in full under that transcript's own H1.

Changes

TMiR consolidation

  • public/_redirects: a 301 for every /transcripts/tmir-* URL to its episode on tmir.reactiflux.com, generated from the files and checked against the TMiR repo's episode list. TMiR builds heading anchors with the same slug rule, so #section links keep working.
  • Deleted the 40 TMiR transcript files here, plus src/md-pages/tmir.md, which the /tmir redirect already hid but which still showed up in the sitemap. The content lives in the TMiR repo.
  • /tmir is now a 301 instead of a 302. If that 302 was intentional, for example ahead of a move to thismonthinreact.com, say so and I'll revert it.

Site-wide (SEO.js / Layout.js)

  • Canonical URL and og:url on every page: www, no query string, no trailing slash.
  • Titles get a · Reactiflux suffix unless they already include "Reactiflux". For example, "Jobs" becomes "Jobs · Reactiflux".
  • Pages without a description fall back to a site description. Previously they had an empty meta tag.
  • Banner image now uses www, with summary_large_image, og:site_name and twitter:site. Fixed the duplicate og:image that appeared when a page passed its own image.
  • New optional noindex and structuredData props.

Pages

  • Homepage: title "Reactiflux: the React & JavaScript community on Discord", a real description, and Organization JSON-LD.
  • /transcripts: H1 "Q&A transcripts", a short intro, a link to TMiR, and a dated list with each guest's blurb, replacing the duplicated newest transcript.
  • Transcript pages: titled ": Q&A transcript ()", which also ends the duplicate titles for repeat guests (Jared Palmer, Nader Dabit, React Conf). Each gets a one-line description.
  • Descriptions added for blog posts (from front matter), /jobs and /tips.
  • noindex added to /auth/discordcb (the OAuth popup) and /podcasts/24-06 (the unfinished player; it's prerendered in a loading state, so the tag is outside the Layout). Both are removed from the sitemap but still crawlable, since Google has to fetch a page to see noindex.
  • /blog/1 now redirects to /blog and is removed from the sitemap.

Please check on the deploy preview

  • /transcripts/tmir-2026-08 and /transcripts/tmir-march-2023 should 301 to TMiR.
  • /transcripts and a couple of transcript pages should read well.

Verified locally

yarn test (lint and prettier) and yarn build both pass. I checked titles, descriptions, canonicals, robots tags and JSON-LD in the built HTML. The sitemap has 117 URLs, with no TMiR, auth, podcast or /blog/1 entries.

🤖 Generated with Claude Code

https://claude.ai/code/session_011ZUEzbgHTThFQF8TL9bLzf


Generated by Claude Code

- 301 every /transcripts/tmir-* page to its episode on tmir.reactiflux.com
  and delete the 40 duplicate copies (and the shadowed tmir.md page). The
  heading anchors use the same slug rule there, so #fragments still work.
- /tmir redirect is now a 301.
- Every page gets a canonical URL, og:url, og:site_name, a www banner image
  and a large Twitter card. Titles get a " · Reactiflux" suffix unless they
  already name the site; pages without a description fall back to one.
- Homepage: real title and description, Organization JSON-LD.
- /transcripts gets its own H1, intro and dated list instead of duplicating
  the newest transcript. Transcript pages get "<Guest>: Q&A transcript
  (<Month YYYY>)" titles (no more duplicate Jared Palmer / Nader Dabit /
  React Conf titles) and a one-line meta description.
- noindex the Discord OAuth callback and the unfinished podcast player,
  and drop them and /blog/1 from the sitemap (/blog/1 redirects to /blog).
- Descriptions for blog posts, /jobs and /tips.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ZUEzbgHTThFQF8TL9bLzf
@netlify

netlify Bot commented Oct 2, 2026

Copy link
Copy Markdown

✅ Deploy Preview for reactiflux ready!

Name Link
🔨 Latest commit 64be261
🔍 Latest deploy log https://app.netlify.com/projects/reactiflux/deploys/6abfe0ab353a0b00083acb12
😎 Deploy Preview https://deploy-preview-374--reactiflux.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@vcarl
vcarl merged commit 1b94c3c into main Oct 3, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants