fix(blog): remove external canonical URLs from 57 blog posts#2015
Merged
Yilialinn merged 4 commits intoapache:masterfrom Apr 10, 2026
Merged
fix(blog): remove external canonical URLs from 57 blog posts#2015Yilialinn merged 4 commits intoapache:masterfrom
Yilialinn merged 4 commits intoapache:masterfrom
Conversation
- 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.
Contributor
There was a problem hiding this comment.
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 andcanonical_urlfrontmatter 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.txtdisallow rules and.htaccessredirect 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
@contexton each entry is avoidable. Consider using a single object with@contextand an@grapharray (or a single object that includes bothWebSiteandOrganizationvia@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.
Baoyuantop
approved these changes
Apr 9, 2026
Yilialinn
approved these changes
Apr 10, 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
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.