Skip to main content

Developer Page Specifications

SEO / AEO

Per-page metadata + JSON-LD schemas (CollectionPage, ItemList, CreativeWork, Organization).

Complete

Per-page SEO + AEO requirements for both Opportunity Radar surfaces. Listing emits CollectionPage + ItemList. Details emits CreativeWork (v1) with planned migration to BusinessEvent for deadline-anchored programs. Every page ships canonical, hreflang, Open Graph, Twitter card, and robots metadata — non-negotiable.

Listing page (/:lang/opportunity-radar)

SEO title
"Opportunity Radar — Accelerators, Grants, and Programs for MENA Founders | StartupHub.today". Localised AR variant authored, not auto-translated. Max 60 chars per locale.
Meta description
"Editorially curated accelerator, grant, and program opportunities for MENA founders. Track deadlines, eligibility, and benefits across 16 countries." Localised AR variant. Max 160 chars.
Canonical URL
https://startuphub.today/{lang}/opportunity-radar. Drop query params except language-essential ones (lang itself is path-segment, not query).
hreflang alternates
Three entries: en (/en/opportunity-radar), ar (/ar/opportunity-radar), x-default (/en/opportunity-radar).
JSON-LD
CollectionPage with name + url + inLanguage; ItemList containing up to 25 Opportunity items as @type=Event with name, url, startDate (DeadlineDate equivalent), organizer. WebSite SearchAction for site:search.
Open Graph + Twitter
og:type=website · og:title (matches SEO title) · og:description · og:image (1200×630 brand-Opportunity Radar cover) · twitter:card=summary_large_image.
robots
index,follow,max-image-preview:large,max-snippet:-1.

Details page (/:lang/opportunity-radar/{slug})

SEO title
"{Opportunity Title} | Opportunity Radar — StartupHub.today". When sponsored, append "(Sponsored)" suffix. Max 60 chars including suffix.
Meta description
OpportunityLang.ShortDescription. Already constrained ≤200 chars by editorial standard; truncate to 160 for meta.
Canonical URL
https://startuphub.today/{lang}/opportunity-radar/{slug}.
JSON-LD primary @type
v1: CreativeWork with name, description, url, image, inLanguage, datePublished, dateModified, author (Organizer), provider (Organizer), about (sectors), audience (stages). Roadmap: migrate to BusinessEvent when deadlineDate is structurally an event marker.
BreadcrumbList JSON-LD
Three items: Home, Opportunity Radar, current. Emitted alongside the primary @type as a separate <script> block.
Organization JSON-LD
Emit a nested Organization sub-graph for the organizer (name, url, logo, sameAs). Use Organizer.WebsiteUrl as the canonical url.
Open Graph
og:type=article · og:title=SEO title · og:description=meta description · og:image=Opportunity.CoverImageUrl OR generated SVG fallback · article:published_time=publishedAt · article:section="Opportunity Radar".
robots
index,follow when IsActive=true and Status ≠ Closed. Closed opportunities: still index (historical reference) but add max-snippet:-1 + max-image-preview:standard to dampen SERP prominence.