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.
