Skip to content

fix(blog): remove external canonical URLs from 57 blog posts#2015

Merged
Yilialinn merged 4 commits intoapache:masterfrom
moonming:fix/seo-improvements
Apr 10, 2026
Merged

fix(blog): remove external canonical URLs from 57 blog posts#2015
Yilialinn merged 4 commits intoapache:masterfrom
moonming:fix/seo-improvements

Conversation

@moonming
Copy link
Copy Markdown
Member

@moonming moonming commented Apr 9, 2026

Summary

Remove canonical link tags pointing to external domains from 57 blog posts (53 English + 4 Chinese). These external canonicals were telling search engines that the authoritative version of these posts lives on other websites, causing Google to either de-index the APISIX blog pages or exclude them from search results entirely.

- Change onBrokenLinks from 'ignore' to 'log' and onBrokenMarkdownLinks
  from 'ignore' to 'warn' in all 4 docusaurus configs
- Add meta descriptions and og:description to 6 pages (docs, plugins,
  downloads, help, showcase, team)
- Upgrade twitter:card from 'summary' to 'summary_large_image' in all
  4 docusaurus configs
- Expand schema-org.js structured data with Organization, SoftwareApplication,
  and SearchAction schemas
- Fix empty alt text on AI Gateway images (Hero.tsx, Advantage.tsx)
- Add Disallow rules to robots.txt for tag/pagination/search pages
- Change 302 redirects to 301 for permanent content redirects in .htaccess
- Remove SearchAction from schema-org.js (conflicts with robots.txt
  Disallow on /search, and no dedicated search page exists)
- Wrap all meta descriptions in translate() for i18n support so zh
  locale can provide localized metadata
Remove canonical link tags pointing to external domains (blog.frankel.ch,
api7.ai, navendu.me, linkedin.com, opentelemetry.io, keycloak.org, dapr.io,
openappsec.io, iambobur.com, apiseven.com) from 57 blog posts.

These external canonicals were telling search engines that the canonical
version of these posts lives on other websites, causing Google to either
de-index the APISIX blog pages or exclude them from search results entirely.

Changes:
- Remove <head><link rel="canonical" .../></head> blocks from 52 files
  (48 English + 4 Chinese)
- Remove canonical_url frontmatter field from 5 English files

With these removed, Docusaurus will auto-generate self-referencing canonical
URLs pointing to apisix.apache.org, allowing Google to properly index and
rank these blog posts.
Copilot AI review requested due to automatic review settings April 9, 2026 13:41
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

Note

Copilot was unable to run its full agentic suite in this review.

Removes external canonical declarations from blog posts to restore proper self-canonical indexing, and introduces additional site-wide SEO/crawling metadata changes.

Changes:

  • Removed <head><link rel="canonical" ... /></head> blocks and canonical_url frontmatter from affected blog posts.
  • Updated Docusaurus SEO defaults (Twitter card type, broken-link handling) and added per-page meta descriptions on key pages.
  • Adjusted crawl/redirect behavior via robots.txt disallow rules and .htaccess redirect status changes.

Reviewed changes

Copilot reviewed 72 out of 72 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
website/static/robots.txt Adds disallow rules for tag/page/search routes; normalizes sitemap indentation.
website/src/pages/team.tsx Adds translated meta description and OG description via Docusaurus <Head>.
website/src/pages/showcase.tsx Adds translated meta description and OG description via Docusaurus <Head>.
website/src/pages/plugins.tsx Adds translated meta description and OG description inside existing <Head>.
website/src/pages/help.tsx Adds translated meta description and OG description via Docusaurus <Head>.
website/src/pages/downloads.tsx Adds translated meta description and OG description via Docusaurus <Head>.
website/src/pages/docs.tsx Adds translated meta description and OG description via Docusaurus <Head>.
website/src/components/AIGateway/Hero.tsx Improves image accessibility by replacing empty alt with descriptive text.
website/src/components/AIGateway/Advantage.tsx Improves image accessibility by replacing empty alt with descriptive text.
website/docusaurus.config.js Tweaks broken-link behavior and Twitter card type for richer previews.
doc/docusaurus.config.js Tweaks broken-link behavior and Twitter card type for richer previews.
config/schema-org.js Expands JSON-LD to include Organization data alongside WebSite.
blog/zh/docusaurus.config.js Tweaks broken-link behavior and Twitter card type for richer previews.
blog/en/docusaurus.config.js Tweaks broken-link behavior and Twitter card type for richer previews.
.htaccess Changes selected redirects from 302 to 301 (permanent).
blog/zh/blog/2022/09/27/why-apache-apisix-is-best-apigateway.md Removes external canonical <link> from MDX <head>.
blog/zh/blog/2022/02/28/apisix-integration-opentelemetry-plugin.md Removes external canonical <link> from MDX <head>.
blog/zh/blog/2021/12/10/integrate-keycloak-auth-in-apisix.md Removes external canonical <link> from MDX <head>.
blog/zh/blog/2021/11/17/dapr-with-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2025/02/21/why-reinvent-api-gateways.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2025/02/06/analyzing-api-gateway-adoption-rates.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/10/22/apisix-integrates-with-open-appsec.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/08/01/free-tier-api-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/07/25/different-rate-limits-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/07/18/advanced-url-rewrite-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/07/11/watermarking-infrastructure.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/06/13/fixed-routes-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/06/06/even-more-opentelemetry.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/05/02/pass-parameters-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/04/11/implement-idempotency-key-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/04/04/fix-duplicate-api-requests.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/03/28/apisix-north-america-tour.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/02/27/secure-api-practices-apisix-2.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/02/20/secure-api-practices-apisix-1.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2024/02/13/apisix-owasp-coraza-core-ruleset.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/12/14/apisix-plugins-priority-leaky-abstraction.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/12/07/canary-releases-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/11/30/chopping-monolith-smarter-way.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/11/09/api-versioning.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/10/05/resize-images-on-the-fly.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/09/28/rabbit-hole-apisix-plugin.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/08/17/ops-friendly-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/08/14/rate-limit.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/07/27/apisix-without-etcd.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/07/09/apisix-integrates-with-vault.md Removes misleading canonical_url frontmatter field.
blog/en/blog/2023/07/07/tiny-apisix-plugin.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/06/30/apisix-mqtt-proxy.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/06/12/how-is-apisix-fast.md Removes misleading canonical_url frontmatter field.
blog/en/blog/2023/05/19/why-do-microservices-need-an-api-gateway.md Removes misleading canonical_url frontmatter field.
blog/en/blog/2023/05/04/apache-apisix-chaos-engineering.md Removes misleading canonical_url frontmatter field.
blog/en/blog/2023/04/14/10-api-management-trends-2023.md Removes misleading canonical_url frontmatter field.
blog/en/blog/2023/03/23/mtls-everywhere.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/03/16/grpc-client-side.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/03/09/authenticate-openid-connect.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/03/02/security-policy-auditable.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/02/23/right-feature-right-place.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2023/02/09/secure-apisix-admin.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2022/12/14/web-caching-server.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2022/12/07/web-caching-client.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2022/12/06/choose-the-right-api-style-technology.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2022/11/23/poor-man-api.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2022/11/09/georouting-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2022/10/05/rust-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2022/09/28/rust-loves-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2022/09/13/why-is-apache-apisix-the-best-api-gateway.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2022/09/09/kubernetes-ingress-with-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2022/08/17/backend-for-frontend-demo.md Removes external canonical <link> and cleans extra blank lines near code blocks.
blog/en/blog/2022/08/12/arm-performance-google-aws-azure-with-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2022/08/08/apache-apisix-performance-test-in-azure.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2022/02/28/apisix-integration-opentelemetry-plugin.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2021/12/10/integrate-keycloak-auth-in-apisix.md Removes external canonical <link> from MDX <head>.
blog/en/blog/2021/11/17/dapr-with-apisix.md Removes external canonical <link> from MDX <head>.
Comments suppressed due to low confidence (2)

website/static/robots.txt:1

  • The PR description focuses on removing external canonical URLs from blog posts, but this change also alters crawl/indexing behavior via robots.txt (tags, pagination, and search are now disallowed). Please either (a) update the PR description/testing section to explicitly cover these additional SEO/crawl changes and their rationale, or (b) split them into a separate PR to keep scope aligned.
    config/schema-org.js:1
  • JSON-LD supports arrays, so this is valid, but duplicating @context on each entry is avoidable. Consider using a single object with @context and an @graph array (or a single object that includes both WebSite and Organization via @graph) to reduce duplication and keep structured data more maintainable as additional entities get added.

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

Comment thread .htaccess
@Yilialinn Yilialinn merged commit ae904b4 into apache:master Apr 10, 2026
7 checks passed
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.

4 participants