diff --git a/client/dist/image.png b/client/dist/image.png new file mode 100644 index 0000000..3ff2d77 Binary files /dev/null and b/client/dist/image.png differ diff --git a/client/dist/smileys.png b/client/dist/smileys.png new file mode 100644 index 0000000..5beb9cd Binary files /dev/null and b/client/dist/smileys.png differ diff --git a/server/routes-seo.js b/server/routes-seo.js index 6eeb85d..6ae0fbc 100644 --- a/server/routes-seo.js +++ b/server/routes-seo.js @@ -1,4 +1,4 @@ -import { readFileSync } from 'fs'; +import { readFileSync, existsSync } from 'fs'; import { join } from 'path'; // SEO-Meta-Daten für verschiedene Routen @@ -26,43 +26,62 @@ const seoData = { }; // HTML-Template für Pre-Rendering -function generateHTML(route, meta) { - const baseHTML = ` - - - - +function generateHTML(route, meta, __dirname) { + // Versuche, die gebaute index.html zu lesen + const distIndexPath = join(__dirname, '../docroot/dist/index.html'); + let baseHTML; - - ${meta.title} - - - - - + if (existsSync(distIndexPath)) { + // Verwende die gebaute index.html (mit korrekten Asset-Pfaden von Vite) + baseHTML = readFileSync(distIndexPath, 'utf-8'); + + // Ersetze Meta-Tags in der gebauten HTML + baseHTML = baseHTML.replace(/.*?<\/title>/, `<title>${meta.title}`); + + // Ersetze oder füge description hinzu + if (baseHTML.includes(']*>/, ``); + } else { + baseHTML = baseHTML.replace('', ` \n`); + } + + // Ersetze oder füge keywords hinzu + if (baseHTML.includes(']*>/, ``); + } else { + baseHTML = baseHTML.replace('', ` \n`); + } + + // Ersetze oder füge Open Graph Tags hinzu + const ogTags = ` - - - - - - - - - - -
- - -`; + `; + + // Entferne alte OG/Twitter/Canonical Tags falls vorhanden + baseHTML = baseHTML.replace(/]*>/g, ''); + baseHTML = baseHTML.replace(/]*>/g, ''); + + // Füge neue Tags vor ein + baseHTML = baseHTML.replace('', `${ogTags}\n`); + + // Füge robots meta hinzu falls nicht vorhanden + if (!baseHTML.includes('', ` \n`); + } + } else { + // Fallback: Gebaute index.html nicht gefunden - verwende SPA-Fallback + console.error('WARNUNG: Gebaute index.html nicht gefunden:', distIndexPath); + return null; + } return baseHTML; } @@ -76,15 +95,35 @@ export function setupSEORoutes(app, __dirname) { // Pre-Rendering für Hauptseite app.get('/', (req, res) => { const meta = seoData['/']; - const html = generateHTML('/', meta); - res.send(html); + const html = generateHTML('/', meta, __dirname); + if (html) { + res.send(html); + } else { + // Fallback: Verwende die gebaute index.html direkt (ohne Meta-Tag-Anpassung) + const distIndexPath = join(__dirname, '../docroot/dist/index.html'); + if (existsSync(distIndexPath)) { + res.sendFile(distIndexPath); + } else { + res.status(500).send('Gebaute index.html nicht gefunden. Bitte führe "npm run build" aus.'); + } + } }); // Pre-Rendering für Partners-Seite app.get('/partners', (req, res) => { const meta = seoData['/partners']; - const html = generateHTML('/partners', meta); - res.send(html); + const html = generateHTML('/partners', meta, __dirname); + if (html) { + res.send(html); + } else { + // Fallback: Verwende die gebaute index.html direkt (ohne Meta-Tag-Anpassung) + const distIndexPath = join(__dirname, '../docroot/dist/index.html'); + if (existsSync(distIndexPath)) { + res.sendFile(distIndexPath); + } else { + res.status(500).send('Gebaute index.html nicht gefunden. Bitte führe "npm run build" aus.'); + } + } }); }