Skip to content

seo: fix H1, meta descriptions, schema author, and alternateName#2537

Merged
koala73 merged 2 commits intomainfrom
worktree-immutable-drifting-hippo
Mar 30, 2026
Merged

seo: fix H1, meta descriptions, schema author, and alternateName#2537
koala73 merged 2 commits intomainfrom
worktree-immutable-drifting-hippo

Conversation

@koala73
Copy link
Copy Markdown
Owner

@koala73 koala73 commented Mar 30, 2026

Summary

  • Add sr-only H1 outside `#app` so Googlebot sees it post-JS-render (live DOM had zero H1s)
  • Fix pro page schema `author` from placeholder `Someone.ceo` to Elie Habib with correct URL
  • Fix pro page `seo-prerender` div: `

    undefined undefined

    ` and two `

    undefined

    ` replaced with real copy
  • Update meta/og/twitter description to lead with WIRED press mention and 2M+ user count
  • Fix schema `alternateName` from duplicate `"World Monitor"` to `["WorldMonitor", "worldmonitor.app", "World Monitor App"]` for stronger one-word brand association
  • Align all three description fields (meta, og:description, twitter:description) to the same copy

Test plan

  • Verify homepage meta description in source shows "Featured in WIRED"
  • Verify `

    ` present in rendered DOM (Googlebot will see it)

  • Verify `/pro` page source shows `"author": {"name": "Elie Habib"}` in JSON-LD
  • Verify `/pro` page `seo-prerender` div has no "undefined" strings
  • Verify schema `alternateName` is an array with "WorldMonitor" in Google Rich Results Test

@vercel
Copy link
Copy Markdown

vercel Bot commented Mar 30, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
worldmonitor Ready Ready Preview, Comment Mar 30, 2026 4:59am

Request Review

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Mar 30, 2026

Greptile Summary

This PR addresses a set of SEO correctness issues across the homepage and /pro page: adding a visually-hidden H1 so Googlebot sees a heading in the initial HTML, aligning all three description fields to a consistent WIRED-led copy, fixing a placeholder author object in the pro page JSON-LD schema, replacing three "undefined" strings in the pro page seo-prerender div, and broadening alternateName from a duplicate string into a descriptive array.

Key changes:

  • index.html: sr-only <h1> added before #app; meta/og/twitter descriptions unified; alternateName changed from \"World Monitor\" (duplicate of name) to [\"WorldMonitor\", \"worldmonitor.app\", \"World Monitor App\"]
  • public/pro/index.html: JSON-LD author fixed from placeholder Someone.ceo to Elie Habib with correct https://x.com/eliehabib URL; seo-prerender div populated with real product copy instead of undefined undefined / undefined
  • Two P2 style notes: the sr-only H1 uses the deprecated clip:rect(0,0,0,0) (prefer clip-path: inset(50%)) and \"worldmonitor.app\" in alternateName is a domain rather than a human-readable alternate name

Confidence Score: 5/5

Safe to merge — all remaining findings are P2 style suggestions with no functional impact.

All changes are static HTML/metadata fixes with no JavaScript logic, no API calls, and no risk of runtime breakage. The two P2 notes (deprecated clip property, domain string in alternateName) are cosmetic and do not affect correctness or SEO validity.

No files require special attention.

Important Files Changed

Filename Overview
index.html Adds visually-hidden sr-only H1; aligns meta/og/twitter descriptions to WIRED-led copy; upgrades alternateName from duplicate string to an array. Minor: deprecated clip property and a domain string in alternateName.
public/pro/index.html Fixes placeholder author ("Someone.ceo" → Elie Habib with correct X URL) and replaces three "undefined" strings in the seo-prerender div with real product copy. All changes are correct and unambiguous.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Browser or Googlebot requests homepage] --> B{JavaScript executed?}
    B -- No or slow --> C[sr-only H1 visible in raw HTML\nWorld Monitor - Real-Time Global Intelligence Dashboard]
    B -- Yes --> D[app div renders full SPA]
    D --> E[sr-only H1 still present in DOM\noutside app div]

    A2[Request for pro page] --> F[seo-prerender div\npositioned off-screen]
    F --> G[h1 World Monitor Pro\np Global intelligence platform\np Equity research macro briefings]

    A3[Search engine crawler] --> H[JSON-LD structured data]
    H --> I[index.html WebApplication schema\nalternateName array\nauthor Elie Habib]
    H --> J[pro index.html SoftwareApplication schema\nauthor Elie Habib x.com/eliehabib\nFAQPage schema]
Loading

Reviews (1): Last reviewed commit: "seo: fix meta descriptions, H1, schema a..." | Re-trigger Greptile

Comment thread index.html Outdated
<link href="https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,300;0,400;0,600;0,700;1,400&family=Tajawal:wght@200;300;400;500;700;800;900&display=swap" rel="stylesheet">
</head>
<body>
<h1 style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap">World Monitor - Real-Time Global Intelligence Dashboard</h1>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 clip property is deprecated

The inline clip:rect(0,0,0,0) is deprecated in CSS in favour of clip-path. For modern browser support and forward compatibility, the standard sr-only pattern now pairs clip-path: inset(50%) with the legacy clip as a fallback (or drops clip entirely for evergreen targets).

Suggested change
<h1 style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap">World Monitor - Real-Time Global Intelligence Dashboard</h1>
<h1 style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0">World Monitor - Real-Time Global Intelligence Dashboard</h1>

Comment thread index.html Outdated
"@type": "WebApplication",
"name": "World Monitor",
"alternateName": "World Monitor",
"alternateName": ["WorldMonitor", "worldmonitor.app", "World Monitor App"],
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 alternateName includes a domain, not a name

"worldmonitor.app" is a domain/URL rather than an alternate name for the product. Schema.org's alternateName expects a text label humans would call the thing (e.g. a short-form brand name or acronym). Including a bare domain here isn't invalid, but it can look odd in rich-results previews and may not contribute to the intended brand association. Consider replacing it with something like "WM" or removing it, leaving ["WorldMonitor", "World Monitor App"].

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@koala73 koala73 merged commit c8fe1a8 into main Mar 30, 2026
7 checks passed
@koala73 koala73 deleted the worktree-immutable-drifting-hippo branch March 30, 2026 04:59
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.

1 participant