feat(landing-page): move Mistral Vibe CLI off the vibe-design slug and 301 it to the vibe-design guide (#5209)

The Mistral Vibe CLI agent page was auto-generated at /agents/vibe-design/ as
part of the 21-agent set (its product name is "Vibe"). That exact-match URL
squatted the informational "vibe design" concept query: GSC shows it holding
7,353 impressions at pos ~9 with 0.3% CTR because searchers see a "Mistral Vibe
CLI" title that doesn't answer "what is vibe design", while the page that does —
/blog/what-is-vibe-design/ — is suppressed by the sibling URL.

Rename the Mistral agent route to /agents/vibe-cli-design/ (it keeps the same
agentGuides['vibe'] content) and 301 the old /agents/vibe-design/ URL, across all
landing locales, to /blog/what-is-vibe-design/ so the "vibe design" authority and
intent consolidate on the guide that actually answers the query. Updates the
agents hub route map and the Agent nav dropdown to the new route.

Co-authored-by: Joey <276262049+xne998808-ai@users.noreply.github.com>
This commit is contained in:
xne998808-ai
2026-07-06 08:54:34 +00:00
committed by GitHub
co-authored by Joey
parent 5292e1fdbe
commit bf7a5dbb8e
5 changed files with 52 additions and 7 deletions
+1 -1
View File
@@ -94,7 +94,7 @@ const AGENTS: ReadonlyArray<{ name: string; route: string }> = [
{ name: 'Pi', route: 'pi-design' },
{ name: 'Kiro CLI', route: 'kiro-design' },
{ name: 'Kilo', route: 'kilo-design' },
{ name: 'Mistral Vibe CLI', route: 'vibe-design' },
{ name: 'Mistral Vibe CLI', route: 'vibe-cli-design' },
{ name: 'Qoder CLI', route: 'qoder-design' },
];
@@ -1,5 +1,5 @@
---
import AgentDetailPage from '../../../agents/vibe-design/index.astro';
import AgentDetailPage from '../../../agents/vibe-cli-design/index.astro';
import { DEFAULT_LOCALE, LANDING_LOCALES } from '../../../../i18n';
export function getStaticPaths() {
@@ -100,7 +100,7 @@ const DETAIL_ROUTES: Record<string, string> = {
pi: 'pi-design',
kiro: 'kiro-design',
kilo: 'kilo-design',
vibe: 'vibe-design',
vibe: 'vibe-cli-design',
qoder: 'qoder-design',
};
@@ -1,9 +1,12 @@
---
/*
* /agents/vibe-design/ — agent detail page (industrial long-form).
* /agents/vibe-cli-design/ — Mistral Vibe CLI agent detail page (long-form).
*
* Captures "vibe design" intent and drives to Open Design. Renders the
* rich how-to layout from copy.agentGuides['vibe'].rich. Linked from /agents/.
* This is the Mistral Vibe CLI agent guide. It lives at /agents/vibe-cli-design/
* (not /agents/vibe-design/) so it does not squat the informational "vibe design"
* concept query — that intent is served by /blog/what-is-vibe-design/, which the
* old /agents/vibe-design/ URL now 301-redirects to (see public/_redirects).
* Renders the rich how-to layout from copy.agentGuides['vibe'].rich. Linked from /agents/.
* Never fabricate URLs or facts here.
*/
import Layout from '../../../_components/sub-page-layout.astro';
@@ -11,7 +14,7 @@ import { getInfoPageCopy } from '../../../info-page-i18n';
import { localeFromPath, localizedHref } from '../../../i18n';
const SLUG = 'vibe';
const ROUTE = 'vibe-design';
const ROUTE = 'vibe-cli-design';
const SITE = Astro.site?.toString() ?? 'https://open-design.ai/';
const REPO = 'https://github.com/nexu-io/open-design';
const REPO_RELEASES = `${REPO}/releases`;
+42
View File
@@ -206,3 +206,45 @@
/:loc/skills/* /:loc/plugins/skills/ 301
/:loc/systems/* /:loc/plugins/systems/ 301
/:loc/templates/* /:loc/plugins/templates/ 301
# Mistral Vibe CLI moved from /agents/vibe-design/ to /agents/vibe-cli-design/ so the
# exact-match 'vibe design' concept URL serves the informational blog instead of a
# product page. 301 the old agent URL (all locales) to the what-is-vibe-design guide.
/agents/vibe-design/ /blog/what-is-vibe-design/ 301
/agents/vibe-design /blog/what-is-vibe-design/ 301
/en/agents/vibe-design/ /en/blog/what-is-vibe-design/ 301
/en/agents/vibe-design /en/blog/what-is-vibe-design/ 301
/zh/agents/vibe-design/ /zh/blog/what-is-vibe-design/ 301
/zh/agents/vibe-design /zh/blog/what-is-vibe-design/ 301
/zh-tw/agents/vibe-design/ /zh-tw/blog/what-is-vibe-design/ 301
/zh-tw/agents/vibe-design /zh-tw/blog/what-is-vibe-design/ 301
/ja/agents/vibe-design/ /ja/blog/what-is-vibe-design/ 301
/ja/agents/vibe-design /ja/blog/what-is-vibe-design/ 301
/ko/agents/vibe-design/ /ko/blog/what-is-vibe-design/ 301
/ko/agents/vibe-design /ko/blog/what-is-vibe-design/ 301
/de/agents/vibe-design/ /de/blog/what-is-vibe-design/ 301
/de/agents/vibe-design /de/blog/what-is-vibe-design/ 301
/fr/agents/vibe-design/ /fr/blog/what-is-vibe-design/ 301
/fr/agents/vibe-design /fr/blog/what-is-vibe-design/ 301
/ru/agents/vibe-design/ /ru/blog/what-is-vibe-design/ 301
/ru/agents/vibe-design /ru/blog/what-is-vibe-design/ 301
/es/agents/vibe-design/ /es/blog/what-is-vibe-design/ 301
/es/agents/vibe-design /es/blog/what-is-vibe-design/ 301
/pt-br/agents/vibe-design/ /pt-br/blog/what-is-vibe-design/ 301
/pt-br/agents/vibe-design /pt-br/blog/what-is-vibe-design/ 301
/it/agents/vibe-design/ /it/blog/what-is-vibe-design/ 301
/it/agents/vibe-design /it/blog/what-is-vibe-design/ 301
/vi/agents/vibe-design/ /vi/blog/what-is-vibe-design/ 301
/vi/agents/vibe-design /vi/blog/what-is-vibe-design/ 301
/pl/agents/vibe-design/ /pl/blog/what-is-vibe-design/ 301
/pl/agents/vibe-design /pl/blog/what-is-vibe-design/ 301
/id/agents/vibe-design/ /id/blog/what-is-vibe-design/ 301
/id/agents/vibe-design /id/blog/what-is-vibe-design/ 301
/nl/agents/vibe-design/ /nl/blog/what-is-vibe-design/ 301
/nl/agents/vibe-design /nl/blog/what-is-vibe-design/ 301
/ar/agents/vibe-design/ /ar/blog/what-is-vibe-design/ 301
/ar/agents/vibe-design /ar/blog/what-is-vibe-design/ 301
/tr/agents/vibe-design/ /tr/blog/what-is-vibe-design/ 301
/tr/agents/vibe-design /tr/blog/what-is-vibe-design/ 301
/uk/agents/vibe-design/ /uk/blog/what-is-vibe-design/ 301
/uk/agents/vibe-design /uk/blog/what-is-vibe-design/ 301