Vercel
Zwei Wege, Ihre Jamdesk-Dokumentation unter /docs auf Ihrer Vercel-Domain auszuliefern: vercel.json-Rewrites oder Edge Middleware.
Liefern Sie Ihre Jamdesk-Dokumentation unter /docs auf Ihrer Vercel-Domain aus. Wählen Sie eine von zwei Einrichtungen. Beide führen zum gleichen Ergebnis.
- Option A: vercel.json-Rewrites: ohne Code, für jedes Framework. Starten Sie hier.
- Option B: Edge Middleware: für Websites, die bereits Edge Middleware nutzen und Jamdesk in derselben Datei haben möchten.
Voraussetzungen
- Ein auf Vercel bereitgestelltes Projekt
- Ihre Jamdesk-Subdomain (in den Dashboard-Einstellungen zu finden), mit aktivierter Option Auf Unterpfad hosten
- Ihre eigene Domain, registriert und verifiziert im Dashboard
Option A: vercel.json-Rewrites
Verwenden Sie einen eigenen Unterpfad statt des Standards /docs? Ersetzen Sie in den folgenden Snippets jedes /docs durch Ihren Unterpfad, sowohl im source als auch im destination jeder Regel. Stellen Sie nach dem Umbenennen des Unterpfads im Dashboard neu bereit. Diese Datei wird nicht automatisch für Sie neu erzeugt.
Ein Rewrite kann ändern, wohin eine Anfrage geht. Er kann jedoch keinen Request-Header hinzufügen. Stattdessen trägt jedes Ziel eine öffentliche Markierung, ?jd_proxy=1. Die Markierung teilt Jamdesk mit, dass die Anfrage über Ihren Proxy kam. Jamdesk entfernt sie vor dem Rendern. Ihre Besucher sehen sie nie.
Erstellen oder bearbeiten Sie vercel.json im Stammverzeichnis Ihres Projekts und ersetzen Sie YOUR_SLUG durch Ihre Jamdesk-Subdomain:
{
"rewrites": [
{ "source": "/docs", "destination": "https://YOUR_SLUG.jamdesk.app/docs?jd_proxy=1" },
{ "source": "/docs/:path*", "destination": "https://YOUR_SLUG.jamdesk.app/docs/:path*?jd_proxy=1" },
{ "source": "/_next/:path*", "destination": "https://YOUR_SLUG.jamdesk.app/_next/:path*" },
{ "source": "/_jd/:path*", "destination": "https://YOUR_SLUG.jamdesk.app/_jd/:path*?jd_proxy=1" }
]
}/_next/:path* benötigt keine Markierung. Es ist ein statischer Asset-Pfad, den Jamdesk nie einschränkt. Eine Website, die keine Next.js-App ist, hat keine eigenen /_next/-Dateien. Jede Anfrage unter diesem Pfad fällt an Jamdesk.
Dieselben vier Regeln funktionieren in Next.js-Projekten auch in next.config.js:
/** @type {import('next').NextConfig} */
const nextConfig = {
async rewrites() {
return [
{ source: "/docs", destination: "https://YOUR_SLUG.jamdesk.app/docs?jd_proxy=1" },
{ source: "/docs/:path*", destination: "https://YOUR_SLUG.jamdesk.app/docs/:path*?jd_proxy=1" },
{ source: "/_next/:path*", destination: "https://YOUR_SLUG.jamdesk.app/_next/:path*" },
{ source: "/_jd/:path*", destination: "https://YOUR_SLUG.jamdesk.app/_jd/:path*?jd_proxy=1" },
];
},
};
export default nextConfig;Leiten Sie auch Ihre Dateien im Stammverzeichnis weiter
robots.txt, sitemap.xml, llms.txt und llms-full.txt liegen im Domain-Root, außerhalb von /docs. Suchmaschinen und KI-Agenten benötigen sie, um Ihre Dokumentation zu finden. Wenn Jamdesk den Domain-Root Ihrer Domain besitzt, fügen Sie vier weitere Regeln hinzu:
{
"rewrites": [
{ "source": "/robots.txt", "destination": "https://YOUR_SLUG.jamdesk.app/robots.txt?jd_proxy=1" },
{ "source": "/sitemap.xml", "destination": "https://YOUR_SLUG.jamdesk.app/sitemap.xml?jd_proxy=1" },
{ "source": "/llms.txt", "destination": "https://YOUR_SLUG.jamdesk.app/llms.txt?jd_proxy=1" },
{ "source": "/llms-full.txt", "destination": "https://YOUR_SLUG.jamdesk.app/llms-full.txt?jd_proxy=1" }
]
}Wenn Ihre Marketing-Website bereits eigene robots.txt- oder sitemap.xml-Dateien im Root ausliefert, führen Sie beide zusammen, statt die eine mit der anderen zu überschreiben.
Bereitstellen und überprüfen
Stellen Sie mit vercel --prod bereit (oder pushen Sie in Ihr verbundenes Git-Repository). Öffnen Sie https://yoursite.com/docs und zeigen Sie den Seitenquelltext an. Prüfen Sie zwei Dinge:
<link rel="canonical">verweist auf Ihre Domain, nicht aufYOUR_SLUG.jamdesk.app- Es gibt kein
<meta name="robots" content="noindex">
Ist eines davon falsch, fehlt einem Rewrite seine Markierung ?jd_proxy=1. Siehe Warum die Markierung wichtig ist.
Option B: Edge Middleware
Setzen Sie den Request-Header X-Jamdesk-Forwarded-Host in Ihrer Edge Middleware, anstatt die Markierung zu verwenden. Beide Signale sind gleichwertig. Wählen Sie diese Option, wenn Sie die Routing-Logik im Code behalten möchten, den Sie ohnehin pflegen.
Erstellen Sie eine Datei middleware.ts im Stammverzeichnis Ihres Projekts. Ersetzen Sie YOUR_SLUG durch Ihre Jamdesk-Subdomain:
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
const JAMDESK_HOST = 'YOUR_SLUG.jamdesk.app';
export function middleware(request: NextRequest) {
const url = request.nextUrl;
const destination = new URL(url.pathname + url.search, `https://${JAMDESK_HOST}`);
// Clone headers and tell Jamdesk which domain the visitor actually used.
const headers = new Headers(request.headers);
headers.set('X-Jamdesk-Forwarded-Host', url.hostname);
return NextResponse.rewrite(destination, {
request: { headers },
});
}
export const config = {
matcher: ['/docs', '/docs/:path*', '/_jd/:path*'],
};Bei einem eigenen Unterpfad ersetzen Sie im obigen Matcher /docs und /docs/:path* durch Ihren konfigurierten Unterpfad.
Fügen Sie /_next/:path* nicht zum Matcher hinzu. Middleware läuft vor der Dateisystemprüfung von Vercel. Ein Treffer auf /_next/ sendet das JavaScript und CSS Ihrer eigenen Website an Jamdesk und zerstört Ihre Styles. Der nächste Schritt leitet /_next/ auf die sichere Weise weiter.
Benennen Sie die Datei middleware.ts und exportieren Sie eine Funktion namens middleware. Next.js 16 schlägt vor, sie in proxy.ts umzubenennen. Die Produktion von Vercel ruft proxy.ts noch nicht auf. Die Umbenennung deaktiviert sie stillschweigend.
Assets und Dateien im Stammverzeichnis in vercel.json weiterleiten
Die Seiten von Jamdesk laden ihre Bundles aus /_next/. Root-Dateien wie robots.txt liegen außerhalb des obigen Matchers. Leiten Sie beides mit Rewrites weiter. Rewrites laufen nach der Dateisystemprüfung. Ihr eigenes Build-Output hat Vorrang, und nur Anfragen, die Ihre Website nicht ausliefern kann, fallen an Jamdesk:
{
"rewrites": [
{ "source": "/_next/:path*", "destination": "https://YOUR_SLUG.jamdesk.app/_next/:path*" },
{ "source": "/robots.txt", "destination": "https://YOUR_SLUG.jamdesk.app/robots.txt?jd_proxy=1" },
{ "source": "/sitemap.xml", "destination": "https://YOUR_SLUG.jamdesk.app/sitemap.xml?jd_proxy=1" },
{ "source": "/llms.txt", "destination": "https://YOUR_SLUG.jamdesk.app/llms.txt?jd_proxy=1" },
{ "source": "/llms-full.txt", "destination": "https://YOUR_SLUG.jamdesk.app/llms-full.txt?jd_proxy=1" }
]
}Die Root-Dateien tragen ?jd_proxy=1. Die Middleware läuft bei ihnen nicht, und ein Rewrite kann den Header nicht setzen. Fügen Sie sie nur hinzu, wenn Jamdesk den Domain-Root Ihrer Domain besitzt. Wenn Ihre Website eigene robots.txt- oder sitemap.xml-Dateien ausliefert, führen Sie stattdessen zusammen.
Bereitstellen und überprüfen
Stellen Sie mit vercel --prod bereit (oder pushen Sie in Ihr verbundenes Git-Repository). Öffnen Sie https://yoursite.com/docs und zeigen Sie den Seitenquelltext an. Prüfen Sie zwei Dinge:
<link rel="canonical">verweist auf Ihre Domain, nicht aufYOUR_SLUG.jamdesk.app- Es gibt kein
<meta name="robots" content="noindex">
Ist eines davon falsch, erreicht der Header X-Jamdesk-Forwarded-Host Jamdesk nicht. Bestätigen Sie, dass /docs im Matcher steht.
Warum der Marker wichtig ist
Jamdesk benötigt ein Signal, dass eine Anfrage über Ihren Proxy kam und nicht als direkter Aufruf Ihrer *.jamdesk.app-Subdomain. Die Markierung ?jd_proxy=1 und der Header X-Jamdesk-Forwarded-Host tragen dieses Signal. Jamdesk behandelt beide als gleichwertig. Jedes der beiden erfüllt drei Aufgaben:
- Bestätigt Ihre registrierte Domain
- Richtet Canonical-, Open-Graph- und Sitemap-Links auf sie aus
- Ermöglicht es Nur eigene Domain, Proxy-Traffic von direkten Aufrufen zu unterscheiden
Ein fehlendes Signal schlägt stillschweigend fehl. Die Seiten werden trotzdem gerendert. Ohne registrierte eigene Domain tragen sie noindex und Subdomain-Canonicals. Mit registrierter eigener Domain schlägt die Prüfung „Nur eigene Domain“ fehl. Ein 403 bedeutet, dass das Signal vorhanden ist, aber eine Domain nennt, die für dieses Projekt nicht registriert und aktiv ist.
Fehlerbehebung
Ihr Matcher enthält wahrscheinlich /_next/:path*. Middleware läuft vor der Dateisystemprüfung. Sie leitet die Assets Ihrer eigenen Anwendung an Jamdesk weiter. Entfernen Sie /_next/ aus dem Matcher und leiten Sie es stattdessen über vercel.json weiter. Siehe Option B.
Zeigen Sie den Seitenquelltext unter https://yoursite.com/docs an. Ein Tag <meta name="robots" content="noindex"> bedeutet, dass weder die Markierung noch der Header Jamdesk erreicht. Bei Option A prüfen Sie, dass jedes Rewrite-Ziel mit ?jd_proxy=1 endet (außer /_next/:path*). Bei Option B prüfen Sie, dass /docs im Middleware-Matcher steht. Ein vercel.json-Rewrite allein kann den Header nicht setzen.
Die Markierung oder der Header erreicht Jamdesk, nennt aber eine Domain, die Jamdesk für dieses Projekt nicht ausliefert:
- Prüfen Sie, ob Ihre Domain im Jamdesk-Dashboard registriert ist
- Schließen Sie die DNS-Verifizierung ab (TXT-Eintrag)
- Prüfen Sie, ob die Domain dem richtigen Projekt zugeordnet und als aktiv markiert ist
- Bei Option B prüfen Sie, ob die Middleware den Header auf Ihre für Besucher sichtbare Domain setzt, nicht auf eine Preview-URL
Prüfen Sie, ob Ihre Rewrites (oder der Matcher) /docs und /docs/:path* abdecken. Ohne den Platzhalter schlagen verschachtelte Seiten fehl.
Leiten Sie /_jd/:path* und /_next/:path* weiter. /_jd/ liefert Jamdesk-Schriften, Bilder und Branding. /_next/ liefert die Dokumentations-Bundles. Fehlt eines davon, bricht das Layout.
Prüfen Sie, dass die Datei im Stammverzeichnis Ihres Projekts middleware.ts heißt (nicht proxy.ts) und eine Funktion namens middleware exportiert. Die Deprecation-Warnung von Next.js 16 empfiehlt proxy.ts. Die Produktion von Vercel ruft sie nicht auf.
Prüfen Sie, dass die Ziel-URL https:// verwendet und auf jamdesk.app zeigt, nicht zurück auf Ihre eigene Domain.
Die Prüfung ruft /_jd/preflight auf Ihrer Live-Domain ab und untersucht, was Jamdesk erreicht hat. „Identifiziert sich nicht“ bedeutet, dass ein Rewrite Jamdesk ohne die Markierung oder den Header erreicht hat. Prüfen Sie jedes Rewrite-Ziel (Option A) bzw. Ihre Middleware-Header (Option B) erneut. Siehe Nur eigene Domain.
