feat(seo): technical SEO fixes (hreflang dedup, Plugin Hub, structured data, blog H1, Netlify noindex)#2054
Merged
Merged
Conversation
Docusaurus already emits canonical and hreflang alternate links natively (via react-helmet) on every page. The custom postBuild plugin in config/hreflang.js (loaded only by the website/ instance) merely re-added a second, duplicate set of hreflang tags. Remove it to keep one source of truth.
- Title: 'Plugin Hub' -> 'Plugin Hub: 100+ API Gateway & AI Plugins' - Fix stale plugin count in description (80+ -> 100+; actual is 105) - Add CollectionPage + ItemList JSON-LD enumerating all plugins - Add FAQPage JSON-LD for rich results / AI answers
The default Docusaurus blog index renders no H1, an on-page SEO gap.
Production (apisix.apache.org) is served by Apache infra + Fastly and does not read netlify.toml. apache-apisix.netlify.app is a mirror that should not compete with production in search results; add X-Robots-Tag: noindex.
doc/ uses trailingSlash: true, so the slash-less URLs each 301-redirect. Structured-data URLs should name the canonical 200 target directly.
6 tasks
guoqqqi
approved these changes
Jun 22, 2026
Yilialinn
approved these changes
Jun 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A batch of low-risk, high-value technical SEO fixes for apisix.apache.org. Each is an independent commit.
<link rel="canonical">and hreflang alternate links natively (react-helmet) on every page.config/hreflang.js(loaded only by thewebsite/instance) re-added a second, duplicate plain set, so everywebsite/page shipped two sets of hreflang tags. Removing it leaves a single source of truth. Verified: thedoc/andblog/instances never loaded the plugin and already render exactly one correct set./plugins/) — titlePlugin Hub→Plugin Hub: 100+ API Gateway & AI Plugins; corrected the stale "80+" count to "100+" (actual built count: 105); addedCollectionPage+ItemList(enumerates every plugin) andFAQPageJSON-LD. ItemList URLs use the canonical trailing-slash form.SoftwareApplication+FAQPageJSON-LD.Organization/WebSiteare already injected globally byconfig/schema-org.js./blog/) — added a visible<h1>; the default Docusaurus blog list ships without one.netlify.tomlsetsX-Robots-Tag: noindex. Production (apisix.apache.org) is served by Apache httpd + Fastly and does not read this file;apache-apisix.netlify.appis a mirror that should not compete with the canonical site in search. Note: this also de-indexes the archived doc versions hosted on that mirror (config/apisix-versions.js→archivedVersions), which is intended.Note on the structured data
The JSON-LD is added primarily for entity understanding and AI-answer eligibility, not guaranteed rich snippets:
FAQPageis valid markup, but Google no longer renders FAQ rich results for non-government/health sites (policy change, 2023). It still helps AI/other engines.SoftwareApplicationis valid, but aSoftwareApplicationrich result also requiresaggregateRatingorreview, which are intentionally not included (no rating data to cite — we won't fabricate one).Test plan
/plugins/<title>shows the new text; page source contains validCollectionPage/ItemList/FAQPageJSON-LD (passes Rich Results Test validation; ItemList URLs are 200, not redirects).SoftwareApplication+FAQPageJSON-LD./blog/renders exactly one<h1>.website/page emits exactly one set of hreflang + canonical tags (no duplicates) — e.g./,/plugins/,/learning-center/apisix-vs-kong/.apache-apisix.netlify.appresponses includeX-Robots-Tag: noindex.Verification done
Config syntax checked; Plugin Hub JSON-LD generated against the real
plugins.json(105 plugins, valid); single-source canonical/hreflang confirmed on the livedoc/+blog/instances; an independent review confirmed no other config requires the removed plugin and the ItemList URL logic matches the on-page card logic. Full multi-instance build verification is delegated to CI.