This is an automated email from the ASF dual-hosted git repository.
guoqqqi 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 75cde2fc76b Improve technical SEO and mobile performance (#2053)
75cde2fc76b is described below
commit 75cde2fc76b9ba646c3feb054602d991c3201677
Author: Yilia Lin <[email protected]>
AuthorDate: Tue Jun 16 18:33:28 2026 +0800
Improve technical SEO and mobile performance (#2053)
---
blog/en/docusaurus.config.js | 8 ++++
blog/src/css/customTheme.scss | 55 ++++++++++++++++++++++++++
blog/src/theme/CodeBlock/styles.module.css | 9 +++++
blog/src/theme/NotFound/index.tsx | 20 +++++++---
blog/zh/docusaurus.config.js | 8 ++++
config/ssrTemplate.js | 41 ++++++++++++-------
doc/docusaurus.config.js | 8 ++++
doc/src/css/customTheme.scss | 55 ++++++++++++++++++++++++++
doc/src/pages/edit.tsx | 2 +-
doc/src/theme/CodeBlock/styles.module.css | 9 +++++
doc/src/theme/NotFound/index.tsx | 20 +++++++---
website/docusaurus.config.js | 8 ++--
website/src/components/AIGateway/AvifImage.tsx | 10 ++++-
website/src/components/AIGateway/Hero.tsx | 3 +-
website/src/components/HeroCanvas.tsx | 15 +++----
website/src/css/customTheme.scss | 55 ++++++++++++++++++++++++++
website/src/css/landing-sections/hero.scss | 49 ++++++++++++++++++++++-
website/src/pages/ai-gateway.tsx | 9 +++++
website/src/pages/index.tsx | 4 ++
website/src/theme/NotFound/index.tsx | 20 +++++++---
website/static/robots.txt | 14 +++++++
21 files changed, 374 insertions(+), 48 deletions(-)
diff --git a/blog/en/docusaurus.config.js b/blog/en/docusaurus.config.js
index f07832c66e1..93003060185 100644
--- a/blog/en/docusaurus.config.js
+++ b/blog/en/docusaurus.config.js
@@ -15,10 +15,18 @@ const metadatas = [
name: 'robots',
content: 'index,follow',
},
+ {
+ property: 'og:site_name',
+ content: 'Apache APISIX',
+ },
{
name: 'twitter:card',
content: 'summary_large_image',
},
+ {
+ name: 'twitter:site',
+ content: '@apacheapisix',
+ },
];
module.exports = {
diff --git a/blog/src/css/customTheme.scss b/blog/src/css/customTheme.scss
index 6a330ec0073..f220effa6cb 100644
--- a/blog/src/css/customTheme.scss
+++ b/blog/src/css/customTheme.scss
@@ -526,3 +526,58 @@ button[class*="announcementBarClose"] {
font-weight: 500;
}
}
+
+/* stylelint-disable no-descending-specificity */
+.markdown img,
+article img {
+ max-width: 100%;
+ height: auto;
+}
+
+.markdown table {
+ display: block;
+ max-width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+.markdown pre {
+ max-width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+h1,
+h2,
+h3,
+[id] {
+ scroll-margin-top: calc(var(--ifm-navbar-height) + 16px);
+}
+
+@media screen and (max-width: 996px) {
+ article {
+ font-size: 17px;
+ line-height: 1.75;
+ }
+
+ article p {
+ font-size: 17px;
+ line-height: 1.75;
+ }
+
+ article h1 {
+ font-size: 2.1rem;
+ line-height: 1.15;
+ }
+
+ article h2 {
+ font-size: 1.75rem;
+ line-height: 1.2;
+ }
+
+ article h3 {
+ font-size: 1.35rem;
+ line-height: 1.25;
+ }
+}
+/* stylelint-enable no-descending-specificity */
diff --git a/blog/src/theme/CodeBlock/styles.module.css
b/blog/src/theme/CodeBlock/styles.module.css
index 707a187e50e..9a9e1705c3b 100644
--- a/blog/src/theme/CodeBlock/styles.module.css
+++ b/blog/src/theme/CodeBlock/styles.module.css
@@ -17,6 +17,8 @@
.codeBlockContent {
position: relative;
direction: ltr;
+ max-width: 100%;
+ overflow-x: auto;
}
.codeBlockTitle {
@@ -30,6 +32,7 @@
margin: 0;
padding: 0;
border-radius: 0;
+ min-width: 100%;
}
.copyButton {
@@ -65,3 +68,9 @@
white-space: pre-wrap;
}
}
+
+@media (hover: none) {
+ .copyButton {
+ opacity: 1;
+ }
+}
diff --git a/blog/src/theme/NotFound/index.tsx
b/blog/src/theme/NotFound/index.tsx
index f8c6490bf6d..c8a513b32b1 100644
--- a/blog/src/theme/NotFound/index.tsx
+++ b/blog/src/theme/NotFound/index.tsx
@@ -2,6 +2,7 @@
import type { FC } from 'react';
import React from 'react';
import Layout from '@theme/Layout';
+import Head from '@docusaurus/Head';
import { translate } from '@docusaurus/Translate';
import Link from '@docusaurus/Link';
import style from './styles.module.scss';
@@ -14,6 +15,9 @@ const NotFound: FC = () => (
message: 'Page Not Found',
})}
>
+ <Head>
+ <meta name="robots" content="noindex,follow" />
+ </Head>
<main className={style.container}>
<section>
<Fitty tagName="h1" contentEditable>404</Fitty>
@@ -31,12 +35,16 @@ const NotFound: FC = () => (
.
</p>
<p>
- You can also return to
+ You can also open the
{' '}
- <Link href="/">
- the home page
- </Link>
- . Or, return to
+ <Link to="/">home page</Link>
+ ,
+ {' '}
+ <Link to="/docs/">documentation</Link>
+ ,
+ {' '}
+ <Link to="/blog/">blog</Link>
+ , or
{' '}
<a
role="button"
@@ -45,7 +53,7 @@ const NotFound: FC = () => (
window?.history.back();
}}
>
- the source page
+ return to the source page
</a>
.
</p>
diff --git a/blog/zh/docusaurus.config.js b/blog/zh/docusaurus.config.js
index 3af01760c79..23d6b7b915b 100644
--- a/blog/zh/docusaurus.config.js
+++ b/blog/zh/docusaurus.config.js
@@ -16,10 +16,18 @@ const metadatas = [
name: 'robots',
content: 'index,follow',
},
+ {
+ property: 'og:site_name',
+ content: 'Apache APISIX',
+ },
{
name: 'twitter:card',
content: 'summary_large_image',
},
+ {
+ name: 'twitter:site',
+ content: '@apacheapisix',
+ },
];
module.exports = {
diff --git a/config/ssrTemplate.js b/config/ssrTemplate.js
index 7edf02dd6eb..8bd22cd7d32 100644
--- a/config/ssrTemplate.js
+++ b/config/ssrTemplate.js
@@ -6,6 +6,11 @@ module.exports = {
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="ahrefs-site-verification"
content="c2f7370ecf46173f4fb25f114e74c97e0a2976d4f02f61c9b00a9d7d34e34698">
<meta name="generator" content="Docusaurus v<%= it.version %>">
+ <link rel="preconnect" href="https://static.apiseven.com" crossorigin>
+ <link rel="preconnect" href="https://apisix-website-static.apiseven.com"
crossorigin>
+ <link rel="preconnect" href="https://static.api7.ai" crossorigin>
+ <link rel="dns-prefetch" href="https://analytics.apache.org">
+ <link rel="dns-prefetch" href="https://widget.kapa.ai">
<% if (it.noIndex) { %>
<meta name="robots" content="noindex, nofollow" />
<% } %>
@@ -22,21 +27,29 @@ module.exports = {
<% }); %>
<!-- Matomo from the ASF -->
<script>
- var _paq = window._paq = window._paq || [];
- /* tracker methods like "setCustomDimension" should be called before
+ window._paq = window._paq || [];
+ function loadMatomo() {
+ var _paq = window._paq;
+ /* tracker methods like "setCustomDimension" should be called before
"trackPageView" */
- /* We explicitly disable cookie tracking to avoid privacy issues */
- _paq.push(['disableCookies']);
- _paq.push(['trackPageView']);
- _paq.push(['enableLinkTracking']);
- (function() {
- var u="https://analytics.apache.org/";
- _paq.push(['setTrackerUrl', u+'matomo.php']);
- _paq.push(['setSiteId', '17']);
- var d=document, g=d.createElement('script'),
- s=d.getElementsByTagName('script')[0];
- g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
- })();
+ /* We explicitly disable cookie tracking to avoid privacy issues */
+ _paq.push(['disableCookies']);
+ _paq.push(['trackPageView']);
+ _paq.push(['enableLinkTracking']);
+ (function() {
+ var u="https://analytics.apache.org/";
+ _paq.push(['setTrackerUrl', u+'matomo.php']);
+ _paq.push(['setSiteId', '17']);
+ var d=document, g=d.createElement('script'),
+ s=d.getElementsByTagName('script')[0];
+ g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+ })();
+ }
+ if ('requestIdleCallback' in window) {
+ window.requestIdleCallback(loadMatomo, { timeout: 3000 });
+ } else {
+ window.addEventListener('load', loadMatomo, { once: true });
+ }
</script>
<!-- End Matomo Code -->
</head>
diff --git a/doc/docusaurus.config.js b/doc/docusaurus.config.js
index 80324e4e15d..ef8c7e8d008 100644
--- a/doc/docusaurus.config.js
+++ b/doc/docusaurus.config.js
@@ -251,10 +251,18 @@ module.exports = {
name: 'robots',
content: 'index,follow',
},
+ {
+ property: 'og:site_name',
+ content: 'Apache APISIX',
+ },
{
name: 'twitter:card',
content: 'summary_large_image',
},
+ {
+ name: 'twitter:site',
+ content: '@apacheapisix',
+ },
],
},
scripts: [
diff --git a/doc/src/css/customTheme.scss b/doc/src/css/customTheme.scss
index 26ecfa5e636..dfa1d0d3df3 100644
--- a/doc/src/css/customTheme.scss
+++ b/doc/src/css/customTheme.scss
@@ -524,3 +524,58 @@ button[class*="announcementBarClose"] {
font-weight: 500;
}
}
+
+/* stylelint-disable no-descending-specificity */
+.markdown img,
+article img {
+ max-width: 100%;
+ height: auto;
+}
+
+.markdown table {
+ display: block;
+ max-width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+.markdown pre {
+ max-width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+h1,
+h2,
+h3,
+[id] {
+ scroll-margin-top: calc(var(--ifm-navbar-height) + 16px);
+}
+
+@media screen and (max-width: 996px) {
+ article {
+ font-size: 17px;
+ line-height: 1.75;
+ }
+
+ article p {
+ font-size: 17px;
+ line-height: 1.75;
+ }
+
+ article h1 {
+ font-size: 2.1rem;
+ line-height: 1.15;
+ }
+
+ article h2 {
+ font-size: 1.75rem;
+ line-height: 1.2;
+ }
+
+ article h3 {
+ font-size: 1.35rem;
+ line-height: 1.25;
+ }
+}
+/* stylelint-enable no-descending-specificity */
diff --git a/doc/src/pages/edit.tsx b/doc/src/pages/edit.tsx
index 2914c8291b4..c9a14bda71f 100644
--- a/doc/src/pages/edit.tsx
+++ b/doc/src/pages/edit.tsx
@@ -57,7 +57,7 @@ const Edit: FC = () => {
/>
<meta name="twitter:site" content="@apacheapisix" />
<meta
- name="og:description"
+ property="og:description"
content="Apache APISIX is a dynamic, real-time, high-performance
Cloud-Native API gateway, based on the Nginx library and etcd."
/>
</Head>
diff --git a/doc/src/theme/CodeBlock/styles.module.css
b/doc/src/theme/CodeBlock/styles.module.css
index 707a187e50e..9a9e1705c3b 100644
--- a/doc/src/theme/CodeBlock/styles.module.css
+++ b/doc/src/theme/CodeBlock/styles.module.css
@@ -17,6 +17,8 @@
.codeBlockContent {
position: relative;
direction: ltr;
+ max-width: 100%;
+ overflow-x: auto;
}
.codeBlockTitle {
@@ -30,6 +32,7 @@
margin: 0;
padding: 0;
border-radius: 0;
+ min-width: 100%;
}
.copyButton {
@@ -65,3 +68,9 @@
white-space: pre-wrap;
}
}
+
+@media (hover: none) {
+ .copyButton {
+ opacity: 1;
+ }
+}
diff --git a/doc/src/theme/NotFound/index.tsx b/doc/src/theme/NotFound/index.tsx
index f8c6490bf6d..c8a513b32b1 100644
--- a/doc/src/theme/NotFound/index.tsx
+++ b/doc/src/theme/NotFound/index.tsx
@@ -2,6 +2,7 @@
import type { FC } from 'react';
import React from 'react';
import Layout from '@theme/Layout';
+import Head from '@docusaurus/Head';
import { translate } from '@docusaurus/Translate';
import Link from '@docusaurus/Link';
import style from './styles.module.scss';
@@ -14,6 +15,9 @@ const NotFound: FC = () => (
message: 'Page Not Found',
})}
>
+ <Head>
+ <meta name="robots" content="noindex,follow" />
+ </Head>
<main className={style.container}>
<section>
<Fitty tagName="h1" contentEditable>404</Fitty>
@@ -31,12 +35,16 @@ const NotFound: FC = () => (
.
</p>
<p>
- You can also return to
+ You can also open the
{' '}
- <Link href="/">
- the home page
- </Link>
- . Or, return to
+ <Link to="/">home page</Link>
+ ,
+ {' '}
+ <Link to="/docs/">documentation</Link>
+ ,
+ {' '}
+ <Link to="/blog/">blog</Link>
+ , or
{' '}
<a
role="button"
@@ -45,7 +53,7 @@ const NotFound: FC = () => (
window?.history.back();
}}
>
- the source page
+ return to the source page
</a>
.
</p>
diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js
index f6211b8d4ef..0cb370dfac7 100644
--- a/website/docusaurus.config.js
+++ b/website/docusaurus.config.js
@@ -154,6 +154,10 @@ module.exports = {
name: 'robots',
content: 'index,follow',
},
+ {
+ property: 'og:site_name',
+ content: 'Apache APISIX',
+ },
{
name: 'twitter:card',
content: 'summary_large_image',
@@ -162,10 +166,6 @@ module.exports = {
name: 'twitter:site',
content: '@apacheapisix',
},
- {
- property: 'og:site_name',
- content: 'Apache APISIX',
- },
{
property: 'og:type',
content: 'website',
diff --git a/website/src/components/AIGateway/AvifImage.tsx
b/website/src/components/AIGateway/AvifImage.tsx
index b33560b8698..0af8199cb2d 100644
--- a/website/src/components/AIGateway/AvifImage.tsx
+++ b/website/src/components/AIGateway/AvifImage.tsx
@@ -3,15 +3,21 @@ import type { ImageProps } from '@chakra-ui/react';
import { Image } from '@chakra-ui/react';
const AvifImage: React.FC<ImageProps> = ({ src, alt, ...props }) => {
+ const imageProps = {
+ decoding: 'async',
+ loading: 'lazy',
+ ...props,
+ };
+
if (src?.toLowerCase().includes('.svg') || src?.includes('imageMogr2/')) {
- return <Image src={src} alt={alt} {...props} />;
+ return <Image src={src} alt={alt} {...imageProps} />;
}
return (
<picture>
<source srcSet={`${src}?imageMogr2/format/avif`} type="image/avif" />
<source srcSet={`${src}?imageMogr2/format/webp`} type="image/webp" />
- <Image src={src} alt={alt} {...props} />
+ <Image src={src} alt={alt} {...imageProps} />
</picture>
);
};
diff --git a/website/src/components/AIGateway/Hero.tsx
b/website/src/components/AIGateway/Hero.tsx
index 2da332e8cdd..ea52d9313bc 100644
--- a/website/src/components/AIGateway/Hero.tsx
+++ b/website/src/components/AIGateway/Hero.tsx
@@ -59,10 +59,11 @@ const Hero: React.FC = () => {
display="flex"
alignItems="center"
>
- <Box w="full">
+ <Box w="full" minH={{ base: '260px', md: '360px' }}>
<AvifImage
src="https://static.api7.ai/uploads/2025/04/17/zdPVQ1zg_apisix-ai-gateway.png"
alt="Apache APISIX AI Gateway architecture overview"
+ loading="eager"
animation={fadeInAnimation}
w="full"
transform="scale(1.1)"
diff --git a/website/src/components/HeroCanvas.tsx
b/website/src/components/HeroCanvas.tsx
index 32b13accfb8..fd93e4f6136 100644
--- a/website/src/components/HeroCanvas.tsx
+++ b/website/src/components/HeroCanvas.tsx
@@ -50,8 +50,6 @@ const HeroCanvas: FC = () => {
let camera; let mesh; let scene; let renderer; let material; let
geometry;
- window.addEventListener('resize', onWindowResize, false);
-
if (screenWidth > 1100) {
canvasHeight = screenHeight;
canvasWidth = screenWidth / 2;
@@ -63,7 +61,7 @@ const HeroCanvas: FC = () => {
canvasRef.current.width = canvasWidth;
canvasRef.current.height = canvasHeight;
- canvasRef.current.addEventListener('mousemove', (event) => {
+ const handleCanvasMouseMove = (event: MouseEvent) => {
const ctx = {
x: (event.clientX),
y: (event.clientY),
@@ -96,7 +94,10 @@ const HeroCanvas: FC = () => {
material.uniforms.u_fragMouse.value.y = fragMouse.y;
},
});
- });
+ };
+
+ window.addEventListener('resize', onWindowResize, false);
+ canvasRef.current.addEventListener('mousemove', handleCanvasMouseMove);
function getRandom(a, b) {
return a + (b - a) * Math.random();
@@ -114,8 +115,6 @@ const HeroCanvas: FC = () => {
if (entry.isIntersecting && isLoaded) {
if (isLoaded && !isRendering) {
animate();
- } else {
- console.log('Loading');
}
} else {
if (animationFrame) {
@@ -210,7 +209,7 @@ const HeroCanvas: FC = () => {
controls.update();
- renderer.setPixelRatio(window.devicePixelRatio);
+ renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 1.5));
onWindowResize();
isLoaded = true;
@@ -249,6 +248,8 @@ const HeroCanvas: FC = () => {
}
return () => {
+ window.removeEventListener('resize', onWindowResize, false);
+ canvasRef.current?.removeEventListener('mousemove',
handleCanvasMouseMove);
// eslint-disable-next-line prefer-spread
scene.remove.apply(scene, scene.children);
canvasObserver.disconnect();
diff --git a/website/src/css/customTheme.scss b/website/src/css/customTheme.scss
index 9d1950e8f7a..e12aff151cb 100644
--- a/website/src/css/customTheme.scss
+++ b/website/src/css/customTheme.scss
@@ -530,3 +530,58 @@ button[class*="announcementBarClose"] {
font-weight: 500;
}
}
+
+/* stylelint-disable no-descending-specificity */
+.markdown img,
+article img {
+ max-width: 100%;
+ height: auto;
+}
+
+.markdown table {
+ display: block;
+ max-width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+.markdown pre {
+ max-width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+h1,
+h2,
+h3,
+[id] {
+ scroll-margin-top: calc(var(--ifm-navbar-height) + 16px);
+}
+
+@media screen and (max-width: 996px) {
+ article {
+ font-size: 17px;
+ line-height: 1.75;
+ }
+
+ article p {
+ font-size: 17px;
+ line-height: 1.75;
+ }
+
+ article h1 {
+ font-size: 2.1rem;
+ line-height: 1.15;
+ }
+
+ article h2 {
+ font-size: 1.75rem;
+ line-height: 1.2;
+ }
+
+ article h3 {
+ font-size: 1.35rem;
+ line-height: 1.25;
+ }
+}
+/* stylelint-enable no-descending-specificity */
diff --git a/website/src/css/landing-sections/hero.scss
b/website/src/css/landing-sections/hero.scss
index ac00c56029e..61bdaa5005f 100644
--- a/website/src/css/landing-sections/hero.scss
+++ b/website/src/css/landing-sections/hero.scss
@@ -37,7 +37,7 @@
.hero-ctas {
display: flex;
align-items: center;
- animation-delay: 0.5;
+ animation-delay: 0.5s;
}
.hero-sec-wrap {
@@ -158,3 +158,50 @@
width: 40vw;
}
}
+
+@media (max-width: 996px) {
+ .hero-title,
+ .hero-subtitle,
+ .hero-ctas {
+ animation: none;
+ }
+
+ .hero-sec-wrap {
+ min-height: calc(100svh - var(--ifm-navbar-height));
+ height: auto;
+ padding: 72px 0 48px;
+ }
+
+ .hero-text {
+ width: 100%;
+ padding: 0 24px;
+ align-content: center;
+ }
+
+ .hero-title {
+ width: 100%;
+ max-width: 680px;
+ font-size: clamp(2.4rem, 12vw, 4.2rem);
+ line-height: 1.05;
+ }
+
+ .hero-subtitle {
+ width: 100%;
+ max-width: 680px;
+ padding-right: 0;
+ margin: 18px 0;
+ }
+
+ .hero-ctas {
+ flex-wrap: wrap;
+ gap: 12px;
+ }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .hero-title,
+ .hero-subtitle,
+ .hero-ctas {
+ animation: none;
+ }
+}
diff --git a/website/src/pages/ai-gateway.tsx b/website/src/pages/ai-gateway.tsx
index eb3e6d056d3..bed576b649b 100644
--- a/website/src/pages/ai-gateway.tsx
+++ b/website/src/pages/ai-gateway.tsx
@@ -30,7 +30,12 @@ const ChakraTestPage: React.FC = () => (
property="og:description"
content="An AI gateway manages traffic between applications and LLM
providers. Apache APISIX AI Gateway provides LLM load balancing, token rate
limiting, MCP support, and security for AI agents."
/>
+ <meta
+ property="og:image"
+
content="https://static.api7.ai/uploads/2025/04/17/zdPVQ1zg_apisix-ai-gateway.png"
+ />
+ <meta name="twitter:card" content="summary_large_image" />
<meta
name="twitter:title"
content="What is an AI Gateway? APISIX AI Gateway for LLMs & AI
Agents"
@@ -39,6 +44,10 @@ const ChakraTestPage: React.FC = () => (
name="twitter:description"
content="An AI gateway manages traffic between applications and LLM
providers. Apache APISIX AI Gateway provides LLM load balancing, token rate
limiting, MCP support, and security for AI agents."
/>
+ <meta
+ name="twitter:image"
+
content="https://static.api7.ai/uploads/2025/04/17/zdPVQ1zg_apisix-ai-gateway.png"
+ />
<script type="application/ld+json">
{JSON.stringify({
diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx
index 2b6e6318c42..97212bb9bdd 100644
--- a/website/src/pages/index.tsx
+++ b/website/src/pages/index.tsx
@@ -49,6 +49,10 @@ const Index: FC = () => (
<Head>
<title>{translate({ id: 'homepage.meta.title', message: 'Apache APISIX -
Open Source API Gateway & AI Gateway' })}</title>
<link rel="canonical" href="https://apisix.apache.org/" />
+ <meta
+ name="description"
+ content="Apache APISIX is a dynamic, high-performance, open-source API
gateway and AI gateway. Features include load balancing, authentication, rate
limiting, AI proxying, LLM load balancing, and 100+ plugins."
+ />
<meta
property="og:title"
content="Apache APISIX - Open Source API Gateway & AI Gateway"
diff --git a/website/src/theme/NotFound/index.tsx
b/website/src/theme/NotFound/index.tsx
index f8c6490bf6d..c8a513b32b1 100644
--- a/website/src/theme/NotFound/index.tsx
+++ b/website/src/theme/NotFound/index.tsx
@@ -2,6 +2,7 @@
import type { FC } from 'react';
import React from 'react';
import Layout from '@theme/Layout';
+import Head from '@docusaurus/Head';
import { translate } from '@docusaurus/Translate';
import Link from '@docusaurus/Link';
import style from './styles.module.scss';
@@ -14,6 +15,9 @@ const NotFound: FC = () => (
message: 'Page Not Found',
})}
>
+ <Head>
+ <meta name="robots" content="noindex,follow" />
+ </Head>
<main className={style.container}>
<section>
<Fitty tagName="h1" contentEditable>404</Fitty>
@@ -31,12 +35,16 @@ const NotFound: FC = () => (
.
</p>
<p>
- You can also return to
+ You can also open the
{' '}
- <Link href="/">
- the home page
- </Link>
- . Or, return to
+ <Link to="/">home page</Link>
+ ,
+ {' '}
+ <Link to="/docs/">documentation</Link>
+ ,
+ {' '}
+ <Link to="/blog/">blog</Link>
+ , or
{' '}
<a
role="button"
@@ -45,7 +53,7 @@ const NotFound: FC = () => (
window?.history.back();
}}
>
- the source page
+ return to the source page
</a>
.
</p>
diff --git a/website/static/robots.txt b/website/static/robots.txt
index 2f71ab386d7..bb355ad7d64 100644
--- a/website/static/robots.txt
+++ b/website/static/robots.txt
@@ -18,6 +18,7 @@ Disallow: /docs/apisix/3.12/
Disallow: /docs/apisix/3.13/
Disallow: /docs/apisix/3.14/
Disallow: /docs/apisix/3.15/
+Disallow: /docs/apisix/3.16/
Disallow: /docs/apisix/next/
Disallow: /docs/ingress-controller/3.10/
Disallow: /docs/ingress-controller/3.11/
@@ -25,6 +26,7 @@ Disallow: /docs/ingress-controller/3.12/
Disallow: /docs/ingress-controller/3.13/
Disallow: /docs/ingress-controller/3.14/
Disallow: /docs/ingress-controller/3.15/
+Disallow: /docs/ingress-controller/3.16/
Disallow: /docs/ingress-controller/next/
Disallow: /docs/helm-chart/3.10/
Disallow: /docs/helm-chart/3.11/
@@ -32,6 +34,7 @@ Disallow: /docs/helm-chart/3.12/
Disallow: /docs/helm-chart/3.13/
Disallow: /docs/helm-chart/3.14/
Disallow: /docs/helm-chart/3.15/
+Disallow: /docs/helm-chart/3.16/
Disallow: /docs/helm-chart/next/
Disallow: /docs/docker/3.10/
Disallow: /docs/docker/3.11/
@@ -39,6 +42,7 @@ Disallow: /docs/docker/3.12/
Disallow: /docs/docker/3.13/
Disallow: /docs/docker/3.14/
Disallow: /docs/docker/3.15/
+Disallow: /docs/docker/3.16/
Disallow: /docs/docker/next/
Disallow: /docs/java-plugin-runner/3.10/
Disallow: /docs/java-plugin-runner/3.11/
@@ -46,6 +50,7 @@ Disallow: /docs/java-plugin-runner/3.12/
Disallow: /docs/java-plugin-runner/3.13/
Disallow: /docs/java-plugin-runner/3.14/
Disallow: /docs/java-plugin-runner/3.15/
+Disallow: /docs/java-plugin-runner/3.16/
Disallow: /docs/java-plugin-runner/next/
Disallow: /docs/go-plugin-runner/3.10/
Disallow: /docs/go-plugin-runner/3.11/
@@ -53,6 +58,7 @@ Disallow: /docs/go-plugin-runner/3.12/
Disallow: /docs/go-plugin-runner/3.13/
Disallow: /docs/go-plugin-runner/3.14/
Disallow: /docs/go-plugin-runner/3.15/
+Disallow: /docs/go-plugin-runner/3.16/
Disallow: /docs/go-plugin-runner/next/
Disallow: /docs/python-plugin-runner/3.10/
Disallow: /docs/python-plugin-runner/3.11/
@@ -60,6 +66,7 @@ Disallow: /docs/python-plugin-runner/3.12/
Disallow: /docs/python-plugin-runner/3.13/
Disallow: /docs/python-plugin-runner/3.14/
Disallow: /docs/python-plugin-runner/3.15/
+Disallow: /docs/python-plugin-runner/3.16/
Disallow: /docs/python-plugin-runner/next/
# Chinese equivalents
@@ -69,6 +76,7 @@ Disallow: /zh/docs/apisix/3.12/
Disallow: /zh/docs/apisix/3.13/
Disallow: /zh/docs/apisix/3.14/
Disallow: /zh/docs/apisix/3.15/
+Disallow: /zh/docs/apisix/3.16/
Disallow: /zh/docs/apisix/next/
Disallow: /zh/docs/ingress-controller/3.10/
Disallow: /zh/docs/ingress-controller/3.11/
@@ -76,6 +84,7 @@ Disallow: /zh/docs/ingress-controller/3.12/
Disallow: /zh/docs/ingress-controller/3.13/
Disallow: /zh/docs/ingress-controller/3.14/
Disallow: /zh/docs/ingress-controller/3.15/
+Disallow: /zh/docs/ingress-controller/3.16/
Disallow: /zh/docs/ingress-controller/next/
Disallow: /zh/docs/helm-chart/3.10/
Disallow: /zh/docs/helm-chart/3.11/
@@ -83,6 +92,7 @@ Disallow: /zh/docs/helm-chart/3.12/
Disallow: /zh/docs/helm-chart/3.13/
Disallow: /zh/docs/helm-chart/3.14/
Disallow: /zh/docs/helm-chart/3.15/
+Disallow: /zh/docs/helm-chart/3.16/
Disallow: /zh/docs/helm-chart/next/
Disallow: /zh/docs/docker/3.10/
Disallow: /zh/docs/docker/3.11/
@@ -90,6 +100,7 @@ Disallow: /zh/docs/docker/3.12/
Disallow: /zh/docs/docker/3.13/
Disallow: /zh/docs/docker/3.14/
Disallow: /zh/docs/docker/3.15/
+Disallow: /zh/docs/docker/3.16/
Disallow: /zh/docs/docker/next/
Disallow: /zh/docs/java-plugin-runner/3.10/
Disallow: /zh/docs/java-plugin-runner/3.11/
@@ -97,6 +108,7 @@ Disallow: /zh/docs/java-plugin-runner/3.12/
Disallow: /zh/docs/java-plugin-runner/3.13/
Disallow: /zh/docs/java-plugin-runner/3.14/
Disallow: /zh/docs/java-plugin-runner/3.15/
+Disallow: /zh/docs/java-plugin-runner/3.16/
Disallow: /zh/docs/java-plugin-runner/next/
Disallow: /zh/docs/go-plugin-runner/3.10/
Disallow: /zh/docs/go-plugin-runner/3.11/
@@ -104,6 +116,7 @@ Disallow: /zh/docs/go-plugin-runner/3.12/
Disallow: /zh/docs/go-plugin-runner/3.13/
Disallow: /zh/docs/go-plugin-runner/3.14/
Disallow: /zh/docs/go-plugin-runner/3.15/
+Disallow: /zh/docs/go-plugin-runner/3.16/
Disallow: /zh/docs/go-plugin-runner/next/
Disallow: /zh/docs/python-plugin-runner/3.10/
Disallow: /zh/docs/python-plugin-runner/3.11/
@@ -111,6 +124,7 @@ Disallow: /zh/docs/python-plugin-runner/3.12/
Disallow: /zh/docs/python-plugin-runner/3.13/
Disallow: /zh/docs/python-plugin-runner/3.14/
Disallow: /zh/docs/python-plugin-runner/3.15/
+Disallow: /zh/docs/python-plugin-runner/3.16/
Disallow: /zh/docs/python-plugin-runner/next/
Sitemap: https://apisix.apache.org/sitemap.xml