Skip to content

Improve AEO and SEO for AI answer engines#2866

Open
ajnart wants to merge 1 commit into
mainfrom
feat/aeo-seo-audit-fix
Open

Improve AEO and SEO for AI answer engines#2866
ajnart wants to merge 1 commit into
mainfrom
feat/aeo-seo-audit-fix

Conversation

@ajnart
Copy link
Copy Markdown
Member

@ajnart ajnart commented May 28, 2026

Summary

  • Centralize JSON-LD via shared schema builders and a reusable JsonLd component using Next.js @graph patterns
  • Fix critical SEO bugs: SearchAction now uses ?q=, add /license page, replace missing OG image with /og/default, and fix sitemap/manifest asset references
  • Add AEO surfaces: homepage FAQ (visible + FAQPage schema), llms.txt, richer icon page structured data, and answer-first copy on icon details
  • Align crawl policy: explicit AI crawler allow rules, filtered browse URL noindex/canonical, submit page noindex, community OG route

Test plan

  • pnpm test (866 tests passing)
  • pnpm build succeeds
  • Validate JSON-LD on /, /icons, /icons/{slug}, /license with Google Rich Results Test
  • Confirm /robots.txt, /sitemap.xml, and /llms.txt are reachable after deploy
  • Verify /icons?q=docker search works and filtered URLs are noindexed

Centralize JSON-LD helpers, fix SearchAction and license links, add llms.txt and FAQ content, and align robots/metadata for AI crawlers and filtered browse URLs.
Copilot AI review requested due to automatic review settings May 28, 2026 14:43
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Centralizes JSON-LD structured data via shared schema builders/components, adds AEO surfaces (homepage FAQ, /license, llms.txt), fixes the WebSite SearchAction query param to match the app's actual ?q= URL, and tightens crawl/canonical policy for filtered browse and submit pages. Also introduces a default OG image route and replaces references to the removed og-image.png.

Changes:

  • New SEO library: lib/seo/schemas.ts (graph builders), lib/seo/metadata.ts (OG/canonical helpers), lib/seo/faqs.ts, and a reusable JsonLd component; all page-level inline JSON-LD scripts switched to these helpers.
  • New surfaces: /license page, /llms.txt, homepage FAQ section, /og/default and /og/community/[icon] image routes.
  • Crawl/canonical updates: explicit AI crawler rules in robots.ts, filtered browse params trigger noindex + canonical via getFilteredBrowseMetadata, /submit is noindex, sitemap gains /license and switches /icons image to /og/default, manifest/favicon collapsed to SVG.

Reviewed changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
web/src/lib/seo/schemas.ts Central @graph schema builders and license resolver.
web/src/lib/seo/schemas.test.ts Vitest coverage for new builders.
web/src/lib/seo/metadata.ts Default OG/Twitter image helpers and filtered browse robots/canonical.
web/src/lib/seo/faqs.ts Shared FAQ data backing FAQPage schema and visible UI.
web/src/components/seo/json-ld.tsx Reusable JSON-LD injector with < escaping.
web/src/components/home-faq.tsx Visible FAQ section on homepage.
web/src/components/icon-details.tsx Replaces CardTitle with bare <h1> and adds caption paragraph.
web/src/app/page.tsx Uses shared home graph; mounts FAQ section.
web/src/app/layout.tsx Uses shared default OG/Twitter images, Organization graph, SVG-only icons, llms.txt link.
web/src/app/icons/page.tsx Adds searchParams-aware metadata, shared graph, Suspense around IconSearch.
web/src/app/icons/[icon]/page.tsx Switches inline JSON-LD to buildIconPageGraph.
web/src/app/icons/external/[slug]/page.tsx Switches inline JSON-LD to shared graph; adds source-filter breadcrumb.
web/src/app/community/page.tsx Mirrors icons page metadata/graph + Suspense pattern.
web/src/app/community/[icon]/page.tsx Uses shared graph; adds community OG image.
web/src/app/license/page.tsx New license + trademark policy page.
web/src/app/og/default/route.tsx New default OG image route.
web/src/app/og/community/[icon]/route.tsx New community OG image route.
web/src/app/og/tests/default-route.test.ts Tests for default OG route.
web/src/app/robots.ts Adds AI crawler allow rules.
web/src/app/sitemap.ts Adds /license; switches /icons image to /og/default.
web/src/app/submit/layout.tsx Marks /submit noindex and sets canonical.
web/public/site.webmanifest Replaces PNG icons with SVG-only.
web/public/llms.txt New AEO-oriented site summary.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

</CardTitle>
<h1 className="text-2xl font-bold capitalize text-center mb-2">{formatedIconName}</h1>
<p className="text-sm text-muted-foreground text-center max-w-md">
Download the {formatedIconName} icon in SVG, PNG, and WEBP formats for free.
breadcrumbs: [
{ name: "Home", item: WEB_URL },
{ name: "Browse Icons", item: `${WEB_URL}/icons` },
{ name: sourceConfig.label, item: `${WEB_URL}/icons?source=${sourceConfig.id}` },
Comment thread web/src/app/layout.tsx
Comment on lines +85 to +86
icon: [{ url: "/favicon.svg", type: "image/svg+xml" }],
apple: [{ url: "/favicon.svg", type: "image/svg+xml" }],
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