This is an automated email from the ASF dual-hosted git repository.
wenming pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-website.git
The following commit(s) were added to refs/heads/master by this push:
new a5c1b161b5e fix: improve SEO across the website (#2002)
a5c1b161b5e is described below
commit a5c1b161b5eaf5451e06ae90b2600a1b0d33a9f9
Author: Ming Wen <[email protected]>
AuthorDate: Thu Mar 12 16:31:09 2026 +0800
fix: improve SEO across the website (#2002)
---
.htaccess | 8 ++++----
blog/en/docusaurus.config.js | 6 +++---
blog/zh/docusaurus.config.js | 6 +++---
config/schema-org.js | 26 ++++++++++++++++++++------
doc/docusaurus.config.js | 6 +++---
website/docusaurus.config.js | 6 +++---
website/src/components/AIGateway/Advantage.tsx | 2 +-
website/src/components/AIGateway/Hero.tsx | 2 +-
website/src/pages/docs.tsx | 5 +++++
website/src/pages/downloads.tsx | 5 +++++
website/src/pages/help.tsx | 5 +++++
website/src/pages/plugins.tsx | 2 ++
website/src/pages/showcase.tsx | 5 +++++
website/src/pages/team.tsx | 5 +++++
website/static/robots.txt | 8 +++++++-
15 files changed, 72 insertions(+), 25 deletions(-)
diff --git a/.htaccess b/.htaccess
index 3406c6641fa..28414e2465d 100644
--- a/.htaccess
+++ b/.htaccess
@@ -41,10 +41,10 @@ Redirect 302 "/slack"
"https://join.slack.com/t/the-asf/shared_invite/zt-1ugrg37
Redirect 302 "/community-meeting-signup"
"https://docs.google.com/forms/d/1C9bIJ3eh0bQrBdv4rPGxHDUvX4giNQ_IRCmDDOQ2mgE/"
Redirect 302 "/contributor-workshop-signup"
"https://docs.google.com/forms/d/1LUER3R9-aFsUm7MhjVd_CM1xAGnkuWIe62prFH5aqAE/"
Redirect 302 "/guest-blog-post" "https://forms.gle/unQpSm7FyqkfaSSP8/"
-RedirectMatch 302 "^/docs/apisix/getting-started/$"
"/docs/apisix/getting-started/README/"
-RedirectMatch 302 "^/zh/docs/apisix/getting-started/$"
"/zh/docs/apisix/getting-started/README/"
-RedirectMatch 302 "^/docs/apisix/3\.2/plugins/(.*)$"
"https://apache-apisix.netlify.app/docs/apisix/3.2/plugins/$1"
-RedirectMatch 302 "^/zh/docs/apisix/3\.2/plugins/(.*)$"
"https://apache-apisix.netlify.app/zh/docs/apisix/3.2/plugins/$1"
+RedirectMatch 301 "^/docs/apisix/getting-started/$"
"/docs/apisix/getting-started/README/"
+RedirectMatch 301 "^/zh/docs/apisix/getting-started/$"
"/zh/docs/apisix/getting-started/README/"
+RedirectMatch 301 "^/docs/apisix/3\.2/plugins/(.*)$"
"https://apache-apisix.netlify.app/docs/apisix/3.2/plugins/$1"
+RedirectMatch 301 "^/zh/docs/apisix/3\.2/plugins/(.*)$"
"https://apache-apisix.netlify.app/zh/docs/apisix/3.2/plugins/$1"
Redirect 301 "/docs/apisix/install" "/docs/apisix/how-to-build/"
Redirect 301 "/docs/apisix/architecture-design/plugin/"
"/docs/apisix/architecture-design/plugin-config/"
diff --git a/blog/en/docusaurus.config.js b/blog/en/docusaurus.config.js
index db4bcf7a55b..d41cc9287a1 100644
--- a/blog/en/docusaurus.config.js
+++ b/blog/en/docusaurus.config.js
@@ -17,7 +17,7 @@ const metadatas = [
},
{
name: 'twitter:card',
- content: 'summary',
+ content: 'summary_large_image',
},
];
@@ -31,8 +31,8 @@ module.exports = {
organizationName: 'Apache',
projectName: 'apisix-website',
favicon: 'https://static.apiseven.com/202202/favicon.png',
- onBrokenLinks: 'ignore',
- onBrokenMarkdownLinks: 'ignore',
+ onBrokenLinks: 'log',
+ onBrokenMarkdownLinks: 'warn',
noIndex: false,
i18n: {
defaultLocale: 'en',
diff --git a/blog/zh/docusaurus.config.js b/blog/zh/docusaurus.config.js
index 2c3eb5a2e29..6d3ef1b9916 100644
--- a/blog/zh/docusaurus.config.js
+++ b/blog/zh/docusaurus.config.js
@@ -18,7 +18,7 @@ const metadatas = [
},
{
name: 'twitter:card',
- content: 'summary',
+ content: 'summary_large_image',
},
];
@@ -32,8 +32,8 @@ module.exports = {
organizationName: 'Apache',
projectName: 'apisix-website',
favicon: 'https://static.apiseven.com/202202/favicon.png',
- onBrokenLinks: 'ignore',
- onBrokenMarkdownLinks: 'ignore',
+ onBrokenLinks: 'log',
+ onBrokenMarkdownLinks: 'warn',
noIndex: false,
i18n: {
defaultLocale: 'zh',
diff --git a/config/schema-org.js b/config/schema-org.js
index 560c654e3d9..5903b5224c3 100644
--- a/config/schema-org.js
+++ b/config/schema-org.js
@@ -9,12 +9,26 @@ module.exports = function () {
attributes: {
type: 'application/ld+json',
},
- innerHTML: JSON.stringify({
- '@context': 'https://schema.org',
- '@type': 'WebSite',
- name: 'Apache APISIX',
- url: 'https://apisix.apache.org',
- }),
+ innerHTML: JSON.stringify([
+ {
+ '@context': 'https://schema.org',
+ '@type': 'WebSite',
+ name: 'Apache APISIX',
+ url: 'https://apisix.apache.org',
+ },
+ {
+ '@context': 'https://schema.org',
+ '@type': 'Organization',
+ name: 'Apache APISIX',
+ url: 'https://apisix.apache.org',
+ logo: 'https://apisix.apache.org/img/logo2.svg',
+ sameAs: [
+ 'https://github.com/apache/apisix',
+ 'https://twitter.com/ApacheAPISIX',
+ 'https://www.youtube.com/channel/UCgPD18cMhOg5rmPVnQhAC8g',
+ ],
+ },
+ ]),
},
],
};
diff --git a/doc/docusaurus.config.js b/doc/docusaurus.config.js
index a8675f90565..18727090b52 100644
--- a/doc/docusaurus.config.js
+++ b/doc/docusaurus.config.js
@@ -55,8 +55,8 @@ module.exports = {
},
},
},
- onBrokenLinks: 'ignore',
- onBrokenMarkdownLinks: 'ignore',
+ onBrokenLinks: 'log',
+ onBrokenMarkdownLinks: 'warn',
noIndex: false,
presets: [
[
@@ -252,7 +252,7 @@ module.exports = {
},
{
name: 'twitter:card',
- content: 'summary',
+ content: 'summary_large_image',
},
],
},
diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js
index fedf9a5e3b8..d7b5cb3b39c 100644
--- a/website/docusaurus.config.js
+++ b/website/docusaurus.config.js
@@ -50,8 +50,8 @@ module.exports = {
},
},
},
- onBrokenLinks: 'ignore',
- onBrokenMarkdownLinks: 'ignore',
+ onBrokenLinks: 'log',
+ onBrokenMarkdownLinks: 'warn',
noIndex: false,
presets: [
[
@@ -143,7 +143,7 @@ module.exports = {
},
{
name: 'twitter:card',
- content: 'summary',
+ content: 'summary_large_image',
},
],
},
diff --git a/website/src/components/AIGateway/Advantage.tsx
b/website/src/components/AIGateway/Advantage.tsx
index 396d0ea0d4d..feae57d221b 100644
--- a/website/src/components/AIGateway/Advantage.tsx
+++ b/website/src/components/AIGateway/Advantage.tsx
@@ -156,7 +156,7 @@ const Advantage: React.FC = () => {
</Text>
<AvifImage
src={item.picture}
- alt=""
+ alt="AI plugin icons for LLMs load balancing and token
rate limiting"
height="50px"
w="full"
objectFit="contain"
diff --git a/website/src/components/AIGateway/Hero.tsx
b/website/src/components/AIGateway/Hero.tsx
index 5115502cc81..2da332e8cdd 100644
--- a/website/src/components/AIGateway/Hero.tsx
+++ b/website/src/components/AIGateway/Hero.tsx
@@ -62,7 +62,7 @@ const Hero: React.FC = () => {
<Box w="full">
<AvifImage
src="https://static.api7.ai/uploads/2025/04/17/zdPVQ1zg_apisix-ai-gateway.png"
- alt=""
+ alt="Apache APISIX AI Gateway architecture overview"
animation={fadeInAnimation}
w="full"
transform="scale(1.1)"
diff --git a/website/src/pages/docs.tsx b/website/src/pages/docs.tsx
index ea89ccca950..db08cd83ea9 100644
--- a/website/src/pages/docs.tsx
+++ b/website/src/pages/docs.tsx
@@ -2,6 +2,7 @@ import type { FC } from 'react';
import React from 'react';
import styled from 'styled-components';
import Layout from '@theme/Layout';
+import Head from '@docusaurus/Head';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Translate, { translate } from '@docusaurus/Translate';
@@ -177,6 +178,10 @@ const Docs: FC = () => {
return (
<Layout title={translate({ message: 'Documentation' })}>
+ <Head>
+ <meta name="description" content={translate({ id:
'docs.meta.description', message: 'Browse Apache APISIX documentation for API
Gateway, AI Gateway, Ingress Controller, Helm Chart, and plugin development.
Get started with guides, tutorials, and API references.' })} />
+ <meta property="og:description" content={translate({ id:
'docs.meta.ogDescription', message: 'Browse Apache APISIX documentation for API
Gateway, AI Gateway, Ingress Controller, Helm Chart, and plugin development.'
})} />
+ </Head>
<Page>
<PageTitle>
<Translate id="docs.webpage.title.Document">Documentation</Translate>
diff --git a/website/src/pages/downloads.tsx b/website/src/pages/downloads.tsx
index bd673e4e808..0ae16685f81 100644
--- a/website/src/pages/downloads.tsx
+++ b/website/src/pages/downloads.tsx
@@ -2,6 +2,7 @@ import type { FC } from 'react';
import React from 'react';
import styled from 'styled-components';
import Layout from '@theme/Layout';
+import Head from '@docusaurus/Head';
import CodeBlock from '@theme/CodeBlock';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
@@ -57,6 +58,10 @@ const DownloadCards: FC = () => {
const Downloads: FC = () => (
<Layout title={translate({ message: 'Downloads' })}>
+ <Head>
+ <meta name="description" content={translate({ id:
'download.meta.description', message: 'Download Apache APISIX, the cloud-native
API Gateway and AI Gateway. Get the latest release, verify signatures, and
access historical versions.' })} />
+ <meta property="og:description" content={translate({ id:
'download.meta.ogDescription', message: 'Download Apache APISIX, the
cloud-native API Gateway and AI Gateway. Get the latest release and historical
versions.' })} />
+ </Head>
<DownloadsPage>
<PageTitle><Translate
id="download.website.title">Downloads</Translate></PageTitle>
<PageSubtitle><Translate id="download.website.subtitle">We love open
source.</Translate></PageSubtitle>
diff --git a/website/src/pages/help.tsx b/website/src/pages/help.tsx
index 43845aa4324..4835dace0b4 100644
--- a/website/src/pages/help.tsx
+++ b/website/src/pages/help.tsx
@@ -2,6 +2,7 @@ import type { FC } from 'react';
import React from 'react';
import styled from 'styled-components';
import Layout from '@theme/Layout';
+import Head from '@docusaurus/Head';
import Translate, { translate } from '@docusaurus/Translate';
@@ -28,6 +29,10 @@ const Page = styled.div`
const Help: FC = () => (
<Layout title={translate({ message: 'Help' })}>
+ <Head>
+ <meta name="description" content={translate({ id:
'help.meta.description', message: 'Get help with Apache APISIX. Browse
documentation, join the community on GitHub, Slack, and Twitter, and connect
with contributors.' })} />
+ <meta property="og:description" content={translate({ id:
'help.meta.ogDescription', message: 'Get help with Apache APISIX. Browse
documentation and join the community on GitHub, Slack, and Twitter.' })} />
+ </Head>
<Page className="help-page">
<PageTitle><Translate id="help.website.title">NEED
HELP?</Translate></PageTitle>
<PageSubtitle>
diff --git a/website/src/pages/plugins.tsx b/website/src/pages/plugins.tsx
index e31c7719fbe..0b64fc95805 100644
--- a/website/src/pages/plugins.tsx
+++ b/website/src/pages/plugins.tsx
@@ -236,6 +236,8 @@ const Plugins: FC = () => {
return (
<Layout title={translate({ message: 'Plugin Hub' })}>
<Head>
+ <meta name="description" content={translate({ id:
'plugins.meta.description', message: 'Explore 80+ Apache APISIX plugins for
authentication, security, traffic control, observability, and AI. Powerful
integrations for your API Gateway.' })} />
+ <meta property="og:description" content={translate({ id:
'plugins.meta.ogDescription', message: 'Explore 80+ Apache APISIX plugins for
authentication, security, traffic control, observability, and AI.' })} />
<script src="/js/plugin-icon.js" defer />
</Head>
<Page>
diff --git a/website/src/pages/showcase.tsx b/website/src/pages/showcase.tsx
index bbe0c995b5d..962142c04cf 100644
--- a/website/src/pages/showcase.tsx
+++ b/website/src/pages/showcase.tsx
@@ -4,6 +4,7 @@ import useDocusaurusContext from
'@docusaurus/useDocusaurusContext';
import Translate, { translate } from '@docusaurus/Translate';
import Layout from '@theme/Layout';
+import Head from '@docusaurus/Head';
import '../css/showcase.scss';
const Container: FC = (props) => {
@@ -80,6 +81,10 @@ const Content: FC = () => {
const Showcase: FC = () => (
<Layout title={translate({ message: 'ShowCase' })}>
+ <Head>
+ <meta name="description" content={translate({ id:
'showcase.meta.description', message: 'See which companies and organizations
use Apache APISIX in production. Join the growing community of API Gateway
users worldwide.' })} />
+ <meta property="og:description" content={translate({ id:
'showcase.meta.ogDescription', message: 'See which companies and organizations
use Apache APISIX in production.' })} />
+ </Head>
<Container>
<Header />
<Content />
diff --git a/website/src/pages/team.tsx b/website/src/pages/team.tsx
index 99b6492e730..0ec75721582 100644
--- a/website/src/pages/team.tsx
+++ b/website/src/pages/team.tsx
@@ -2,6 +2,7 @@ import type { FC } from 'react';
import React from 'react';
import styled from 'styled-components';
import Layout from '@theme/Layout';
+import Head from '@docusaurus/Head';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Translate, { translate } from '@docusaurus/Translate';
@@ -287,6 +288,10 @@ const Team: FC = () => {
));
return (
<Layout title={translate({ message: 'Team' })}>
+ <Head>
+ <meta name="description" content={translate({ id:
'team.meta.description', message: 'Meet the Apache APISIX team — PMC members,
committers, and contributors building the cloud-native API Gateway and AI
Gateway.' })} />
+ <meta property="og:description" content={translate({ id:
'team.meta.ogDescription', message: 'Meet the Apache APISIX team — PMC members,
committers, and contributors.' })} />
+ </Head>
<Page>
<PageTitle><Translate
id="team.webpage.title.Team">Team</Translate></PageTitle>
<PageSubtitle><Translate id="team.webpage.title.DocumentSubtitle">We
love open source.</Translate></PageSubtitle>
diff --git a/website/static/robots.txt b/website/static/robots.txt
index 532114335d4..ae9f8c504fb 100644
--- a/website/static/robots.txt
+++ b/website/static/robots.txt
@@ -1,7 +1,13 @@
# Algolia-Crawler-Verif: 027907D9E46C48C1
User-agent: *
+Disallow: /blog/tags/
+Disallow: /zh/blog/tags/
+Disallow: /blog/page/
+Disallow: /zh/blog/page/
+Disallow: /search
+Disallow: /zh/search
Sitemap: https://apisix.apache.org/sitemap.xml
-Sitemap: https://apisix.apache.org/zh/sitemap.xml
\ No newline at end of file
+Sitemap: https://apisix.apache.org/zh/sitemap.xml