SEO
This commit is contained in:
@@ -1,18 +1,18 @@
|
||||
{$SITE_DOMAIN} {
|
||||
encode zstd gzip
|
||||
|
||||
@storage path /storage /storage/*
|
||||
handle @storage {
|
||||
uri strip_prefix /storage
|
||||
reverse_proxy minio:9000
|
||||
}
|
||||
|
||||
@api path /api /api/* /auth /auth/* /v1 /v1/* /health /plants /plants/*
|
||||
handle @api {
|
||||
reverse_proxy api:3000
|
||||
}
|
||||
|
||||
handle {
|
||||
reverse_proxy landing:3000
|
||||
}
|
||||
}
|
||||
{$SITE_DOMAIN} {
|
||||
encode zstd gzip
|
||||
|
||||
@storage path /storage /storage/*
|
||||
handle @storage {
|
||||
uri strip_prefix /storage
|
||||
reverse_proxy minio:9000
|
||||
}
|
||||
|
||||
@api path /api /api/* /auth /auth/* /v1 /v1/* /health /plants /plants/*
|
||||
handle @api {
|
||||
reverse_proxy api:3000
|
||||
}
|
||||
|
||||
handle {
|
||||
reverse_proxy landing:3000
|
||||
}
|
||||
}
|
||||
|
||||
21
greenlns-landing/app/de/[slug]/page.tsx
Normal file
21
greenlns-landing/app/de/[slug]/page.tsx
Normal file
@@ -0,0 +1,21 @@
|
||||
import { notFound, permanentRedirect } from 'next/navigation'
|
||||
import { getGermanSeoPageBySlug, germanSeoPageSlugs } from '@/lib/seoPages'
|
||||
|
||||
type GermanSeoRouteProps = {
|
||||
params: Promise<{ slug: string }>
|
||||
}
|
||||
|
||||
export function generateStaticParams() {
|
||||
return germanSeoPageSlugs.map((slug) => ({ slug }))
|
||||
}
|
||||
|
||||
export default async function GermanSeoRoute({ params }: GermanSeoRouteProps) {
|
||||
const { slug } = await params
|
||||
const profile = getGermanSeoPageBySlug(slug)
|
||||
|
||||
if (!profile) {
|
||||
notFound()
|
||||
}
|
||||
|
||||
permanentRedirect(`/${slug}`)
|
||||
}
|
||||
5
greenlns-landing/app/de/page.tsx
Normal file
5
greenlns-landing/app/de/page.tsx
Normal file
@@ -0,0 +1,5 @@
|
||||
import { permanentRedirect } from 'next/navigation'
|
||||
|
||||
export default function GermanHomeRedirect() {
|
||||
permanentRedirect('/')
|
||||
}
|
||||
64
greenlns-landing/app/es/[slug]/page.tsx
Normal file
64
greenlns-landing/app/es/[slug]/page.tsx
Normal file
@@ -0,0 +1,64 @@
|
||||
import type { Metadata } from 'next'
|
||||
import { notFound } from 'next/navigation'
|
||||
import SeoCategoryPage from '@/components/SeoCategoryPage'
|
||||
import { getSpanishSeoPageBySlug, spanishSeoPageSlugs } from '@/lib/spanishSeoPages'
|
||||
import { siteConfig } from '@/lib/site'
|
||||
|
||||
type SpanishSeoRouteProps = {
|
||||
params: Promise<{ slug: string }>
|
||||
}
|
||||
|
||||
export function generateStaticParams() {
|
||||
return spanishSeoPageSlugs
|
||||
.filter((slug) => slug !== 'comparar-google-lens')
|
||||
.map((slug) => ({ slug }))
|
||||
}
|
||||
|
||||
export async function generateMetadata({ params }: SpanishSeoRouteProps): Promise<Metadata> {
|
||||
const { slug } = await params
|
||||
if (slug === 'comparar-google-lens') {
|
||||
notFound()
|
||||
}
|
||||
const profile = getSpanishSeoPageBySlug(slug)
|
||||
|
||||
if (!profile) {
|
||||
return {}
|
||||
}
|
||||
|
||||
return {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
alternates: {
|
||||
canonical: profile.canonical,
|
||||
languages: {
|
||||
es: profile.canonical,
|
||||
'x-default': '/',
|
||||
},
|
||||
},
|
||||
openGraph: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
url: `${siteConfig.domain}${profile.canonical}`,
|
||||
type: 'website',
|
||||
locale: 'es_ES',
|
||||
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
images: ['/og-image.png'],
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
export default async function SpanishSeoRoute({ params }: SpanishSeoRouteProps) {
|
||||
const { slug } = await params
|
||||
const profile = getSpanishSeoPageBySlug(slug)
|
||||
|
||||
if (!profile) {
|
||||
notFound()
|
||||
}
|
||||
|
||||
return <SeoCategoryPage profile={profile} />
|
||||
}
|
||||
40
greenlns-landing/app/es/comparar/google-lens/page.tsx
Normal file
40
greenlns-landing/app/es/comparar/google-lens/page.tsx
Normal file
@@ -0,0 +1,40 @@
|
||||
import type { Metadata } from 'next'
|
||||
import { notFound } from 'next/navigation'
|
||||
import SeoCategoryPage from '@/components/SeoCategoryPage'
|
||||
import { getSpanishSeoPageBySlug } from '@/lib/spanishSeoPages'
|
||||
import { siteConfig } from '@/lib/site'
|
||||
|
||||
const profile = getSpanishSeoPageBySlug('comparar-google-lens')
|
||||
|
||||
export const metadata: Metadata = !profile
|
||||
? {}
|
||||
: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
alternates: {
|
||||
canonical: profile.canonical,
|
||||
languages: {
|
||||
es: profile.canonical,
|
||||
'x-default': '/',
|
||||
},
|
||||
},
|
||||
openGraph: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
url: `${siteConfig.domain}${profile.canonical}`,
|
||||
type: 'website',
|
||||
locale: 'es_ES',
|
||||
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
images: ['/og-image.png'],
|
||||
},
|
||||
}
|
||||
|
||||
export default function SpanishGoogleLensComparisonPage() {
|
||||
if (!profile) notFound()
|
||||
return <SeoCategoryPage profile={profile} />
|
||||
}
|
||||
81
greenlns-landing/app/es/page.tsx
Normal file
81
greenlns-landing/app/es/page.tsx
Normal file
@@ -0,0 +1,81 @@
|
||||
import type { Metadata } from 'next'
|
||||
import Link from 'next/link'
|
||||
import Navbar from '@/components/Navbar'
|
||||
import Footer from '@/components/Footer'
|
||||
import { siteConfig } from '@/lib/site'
|
||||
import { spanishSeoPageProfiles } from '@/lib/spanishSeoPages'
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'GreenLens en español - Identificar y cuidar plantas',
|
||||
description:
|
||||
'GreenLens en español: identifica plantas por foto, organiza cuidados, recibe recordatorios y diagnostica sintomas comunes.',
|
||||
alternates: {
|
||||
canonical: '/es',
|
||||
languages: {
|
||||
es: '/es',
|
||||
'x-default': '/',
|
||||
},
|
||||
},
|
||||
openGraph: {
|
||||
title: 'GreenLens en español - Identificar y cuidar plantas',
|
||||
description:
|
||||
'Identifica plantas por foto, organiza cuidados, recibe recordatorios y diagnostica sintomas comunes con GreenLens.',
|
||||
url: `${siteConfig.domain}/es`,
|
||||
type: 'website',
|
||||
locale: 'es_ES',
|
||||
},
|
||||
}
|
||||
|
||||
const pages = [
|
||||
spanishSeoPageProfiles['identificador-de-plantas'],
|
||||
spanishSeoPageProfiles['escaner-de-plantas'],
|
||||
spanishSeoPageProfiles['app-para-cuidar-plantas'],
|
||||
spanishSeoPageProfiles['diagnosticar-enfermedades-plantas'],
|
||||
spanishSeoPageProfiles['comparar-google-lens'],
|
||||
]
|
||||
|
||||
export default function SpanishHomePage() {
|
||||
return (
|
||||
<>
|
||||
<Navbar />
|
||||
<main className="comparison-page">
|
||||
<section className="comparison-hero">
|
||||
<div className="container comparison-hero-grid">
|
||||
<div className="comparison-hero-copy">
|
||||
<p className="tag">GreenLens en español</p>
|
||||
<h1>Identifica, cuida y rescata tus plantas con mas claridad.</h1>
|
||||
<p className="comparison-lead">
|
||||
Escanea una planta, entiende que necesita y organiza cuidados, recordatorios y diagnostico desde una sola app.
|
||||
</p>
|
||||
<div className="comparison-actions">
|
||||
<a href="#cta" className="btn-primary">Probar GreenLens</a>
|
||||
<a href="#guias" className="btn-outline">Ver guias</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<aside className="comparison-hero-card">
|
||||
<p className="comparison-card-label">Arquitectura en español</p>
|
||||
<p>
|
||||
Esta seccion agrupa las paginas principales para busquedas en español:
|
||||
identificacion, escaneo, cuidado, diagnostico y comparacion con Google Lens.
|
||||
</p>
|
||||
</aside>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="comparison-links" id="guias">
|
||||
<div className="container comparison-links-grid">
|
||||
{pages.map((page) => (
|
||||
<Link key={page.slug} href={page.canonical} className="comparison-link-card">
|
||||
<p className="comparison-mini-label">Guia</p>
|
||||
<h2>{page.h1}</h2>
|
||||
<p>{page.metaDescription}</p>
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<Footer />
|
||||
</>
|
||||
)
|
||||
}
|
||||
@@ -7,36 +7,41 @@ import { siteConfig, hasIosStoreUrl } from '@/lib/site'
|
||||
export const metadata: Metadata = {
|
||||
metadataBase: new URL(siteConfig.domain),
|
||||
title: {
|
||||
default: 'GreenLens – Pflanzen erkennen & Pflege-App',
|
||||
default: 'GreenLens - Pflanzen erkennen & Pflege planen',
|
||||
template: '%s',
|
||||
},
|
||||
description:
|
||||
'GreenLens erkennt Pflanzen per Foto in Sekunden und liefert sofort Pflegeplan, Gießerinnerungen und Gesundheitscheck — alles in einer App.',
|
||||
'GreenLens erkennt Pflanzen per Foto in Sekunden und gibt dir Pflegepläne, Erinnerungen und Gesundheitschecks in einer App.',
|
||||
keywords: [
|
||||
'Pflanzen erkennen App',
|
||||
'Pflanzen bestimmen per Foto',
|
||||
'Blumen Scanner',
|
||||
'Pflanzen erkennen per Foto',
|
||||
'Pflanzen Pflege App',
|
||||
'plant identifier app',
|
||||
'plant care app',
|
||||
'Pflanzen App',
|
||||
'plant scanner',
|
||||
'plant disease identifier',
|
||||
'identificador de plantas',
|
||||
'GreenLens',
|
||||
],
|
||||
authors: [{ name: siteConfig.name }],
|
||||
openGraph: {
|
||||
title: 'GreenLens – Pflanzen erkennen & Pflege-App',
|
||||
description: 'Pflanzen per Foto erkennen, Pflegeplan erhalten und Gesundheitsprobleme diagnostizieren — alles in einer App.',
|
||||
title: 'GreenLens - Pflanzen erkennen & Pflege planen',
|
||||
description: 'Pflanzen per Foto erkennen, Pflegeplan erhalten und Pflanzenprobleme in einer App einordnen.',
|
||||
type: 'website',
|
||||
url: siteConfig.domain,
|
||||
},
|
||||
alternates: {
|
||||
// Do not emit hreflang until each language has its own URL.
|
||||
languages: {},
|
||||
languages: {
|
||||
de: '/',
|
||||
es: '/es',
|
||||
'x-default': '/',
|
||||
},
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: 'GreenLens – Pflanzen erkennen & Pflege-App',
|
||||
description: 'Pflanzen per Foto erkennen, Pflegeplan erhalten und Gesundheitsprobleme diagnostizieren — alles in einer App.',
|
||||
title: 'GreenLens - Pflanzen erkennen & Pflege planen',
|
||||
description: 'Pflanzen per Foto erkennen, Pflegeplan erhalten und Pflanzenprobleme in einer App einordnen.',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -61,7 +66,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo
|
||||
'@type': 'WebSite',
|
||||
name: siteConfig.name,
|
||||
url: siteConfig.domain,
|
||||
inLanguage: ['de', 'en', 'es'],
|
||||
inLanguage: ['en', 'de', 'es'],
|
||||
},
|
||||
{
|
||||
'@context': 'https://schema.org',
|
||||
@@ -70,8 +75,8 @@ export default async function RootLayout({ children }: { children: React.ReactNo
|
||||
operatingSystem: 'iOS, Android',
|
||||
applicationCategory: 'LifestyleApplication',
|
||||
description:
|
||||
'Pflanzen per Foto erkennen, Pflegeplan erhalten und Gesundheitsprobleme diagnostizieren.',
|
||||
inLanguage: ['de', 'en', 'es'],
|
||||
'Pflanzen per Foto erkennen, Pflegepläne nutzen und Pflanzenprobleme einordnen.',
|
||||
inLanguage: ['en', 'de', 'es'],
|
||||
...(hasIosStoreUrl && { downloadUrl: siteConfig.iosAppStoreUrl }),
|
||||
offers: {
|
||||
'@type': 'Offer',
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import type { Metadata } from 'next'
|
||||
import Link from 'next/link'
|
||||
import Navbar from '@/components/Navbar'
|
||||
import Hero from '@/components/Hero'
|
||||
import Ticker from '@/components/Ticker'
|
||||
@@ -11,39 +12,47 @@ import CTA from '@/components/CTA'
|
||||
import Footer from '@/components/Footer'
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'GreenLens - Pflanzen erkennen & Pflege planen',
|
||||
description:
|
||||
'Scanne Pflanzen per Foto, verstehe ihre Bedürfnisse und organisiere Pflege, Erinnerungen und Sammlung in einer App.',
|
||||
alternates: {
|
||||
canonical: '/',
|
||||
languages: {
|
||||
de: '/',
|
||||
es: '/es',
|
||||
'x-default': '/',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
const howToSchema = {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'HowTo',
|
||||
name: 'How to identify a plant with GreenLens',
|
||||
name: 'So erkennst du eine Pflanze mit GreenLens',
|
||||
step: [
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
position: 1,
|
||||
name: 'Photograph your plant',
|
||||
text: 'Open the app, point the camera at your plant and tap Scan.',
|
||||
name: 'Pflanze fotografieren',
|
||||
text: 'Öffne die App, richte die Kamera auf deine Pflanze und tippe auf Scan.',
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
position: 2,
|
||||
name: 'AI identifies instantly',
|
||||
text: 'In under a second you get the exact name, species and all key details.',
|
||||
name: 'KI identifiziert sofort',
|
||||
text: 'In unter einer Sekunde erhältst du den Namen, die Art und die wichtigsten Eckdaten.',
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
position: 3,
|
||||
name: 'Receive care plan',
|
||||
text: 'GreenLens automatically creates a personalized care plan for your plant and location.',
|
||||
name: 'Pflegeplan erhalten',
|
||||
text: 'GreenLens erstellt automatisch einen Pflegeplan passend zu deiner Pflanze und deinem Standort.',
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
position: 4,
|
||||
name: 'Track growth',
|
||||
text: 'Document photos, track watering and get reminded of important care dates.',
|
||||
name: 'Wachstum verfolgen',
|
||||
text: 'Dokumentiere Fotos, verfolge das Gießen und lass dich an wichtige Pflegetermine erinnern.',
|
||||
},
|
||||
],
|
||||
}
|
||||
@@ -54,42 +63,42 @@ const faqSchema = {
|
||||
mainEntity: [
|
||||
{
|
||||
'@type': 'Question',
|
||||
name: 'How does GreenLens identify a plant?',
|
||||
name: 'Wie erkennt GreenLens eine Pflanze?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'GreenLens analyzes the plant photo and combines that with app-side care guidance so you can move from scan to next steps faster.',
|
||||
text: 'GreenLens analysiert das Pflanzenfoto und verbindet das Ergebnis mit Pflegehinweisen in der App, damit du schneller zu klaren nächsten Schritten kommst.',
|
||||
},
|
||||
},
|
||||
{
|
||||
'@type': 'Question',
|
||||
name: 'Is GreenLens free to use?',
|
||||
name: 'Ist GreenLens kostenlos?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'GreenLens includes free functionality plus paid options such as subscriptions and credit top-ups for advanced AI features.',
|
||||
text: 'GreenLens bietet kostenlose Funktionen und zusätzlich kostenpflichtige Optionen wie Abos und Credit-Top-ups für erweiterte KI-Funktionen.',
|
||||
},
|
||||
},
|
||||
{
|
||||
'@type': 'Question',
|
||||
name: 'Can I use GreenLens offline?',
|
||||
name: 'Kann ich GreenLens offline nutzen?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'Plant identification and health checks require an internet connection. Your saved collection, care notes, and watering reminders are available offline.',
|
||||
text: 'Pflanzenidentifikation und Gesundheitscheck benötigen eine Internetverbindung. Deine gespeicherte Sammlung, Pflegenotizen und Gieß-Erinnerungen sind offline verfügbar.',
|
||||
},
|
||||
},
|
||||
{
|
||||
'@type': 'Question',
|
||||
name: 'What kind of plants can I use GreenLens for?',
|
||||
name: 'Für welche Pflanzen kann ich GreenLens nutzen?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'GreenLens covers 450+ plant species including houseplants, garden plants, and succulents. It is built for everyday plant owners who want identification and care guidance in one place.',
|
||||
text: 'GreenLens umfasst über 450 Pflanzenarten, darunter Zimmerpflanzen, Gartenpflanzen und Sukkulenten. Die App richtet sich an Pflanzenbesitzer, die Identifikation und Pflege an einem Ort wollen.',
|
||||
},
|
||||
},
|
||||
{
|
||||
'@type': 'Question',
|
||||
name: 'How do I start my plant collection in GreenLens?',
|
||||
name: 'Wie starte ich meine Pflanzensammlung?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'Start with a scan, review the result, and save the plant to your collection to keep notes, reminders, and follow-up care in one place.',
|
||||
text: 'Starte mit einem Scan, prüfe das Ergebnis und speichere die Pflanze in deiner Sammlung, damit Notizen, Erinnerungen und Pflege an einem Ort bleiben.',
|
||||
},
|
||||
},
|
||||
],
|
||||
@@ -115,6 +124,36 @@ export default function Home() {
|
||||
<Intelligence />
|
||||
<HowItWorks />
|
||||
<FAQ />
|
||||
<section className="comparison-links" aria-labelledby="homepage-guides-heading">
|
||||
<div className="container">
|
||||
<div className="comparison-section-head">
|
||||
<p className="tag">Guides</p>
|
||||
<h2 id="homepage-guides-heading">Pflanzen schneller erkennen und richtig handeln.</h2>
|
||||
</div>
|
||||
<div className="comparison-links-grid">
|
||||
<Link href="/blumen-scanner" className="comparison-link-card">
|
||||
<p className="comparison-mini-label">Blumen</p>
|
||||
<h3>Blumen Scanner</h3>
|
||||
<p>Blumen per Foto erkennen, Namen erhalten und direkt Pflegehinweise nutzen.</p>
|
||||
</Link>
|
||||
<Link href="/blumen-scanner" className="comparison-link-card">
|
||||
<p className="comparison-mini-label">Foto-Erkennung</p>
|
||||
<h3>Blumen per Foto erkennen</h3>
|
||||
<p>Ideal, wenn du eine Blume fotografiert hast und sofort wissen willst, was sie braucht.</p>
|
||||
</Link>
|
||||
<Link href="/pflanzen-bestimmen" className="comparison-link-card">
|
||||
<p className="comparison-mini-label">Pflanzen</p>
|
||||
<h3>Pflanzen bestimmen</h3>
|
||||
<p>Pflanze scannen, Artname sehen und den passenden Pflegeplan erhalten.</p>
|
||||
</Link>
|
||||
<Link href="/pflanzen-krankheiten-erkennen" className="comparison-link-card">
|
||||
<p className="comparison-mini-label">Diagnose</p>
|
||||
<h3>Pflanzenkrankheiten erkennen</h3>
|
||||
<p>Gelbe Blätter, braune Spitzen oder weiche Stiele einordnen und den nächsten Schritt finden.</p>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<CTA />
|
||||
</main>
|
||||
<Footer />
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import { MetadataRoute } from 'next'
|
||||
import { germanSeoPageSlugs, getGermanSeoPageBySlug } from '@/lib/seoPages'
|
||||
import { spanishSeoPageProfiles, spanishSeoPageSlugs } from '@/lib/spanishSeoPages'
|
||||
|
||||
export default function sitemap(): MetadataRoute.Sitemap {
|
||||
const baseUrl = (process.env.NEXT_PUBLIC_SITE_URL || 'https://greenlenspro.com').trim()
|
||||
@@ -34,24 +36,6 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.75,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/pflanzen-erkennen-app`,
|
||||
lastModified: new Date('2026-05-10'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.85,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/blumen-scanner`,
|
||||
lastModified: new Date('2026-05-10'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.8,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/pflanzen-bestimmen`,
|
||||
lastModified: new Date('2026-05-10'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.8,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/vs/picturethis`,
|
||||
lastModified: new Date('2026-04-27'),
|
||||
@@ -106,24 +90,6 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.75,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/pflanzen-krankheiten-erkennen`,
|
||||
lastModified: new Date('2026-05-10'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.8,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/pflanzen-pflege-app`,
|
||||
lastModified: new Date('2026-05-10'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.75,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/zimmerpflanzen-bestimmen`,
|
||||
lastModified: new Date('2026-05-10'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.8,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/best-plant-identification-app`,
|
||||
lastModified: new Date('2026-04-27'),
|
||||
@@ -136,12 +102,6 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.8,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/pflanzen-erkennen-kostenlos`,
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.85,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/imprint`,
|
||||
lastModified: new Date('2026-04-08'),
|
||||
@@ -160,5 +120,26 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.3,
|
||||
},
|
||||
...germanSeoPageSlugs.map((slug) => {
|
||||
const profile = getGermanSeoPageBySlug(slug)
|
||||
return {
|
||||
url: `${baseUrl}${profile?.canonical ?? `/${slug}`}`,
|
||||
lastModified: new Date('2026-05-20'),
|
||||
changeFrequency: 'monthly' as const,
|
||||
priority: slug === 'pflanzen-erkennen-kostenlos' || slug === 'pflanzen-erkennen-app' ? 0.85 : 0.75,
|
||||
}
|
||||
}),
|
||||
{
|
||||
url: `${baseUrl}/es`,
|
||||
lastModified: new Date('2026-05-20'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.85,
|
||||
},
|
||||
...spanishSeoPageSlugs.map((slug) => ({
|
||||
url: `${baseUrl}${spanishSeoPageProfiles[slug].canonical}`,
|
||||
lastModified: new Date('2026-05-20'),
|
||||
changeFrequency: 'monthly' as const,
|
||||
priority: slug === 'identificador-de-plantas' ? 0.85 : 0.75,
|
||||
})),
|
||||
]
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@ const faqs = [
|
||||
es: 'Como identifica GreenLens una planta?'
|
||||
},
|
||||
answer: {
|
||||
en: 'GreenLens analyzes the plant photo and combines that with app-side care guidance so you can move from scan to next steps faster.',
|
||||
de: 'GreenLens analysiert das Pflanzenfoto und verbindet das Ergebnis mit Pflegehinweisen in der App, damit du schneller zu klaren naechsten Schritten kommst.',
|
||||
en: 'GreenLens analyzes the plant photo and combines that with app-side care guidance so you can move from scan to next steps faster.',
|
||||
de: 'GreenLens analysiert das Pflanzenfoto und verbindet das Ergebnis mit Pflegehinweisen in der App, damit du schneller zu klaren nächsten Schritten kommst.',
|
||||
es: 'GreenLens analiza la foto de la planta y combina el resultado con indicaciones de cuidado dentro de la app para que avances mas rapido.'
|
||||
}
|
||||
},
|
||||
@@ -25,7 +25,7 @@ const faqs = [
|
||||
},
|
||||
answer: {
|
||||
en: 'GreenLens includes free functionality plus paid options such as subscriptions and credit top-ups for advanced AI features.',
|
||||
de: 'GreenLens bietet kostenlose Funktionen und zusaetzlich kostenpflichtige Optionen wie Abos und Credit-Top-ups fuer erweiterte KI-Funktionen.',
|
||||
de: 'GreenLens bietet kostenlose Funktionen und zusätzlich kostenpflichtige Optionen wie Abos und Credit-Top-ups für erweiterte KI-Funktionen.',
|
||||
es: 'GreenLens incluye funciones gratuitas y tambien opciones de pago como suscripciones y creditos para funciones de IA mas umfangreiche.'
|
||||
}
|
||||
},
|
||||
@@ -37,19 +37,19 @@ const faqs = [
|
||||
},
|
||||
answer: {
|
||||
en: 'Plant identification and health checks require an internet connection. Your saved collection, care notes, and watering reminders are available offline.',
|
||||
de: 'Pflanzenidentifikation und Gesundheitscheck benoetigen eine Internetverbindung. Deine gespeicherte Sammlung, Pflegenotizen und Giess-Erinnerungen sind offline verfuegbar.',
|
||||
de: 'Pflanzenidentifikation und Gesundheitscheck benötigen eine Internetverbindung. Deine gespeicherte Sammlung, Pflegenotizen und Gieß-Erinnerungen sind offline verfügbar.',
|
||||
es: 'La identificacion de plantas y el control de salud requieren conexion a internet. Tu coleccion guardada, notas de cuidado y recordatorios de riego estan disponibles sin conexion.'
|
||||
}
|
||||
},
|
||||
{
|
||||
question: {
|
||||
en: 'What kind of plants can I use GreenLens for?',
|
||||
de: 'Fuer welche Pflanzen kann ich GreenLens nutzen?',
|
||||
de: 'Für welche Pflanzen kann ich GreenLens nutzen?',
|
||||
es: 'Para que tipo de plantas puedo usar GreenLens?'
|
||||
},
|
||||
answer: {
|
||||
en: 'GreenLens covers 450+ plant species including houseplants, garden plants, and succulents. It is built for everyday plant owners who want identification and care guidance in one place.',
|
||||
de: 'GreenLens umfasst ueber 450 Pflanzenarten, darunter Zimmerpflanzen, Gartenpflanzen und Sukkulenten. Die App richtet sich an Pflanzenbesitzer, die Identifikation und Pflege an einem Ort wollen.',
|
||||
de: 'GreenLens umfasst über 450 Pflanzenarten, darunter Zimmerpflanzen, Gartenpflanzen und Sukkulenten. Die App richtet sich an Pflanzenbesitzer, die Identifikation und Pflege an einem Ort wollen.',
|
||||
es: 'GreenLens cubre mas de 450 especies de plantas, incluyendo plantas de interior, de jardin y suculentas. Esta pensada para quienes quieren identificacion y cuidado en un solo lugar.'
|
||||
}
|
||||
},
|
||||
@@ -61,14 +61,14 @@ const faqs = [
|
||||
},
|
||||
answer: {
|
||||
en: 'Start with a scan, review the result, and save the plant to your collection to keep notes, reminders, and follow-up care in one place.',
|
||||
de: 'Starte mit einem Scan, pruefe das Ergebnis und speichere die Pflanze in deiner Sammlung, damit Notizen, Erinnerungen und Pflege an einem Ort bleiben.',
|
||||
de: 'Starte mit einem Scan, prüfe das Ergebnis und speichere die Pflanze in deiner Sammlung, damit Notizen, Erinnerungen und Pflege an einem Ort bleiben.',
|
||||
es: 'Empieza con un escaneo, revisa el resultado y guarda la planta en tu coleccion para mantener notas, recordatorios y cuidado en un solo lugar.'
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
const TEXT = {
|
||||
de: { tag: 'Fragen', h2: ['Haeufig gestellte', 'Fragen'], desc: 'Alles, was du ueber GreenLens und den Einstieg wissen musst.' },
|
||||
de: { tag: 'Fragen', h2: ['Häufig gestellte', 'Fragen'], desc: 'Alles, was du über GreenLens und den Einstieg wissen musst.' },
|
||||
en: { tag: 'Questions', h2: ['Frequently Asked', 'Questions'], desc: 'Everything you need to know about GreenLens and getting started.' },
|
||||
es: { tag: 'Preguntas', h2: ['Preguntas', 'Frecuentes'], desc: 'Todo lo que necesitas saber sobre GreenLens y el inicio.' },
|
||||
}
|
||||
|
||||
@@ -57,14 +57,26 @@ export default function Footer() {
|
||||
|
||||
<div className="footer-col">
|
||||
<div className="footer-col-title">Pflanzen & Erkennen</div>
|
||||
<Link href="/">GreenLens auf Deutsch</Link>
|
||||
<Link href="/pflanzen-erkennen-kostenlos">Pflanzen erkennen kostenlos</Link>
|
||||
<Link href="/pflanzen-erkennen-app">Pflanzen erkennen App</Link>
|
||||
<Link href="/pflanzen-bestimmen">Pflanzen bestimmen</Link>
|
||||
<Link href="/blumen-scanner">Blumen Scanner</Link>
|
||||
<Link href="/blumen-scanner">Blumen per Foto erkennen</Link>
|
||||
<Link href="/zimmerpflanzen-bestimmen">Zimmerpflanzen bestimmen</Link>
|
||||
<Link href="/pflanzen-pflege-app">Pflanzen Pflege App</Link>
|
||||
<Link href="/pflanzen-krankheiten-erkennen">Pflanzenkrankheiten erkennen</Link>
|
||||
</div>
|
||||
|
||||
<div className="footer-col">
|
||||
<div className="footer-col-title">Español</div>
|
||||
<Link href="/es">GreenLens en español</Link>
|
||||
<Link href="/es/identificador-de-plantas">Identificador de plantas</Link>
|
||||
<Link href="/es/escaner-de-plantas">Escaner de plantas</Link>
|
||||
<Link href="/es/app-para-cuidar-plantas">App para cuidar plantas</Link>
|
||||
<Link href="/es/diagnosticar-enfermedades-plantas">Diagnosticar enfermedades</Link>
|
||||
<Link href="/es/comparar/google-lens">GreenLens vs Google Lens</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="footer-brand-xl" aria-hidden="true">GREENLENS</div>
|
||||
|
||||
@@ -24,7 +24,7 @@ const STEPS = {
|
||||
],
|
||||
}
|
||||
|
||||
const TAG = { de: 'So funktionierts', en: 'How it works', es: 'Cómo funciona' }
|
||||
const TAG = { de: 'So funktioniert es', en: 'How it works', es: 'Cómo funciona' }
|
||||
const H2 = {
|
||||
de: ['Einfacher', 'als du', 'denkst.'],
|
||||
en: ['Simpler', 'than you', 'think.'],
|
||||
|
||||
@@ -23,7 +23,7 @@ const ICONS = [
|
||||
const ITEMS = {
|
||||
de: [
|
||||
{ title: 'Scan-basierte Erkennung', desc: 'Vom Foto zur besseren Einordnung in wenigen Schritten.' },
|
||||
{ title: 'Pflegeorientierte Hinweise', desc: 'Hilft dir, naechste Pflegeentscheidungen schneller zu treffen.' },
|
||||
{ title: 'Pflegeorientierte Hinweise', desc: 'Hilft dir, nächste Pflegeentscheidungen schneller zu treffen.' },
|
||||
{ title: 'Sammlung und Verlauf', desc: 'Behalte Scans, Pflanzen und Notizen an einem Ort.' },
|
||||
{ title: 'Lexikon und Suche', desc: 'Suche Pflanzen und vergleiche Informationen in einer App.' },
|
||||
],
|
||||
@@ -43,7 +43,7 @@ const ITEMS = {
|
||||
|
||||
const TAG_TEXT = { de: 'Technologie', en: 'Technology', es: 'Tecnologia' }
|
||||
const BODY_TEXT = {
|
||||
de: 'GreenLens verbindet Scan-Ergebnisse, Pflegekontext und Sammlungsverwaltung in einer App. So kommst du schneller von einem Pflanzenfoto zu einer verstaendlichen Entscheidung.',
|
||||
de: 'GreenLens verbindet Scan-Ergebnisse, Pflegekontext und Sammlungsverwaltung in einer App. So kommst du schneller von einem Pflanzenfoto zu einer verständlichen Entscheidung.',
|
||||
en: 'GreenLens combines scan results, care context, and collection management in one app, helping you move from plant photo to a clearer decision faster.',
|
||||
es: 'GreenLens combina resultados de escaneo, contexto de cuidado y gestion de coleccion en una sola app para ayudarte a pasar de una foto a una decision mas clara.',
|
||||
}
|
||||
|
||||
@@ -6,11 +6,11 @@ import { useEffect, useState } from 'react'
|
||||
import { useLang } from '@/context/LangContext'
|
||||
import type { Lang } from '@/lib/i18n'
|
||||
|
||||
const LANGS: { code: Lang; label: string; flag: string }[] = [
|
||||
{ code: 'de', label: 'DE', flag: 'DE' },
|
||||
{ code: 'en', label: 'EN', flag: 'EN' },
|
||||
{ code: 'es', label: 'ES', flag: 'ES' },
|
||||
]
|
||||
const LANGS: { code: Lang; label: string; flag: string }[] = [
|
||||
{ code: 'de', label: 'DE', flag: 'DE' },
|
||||
{ code: 'en', label: 'EN', flag: 'EN' },
|
||||
{ code: 'es', label: 'ES', flag: 'ES' },
|
||||
]
|
||||
|
||||
export default function Navbar() {
|
||||
const [scrolled, setScrolled] = useState(false)
|
||||
@@ -45,10 +45,19 @@ export default function Navbar() {
|
||||
<button
|
||||
key={l.code}
|
||||
className={`lang-btn${lang === l.code ? ' lang-btn--active' : ''}`}
|
||||
onClick={() => {
|
||||
setLang(l.code)
|
||||
setMenuOpen(false)
|
||||
}}
|
||||
onClick={() => {
|
||||
setLang(l.code)
|
||||
setMenuOpen(false)
|
||||
if (l.code === 'de' && pathname !== '/') {
|
||||
window.location.href = '/'
|
||||
}
|
||||
if (l.code === 'es' && !pathname.startsWith('/es')) {
|
||||
window.location.href = '/es'
|
||||
}
|
||||
if (l.code === 'en' && (pathname.startsWith('/de') || pathname.startsWith('/es'))) {
|
||||
window.location.href = '/'
|
||||
}
|
||||
}}
|
||||
aria-label={`Switch to ${l.label}`}
|
||||
aria-pressed={lang === l.code}
|
||||
>
|
||||
|
||||
@@ -10,6 +10,63 @@ interface SeoCategoryPageProps {
|
||||
}
|
||||
|
||||
export default function SeoCategoryPage({ profile }: SeoCategoryPageProps) {
|
||||
const labels = {
|
||||
en: {
|
||||
heroTag: 'GreenLens',
|
||||
primaryCta: 'Try GreenLens',
|
||||
secondaryCta: 'See full comparison',
|
||||
definition: 'Definition',
|
||||
updated: 'Last updated:',
|
||||
tableTag: 'At a glance',
|
||||
bestFit: 'Best fit',
|
||||
chooseIf: 'Choose GreenLens if:',
|
||||
notBestFit: 'Not the best fit',
|
||||
notRightIf: 'GreenLens is not the right tool if:',
|
||||
faqTag: 'FAQ',
|
||||
faqTitle: 'Common questions answered directly.',
|
||||
related: 'Related',
|
||||
supportTag: 'Need help?',
|
||||
supportTitle: 'Talk to GreenLens support',
|
||||
supportCopy: 'Questions about scans, care plans, billing, or features? Use the support page.',
|
||||
},
|
||||
de: {
|
||||
heroTag: 'GreenLens',
|
||||
primaryCta: 'GreenLens testen',
|
||||
secondaryCta: 'Vergleich ansehen',
|
||||
definition: 'Definition',
|
||||
updated: 'Aktualisiert:',
|
||||
tableTag: 'Überblick',
|
||||
bestFit: 'Passt gut',
|
||||
chooseIf: 'Wähle GreenLens, wenn:',
|
||||
notBestFit: 'Nicht ideal',
|
||||
notRightIf: 'GreenLens ist nicht die richtige Wahl, wenn:',
|
||||
faqTag: 'FAQ',
|
||||
faqTitle: 'Häufige Fragen direkt beantwortet.',
|
||||
related: 'Verwandt',
|
||||
supportTag: 'Brauchst du Hilfe?',
|
||||
supportTitle: 'GreenLens Support kontaktieren',
|
||||
supportCopy: 'Fragen zu Scans, Pflegeplänen, Abrechnung oder Funktionen? Nutze die Support-Seite.',
|
||||
},
|
||||
es: {
|
||||
heroTag: 'GreenLens',
|
||||
primaryCta: 'Probar GreenLens',
|
||||
secondaryCta: 'Ver comparación',
|
||||
definition: 'Definición',
|
||||
updated: 'Actualizado:',
|
||||
tableTag: 'Resumen',
|
||||
bestFit: 'Mejor opción',
|
||||
chooseIf: 'Elige GreenLens si:',
|
||||
notBestFit: 'No es ideal',
|
||||
notRightIf: 'GreenLens no es la herramienta adecuada si:',
|
||||
faqTag: 'FAQ',
|
||||
faqTitle: 'Preguntas frecuentes respondidas directamente.',
|
||||
related: 'Relacionado',
|
||||
supportTag: '¿Necesitas ayuda?',
|
||||
supportTitle: 'Contacta con soporte de GreenLens',
|
||||
supportCopy: '¿Preguntas sobre escaneos, planes de cuidado, facturación o funciones? Usa la página de soporte.',
|
||||
},
|
||||
}[profile.locale ?? 'en']
|
||||
|
||||
const faqSchema = {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'FAQPage',
|
||||
@@ -81,20 +138,20 @@ export default function SeoCategoryPage({ profile }: SeoCategoryPageProps) {
|
||||
<section className="comparison-hero">
|
||||
<div className="container comparison-hero-grid">
|
||||
<div className="comparison-hero-copy">
|
||||
<p className="tag">GreenLens</p>
|
||||
<p className="tag">{labels.heroTag}</p>
|
||||
<h1>{profile.h1}</h1>
|
||||
<p className="comparison-lead">{profile.tagline}</p>
|
||||
<p>{profile.directAnswer}</p>
|
||||
<div className="comparison-actions">
|
||||
<a href="#cta" className="btn-primary">Try GreenLens</a>
|
||||
<a href="#feature-table" className="btn-outline">See full comparison</a>
|
||||
<a href="#cta" className="btn-primary">{labels.primaryCta}</a>
|
||||
<a href="#feature-table" className="btn-outline">{labels.secondaryCta}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<aside className="comparison-hero-card">
|
||||
<p className="comparison-card-label">Definition</p>
|
||||
<p className="comparison-card-label">{labels.definition}</p>
|
||||
<p>{profile.definitionBlock}</p>
|
||||
<p className="comparison-verified">Last updated: {profile.lastUpdated}</p>
|
||||
<p className="comparison-verified">{labels.updated} {profile.lastUpdated}</p>
|
||||
</aside>
|
||||
</div>
|
||||
</section>
|
||||
@@ -103,7 +160,7 @@ export default function SeoCategoryPage({ profile }: SeoCategoryPageProps) {
|
||||
<section className="comparison-table-section" id="feature-table">
|
||||
<div className="container">
|
||||
<div className="comparison-section-head">
|
||||
<p className="tag">At a glance</p>
|
||||
<p className="tag">{labels.tableTag}</p>
|
||||
<h2>{profile.featureTable.title}</h2>
|
||||
</div>
|
||||
|
||||
@@ -129,8 +186,8 @@ export default function SeoCategoryPage({ profile }: SeoCategoryPageProps) {
|
||||
<section className="comparison-fit">
|
||||
<div className="container comparison-fit-grid">
|
||||
<article className="comparison-fit-card comparison-fit-card--greenlens">
|
||||
<p className="tag">Best fit</p>
|
||||
<h2>Choose GreenLens if:</h2>
|
||||
<p className="tag">{labels.bestFit}</p>
|
||||
<h2>{labels.chooseIf}</h2>
|
||||
<ul className="comparison-bullet-list comparison-bullet-list--dark">
|
||||
{profile.greenLensIf.map((item) => (
|
||||
<li key={item}>{item}</li>
|
||||
@@ -139,8 +196,8 @@ export default function SeoCategoryPage({ profile }: SeoCategoryPageProps) {
|
||||
</article>
|
||||
|
||||
<article className="comparison-fit-card">
|
||||
<p className="tag">Not the best fit</p>
|
||||
<h2>GreenLens is not the right tool if:</h2>
|
||||
<p className="tag">{labels.notBestFit}</p>
|
||||
<h2>{labels.notRightIf}</h2>
|
||||
<ul className="comparison-bullet-list comparison-bullet-list--dark">
|
||||
{profile.notBestIf.map((item) => (
|
||||
<li key={item}>{item}</li>
|
||||
@@ -154,8 +211,8 @@ export default function SeoCategoryPage({ profile }: SeoCategoryPageProps) {
|
||||
<section className="comparison-faq">
|
||||
<div className="container">
|
||||
<div className="comparison-section-head">
|
||||
<p className="tag">FAQ</p>
|
||||
<h2>Common questions answered directly.</h2>
|
||||
<p className="tag">{labels.faqTag}</p>
|
||||
<h2>{labels.faqTitle}</h2>
|
||||
</div>
|
||||
|
||||
<div className="comparison-faq-grid">
|
||||
@@ -175,18 +232,16 @@ export default function SeoCategoryPage({ profile }: SeoCategoryPageProps) {
|
||||
<div className="container comparison-links-grid">
|
||||
{profile.relatedLinks.map((link) => (
|
||||
<Link key={link.href} href={link.href} className="comparison-link-card">
|
||||
<p className="comparison-mini-label">Related</p>
|
||||
<p className="comparison-mini-label">{labels.related}</p>
|
||||
<h3>{link.label}</h3>
|
||||
<p>{link.description}</p>
|
||||
</Link>
|
||||
))}
|
||||
|
||||
<Link href="/support" className="comparison-link-card comparison-link-card--support">
|
||||
<p className="comparison-mini-label">Need help?</p>
|
||||
<h3>Talk to GreenLens support</h3>
|
||||
<p>
|
||||
Questions about scans, care plans, billing, or features? Use the support page.
|
||||
</p>
|
||||
<p className="comparison-mini-label">{labels.supportTag}</p>
|
||||
<h3>{labels.supportTitle}</h3>
|
||||
<p>{labels.supportCopy}</p>
|
||||
</Link>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -17,6 +17,9 @@ const LangContext = createContext<LangCtx>({
|
||||
|
||||
function getInitialLang(): Lang {
|
||||
if (typeof document === 'undefined') return 'de'
|
||||
if (window.location.pathname === '/') return 'de'
|
||||
if (window.location.pathname === '/de' || window.location.pathname.startsWith('/de/')) return 'de'
|
||||
if (window.location.pathname === '/es' || window.location.pathname.startsWith('/es/')) return 'es'
|
||||
const match = document.cookie.match(/(?:^|;\s*)lang=([^;]+)/)
|
||||
const val = match?.[1]
|
||||
return val === 'en' || val === 'es' || val === 'de' ? val : 'de'
|
||||
@@ -26,7 +29,9 @@ export function LangProvider({ children }: { children: ReactNode }) {
|
||||
const [lang, setLangState] = useState<Lang>('de')
|
||||
|
||||
useEffect(() => {
|
||||
setLangState(getInitialLang())
|
||||
const initialLang = getInitialLang()
|
||||
document.documentElement.lang = initialLang
|
||||
setLangState(initialLang)
|
||||
}, [])
|
||||
|
||||
const setLang = (l: Lang) => {
|
||||
|
||||
@@ -14,7 +14,7 @@ export const translations = {
|
||||
h1a: 'Dein Urban',
|
||||
h1b: 'Jungle,',
|
||||
h1em: 'besser gepflegt.',
|
||||
desc: 'Scanne Pflanzen, verstehe ihre Beduerfnisse und organisiere Pflege, Erinnerungen und Sammlung in einer App.',
|
||||
desc: 'Scanne Pflanzen, verstehe ihre Bedürfnisse und organisiere Pflege, Erinnerungen und Sammlung in einer App.',
|
||||
primary: 'App entdecken',
|
||||
secondary: 'Mehr erfahren',
|
||||
badge: 'Plant care with AI',
|
||||
@@ -26,7 +26,7 @@ export const translations = {
|
||||
tag: 'Pflanzenhilfe',
|
||||
headline: 'Weniger raten.',
|
||||
sub: 'Schneller verstehen, was deiner Pflanze fehlt.',
|
||||
desc: 'GreenLens hilft dir dabei, Symptome einzuordnen, Pflanzen zu identifizieren und naechste Pflegeschritte klarer zu machen.',
|
||||
desc: 'GreenLens hilft dir dabei, Symptome einzuordnen, Pflanzen zu identifizieren und nächste Pflegeschritte klarer zu machen.',
|
||||
before: 'Vorher',
|
||||
after: 'Nachher',
|
||||
sliderLabel: 'Vergleichs-Slider',
|
||||
@@ -35,30 +35,30 @@ export const translations = {
|
||||
proof2title: 'Pflegeplan strukturieren',
|
||||
proof2desc: 'Weniger Chaos bei Licht, Wasser und Intervallen',
|
||||
proof3title: 'Hinweise an einem Ort',
|
||||
proof3desc: 'Scan, Sammlung und Care Notes zusammengefuehrt',
|
||||
proof3desc: 'Scan, Sammlung und Care Notes zusammengeführt',
|
||||
},
|
||||
features: {
|
||||
tag: 'Features',
|
||||
h2a: 'Alles, was dein',
|
||||
h2b: 'Urban Jungle braucht.',
|
||||
desc: 'Von der ersten Identifikation bis zur laufenden Pflege hilft GreenLens dir, Pflanzen besser zu verstehen und besser zu organisieren. Das Lexikon umfasst ueber 450 Pflanzenarten.',
|
||||
desc: 'Von der ersten Identifikation bis zur laufenden Pflege hilft GreenLens dir, Pflanzen besser zu verstehen und besser zu organisieren. Das Lexikon umfasst über 450 Pflanzenarten.',
|
||||
},
|
||||
cta: {
|
||||
tag: 'Download',
|
||||
h2a: 'Bereit fuer bessere',
|
||||
h2a: 'Bereit für bessere',
|
||||
h2em: 'Pflanzenpflege?',
|
||||
desc: 'GreenLens hilft dir beim Erkennen, Verstehen und Pflegen deiner Pflanzen. Wenn der Store-Link noch nicht live ist, erreichst du uns ueber die Support-Seite.',
|
||||
desc: 'GreenLens hilft dir beim Erkennen, Verstehen und Pflegen deiner Pflanzen. Wenn der Store-Link noch nicht live ist, erreichst du uns über die Support-Seite.',
|
||||
apple: 'Laden im',
|
||||
google: 'Jetzt bei',
|
||||
support: 'Zur',
|
||||
supportLabel: 'Support-Seite',
|
||||
contact: 'Direkt',
|
||||
email: 'E-Mail senden',
|
||||
comingSoon: 'Die App ist bald verfuegbar.',
|
||||
liveNote: 'Die App ist bereits in den Stores verfuegbar.',
|
||||
comingSoon: 'Die App ist bald verfügbar.',
|
||||
liveNote: 'Die App ist bereits in den Stores verfügbar.',
|
||||
},
|
||||
footer: {
|
||||
brand: 'Die App fuer Pflanzenfans, die Sammlung, Identifikation und Pflege an einem Ort wollen.',
|
||||
brand: 'Die App für Pflanzenfans, die Sammlung, Identifikation und Pflege an einem Ort wollen.',
|
||||
copy: '© 2026 GreenLens. Alle Rechte vorbehalten.',
|
||||
cols: [
|
||||
{ title: 'Produkt', links: ['Features', 'Technologie', 'App laden', 'Support'] },
|
||||
|
||||
@@ -17,6 +17,7 @@ export interface SeoRelatedLink {
|
||||
|
||||
export interface SeoPageProfile {
|
||||
slug: string
|
||||
locale?: 'en' | 'de' | 'es'
|
||||
metaTitle: string
|
||||
metaDescription: string
|
||||
canonical: string
|
||||
@@ -335,16 +336,16 @@ const seoPageProfiles: Record<string, SeoPageProfile> = {
|
||||
|
||||
'pflanzen-erkennen-app': {
|
||||
slug: 'pflanzen-erkennen-app',
|
||||
metaTitle: 'Pflanzen erkennen App – KI-Scan mit Pflegeplan & Diagnose | GreenLens',
|
||||
metaTitle: 'Pflanzen erkennen App kostenlos: Foto scannen | GreenLens',
|
||||
metaDescription:
|
||||
'Pflanzen, Blumen & Zimmerpflanzen per Foto erkennen. GreenLens liefert Artname, Pflegeplan, Gießerinnerungen und Diagnose direkt in einer App. Kostenlos →',
|
||||
'Erkenne Pflanzen per Foto: Artname, Pflegeplan, Gießerinnerung und Diagnose in einer App. Kostenlos starten mit GreenLens für iPhone.',
|
||||
canonical: '/pflanzen-erkennen-app',
|
||||
h1: 'Pflanzen erkennen App',
|
||||
tagline: 'Pflanze fotografieren — Name, Pflegeanleitung und Diagnose in einer Sekunde.',
|
||||
tagline: 'Pflanze fotografieren, kostenlos erkennen und direkt wissen, wie du sie pflegst.',
|
||||
directAnswer:
|
||||
'GreenLens ist eine Pflanzenerkennungs-App für iOS und Android. Einfach die Kamera auf eine Pflanze richten, scannen — und sofort erscheinen Artname, Pflegebedarf, Gießerinnerungen und nächste Handlungsempfehlung.',
|
||||
'GreenLens ist eine Pflanzen erkennen App für iOS. Du scannst eine Pflanze per Foto und erhältst sofort Artname, Pflegebedarf, Gießerinnerungen und bei sichtbaren Symptomen eine konkrete Handlungsempfehlung.',
|
||||
definitionBlock:
|
||||
'Eine Pflanzen-App erkennt Pflanzen anhand von Fotos und liefert den Artnamen sowie Pflegeinformationen. GreenLens geht weiter: Jeder Scan erzeugt automatisch einen Pflegeplan, Gießerinnerungen und eine Sammlung; ein separater Gesundheitscheck analysiert Symptome wie gelbe Blätter oder weiche Stiele.',
|
||||
'Eine Pflanzen erkennen App bestimmt Pflanzen anhand von Fotos und liefert den Artnamen sowie Pflegeinformationen. GreenLens geht weiter: Jeder Scan erzeugt automatisch einen Pflegeplan, Gießerinnerungen und eine Sammlung; ein separater Gesundheitscheck analysiert Symptome wie gelbe Blätter oder weiche Stiele.',
|
||||
lastUpdated: 'April 2026',
|
||||
includeAppSchema: true,
|
||||
featureTable: {
|
||||
@@ -391,7 +392,12 @@ const seoPageProfiles: Record<string, SeoPageProfile> = {
|
||||
{
|
||||
question: 'Wie genau erkennt GreenLens Pflanzen?',
|
||||
answer:
|
||||
'GreenLens erkennt über 450 Pflanzenarten zuverlässig — darunter die häufigsten Zimmerpflanzen, Gartenpflanzen und Sukkulenten. Bei seltenen oder regional spezifischen Arten kann die Community-Plattform iNaturalist mehr Expertenwissen bieten. Für Alltagspflanzen ist GreenLens schnell und treffsicher.',
|
||||
'GreenLens erkennt über 450 Pflanzenarten zuverlässig — darunter die häufigsten Zimmerpflanzen, Gartenpflanzen, Blumen und Sukkulenten. Bei seltenen oder regional spezifischen Arten kann die Community-Plattform iNaturalist mehr Expertenwissen bieten. Für Alltagspflanzen ist GreenLens schnell und treffsicher.',
|
||||
},
|
||||
{
|
||||
question: 'Welche Pflanzen erkennen App ist kostenlos?',
|
||||
answer:
|
||||
'GreenLens bietet kostenlose Pflanzenerkennung per Foto. Nach dem Scan siehst du den Namen und einen Pflegeplan; optionale Paid-Funktionen erweitern unbegrenzte Scans und zusätzliche KI-Gesundheitschecks.',
|
||||
},
|
||||
{
|
||||
question: 'Funktioniert GreenLens auch ohne Internetverbindung?',
|
||||
@@ -422,7 +428,7 @@ const seoPageProfiles: Record<string, SeoPageProfile> = {
|
||||
relatedLinks: [
|
||||
{
|
||||
href: '/pflanzen-bestimmen',
|
||||
label: 'Pflanzen bestimmen per Foto',
|
||||
label: 'Pflanzen bestimmen',
|
||||
description: 'Der Hauptvergleich für Pflanzenbestimmung per Foto und Google Lens.',
|
||||
},
|
||||
{
|
||||
@@ -452,16 +458,17 @@ const seoPageProfiles: Record<string, SeoPageProfile> = {
|
||||
const additionalSeoPages: Record<string, SeoPageProfile> = {
|
||||
'blumen-scanner': {
|
||||
slug: 'blumen-scanner',
|
||||
metaTitle: 'Blumen Scanner – Blumen per Foto scannen & sofort erkennen | GreenLens',
|
||||
locale: 'de',
|
||||
metaTitle: 'Blumen Scanner kostenlos: Blumen per Foto erkennen | GreenLens',
|
||||
metaDescription:
|
||||
'Einfach Blumen & Pflanzen per Foto scannen und sofort erkennen. KI-Pflanzenerkennung mit Pflegeplan, Gießerinnerung und Gesundheitscheck. Kostenlos starten →',
|
||||
'Scanne Blumen per Foto und erhalte sofort Name, Pflegeplan und Hinweise bei Krankheiten. Kostenlos starten mit GreenLens für iPhone.',
|
||||
canonical: '/blumen-scanner',
|
||||
h1: 'Blumen Scanner',
|
||||
h1: 'Blumen Scanner kostenlos',
|
||||
tagline: 'Blume fotografieren — sofort Name, Herkunft, Pflegeplan und Erinnerung.',
|
||||
directAnswer:
|
||||
'GreenLens ist ein Blumen Scanner für iOS und Android. Einfach die Kamera auf eine Blume oder Pflanze richten, scannen — und sofort erscheinen Artname, botanische Klassifizierung, Pflegeplan und Gießerinnerung.',
|
||||
'Mit GreenLens kannst du Blumen per Foto scannen, kostenlos erkennen und direkt Pflegehinweise erhalten. Der Blumenscanner zeigt dir Name, botanische Einordnung, Pflegeplan und Gießerinnerung in einer App.',
|
||||
definitionBlock:
|
||||
'Ein Blumen Scanner erkennt Blumen und Pflanzen anhand von Fotos und liefert den Artnamen sowie Pflegeinformationen. GreenLens geht über einfache Namensuche hinaus: Jeder Scan erzeugt automatisch einen Pflegeplan; ein separater Gesundheitscheck analysiert Symptome wie gelbe Blätter, welkende Blüten oder Schädlingsbefall.',
|
||||
'Ein Blumen Scanner erkennt Blumen und Pflanzen anhand von Fotos und liefert den Artnamen sowie Pflegeinformationen. GreenLens geht über einfache Namensuche hinaus: Du kannst Blumen scannen, eine Blume per Foto erkennen, Pflanzen bestimmen und anschließend einen Pflegeplan nutzen; ein separater Gesundheitscheck analysiert Symptome wie gelbe Blätter, welkende Blüten oder Schädlingsbefall.',
|
||||
lastUpdated: 'April 2026',
|
||||
includeAppSchema: true,
|
||||
featureTable: {
|
||||
@@ -515,7 +522,12 @@ const additionalSeoPages: Record<string, SeoPageProfile> = {
|
||||
{
|
||||
question: 'Was ist das für eine Pflanze? Wie finde ich es mit dem Handy heraus?',
|
||||
answer:
|
||||
'Mit GreenLens genügt ein Foto: App öffnen, Kamera auf die Pflanze oder Blume richten und scannen. In unter einer Sekunde erscheinen Artname, Pflanzenportrait und ein vollständiger Pflegeplan. Alternativ kann auch ein Foto aus der Galerie hochgeladen werden.',
|
||||
'Mit GreenLens genügt ein Foto: App öffnen, Kamera auf die Pflanze oder Blume richten und scannen. In unter einer Sekunde erscheinen Artname, Pflanzenportrait und ein vollständiger Pflegeplan. Alternativ kannst du eine Blume per Foto erkennen, indem du ein Bild aus der Galerie hochlädst.',
|
||||
},
|
||||
{
|
||||
question: 'Was ist der Unterschied zwischen Blumenscanner und Blumen bestimmen App?',
|
||||
answer:
|
||||
'Ein Blumenscanner erkennt Blumen direkt über die Kamera oder ein Foto. Eine Blumen bestimmen App sollte danach mehr liefern als nur den Namen: GreenLens ergänzt die Erkennung um Pflegeplan, Gießerinnerung, Sammlung und Hinweise bei Krankheiten.',
|
||||
},
|
||||
{
|
||||
question: 'Kann GreenLens sowohl Blumen als auch Zimmerpflanzen erkennen?',
|
||||
@@ -574,14 +586,14 @@ const additionalSeoPages: Record<string, SeoPageProfile> = {
|
||||
|
||||
'pflanzen-bestimmen': {
|
||||
slug: 'pflanzen-bestimmen',
|
||||
metaTitle: 'Pflanzen bestimmen per Foto – schneller als Google Lens | GreenLens',
|
||||
metaTitle: 'Pflanzen bestimmen per Foto kostenlos | GreenLens',
|
||||
metaDescription:
|
||||
'Pflanze per Foto bestimmen: GreenLens erkennt Artname, erstellt sofort Pflegeplan und Gießerinnerungen — ohne Umweg über Google. Kostenlos testen →',
|
||||
'Pflanze fotografieren und kostenlos bestimmen: GreenLens liefert Artname, Pflegeplan, Gießerinnerung und Gesundheitscheck ohne Google-Umweg.',
|
||||
canonical: '/pflanzen-bestimmen',
|
||||
h1: 'Pflanzen bestimmen per Foto',
|
||||
tagline: 'Pflanze fotografieren — sofort bestimmt, mit Pflegeplan und ohne Google-Umweg.',
|
||||
tagline: 'Pflanze fotografieren, Artname sehen und sofort den passenden Pflegeplan erhalten.',
|
||||
directAnswer:
|
||||
'GreenLens bestimmt Pflanzen per Foto in unter einer Sekunde. Statt auf Google-Suchergebnisse weiterzuleiten, liefert die App direkt Artname, Pflegebedarf, Gießerinnerungen und bei Bedarf eine Gesundheitsdiagnose.',
|
||||
'Mit GreenLens kannst du Pflanzen per Foto kostenlos bestimmen. Statt dich auf Google-Suchergebnisse weiterzuleiten, liefert die App direkt Artname, Pflegebedarf, Gießerinnerungen und bei Bedarf eine Gesundheitsdiagnose.',
|
||||
definitionBlock:
|
||||
'Pflanzen bestimmen bedeutet, anhand eines Fotos die Pflanzenart, den Trivialnamen und die zugehörigen Pflegeanforderungen herauszufinden. Während Google Lens und allgemeine Suchmaschinen Namen und Links liefern, kombiniert GreenLens die Bestimmung mit einem automatischen Pflegeplan, Gießerinnerungen, Sammlung und Gesundheitscheck.',
|
||||
lastUpdated: 'April 2026',
|
||||
@@ -640,7 +652,12 @@ const additionalSeoPages: Record<string, SeoPageProfile> = {
|
||||
{
|
||||
question: 'Wie kann ich eine Pflanze per Foto bestimmen?',
|
||||
answer:
|
||||
'Mit GreenLens: App öffnen, Kamera auf die Pflanze richten, scannen. In unter einer Sekunde erscheinen Artname, botanische Klassifizierung und ein vollständiger Pflegeplan. Alternativ können Fotos aus der Galerie hochgeladen werden.',
|
||||
'Mit GreenLens: App öffnen, Kamera auf die Pflanze richten, scannen. In unter einer Sekunde erscheinen Artname, botanische Klassifizierung und ein vollständiger Pflegeplan. Alternativ kannst du ein Foto aus der Galerie hochladen, wenn du die Pflanze später bestimmen möchtest.',
|
||||
},
|
||||
{
|
||||
question: 'Kann ich Pflanzen per Foto kostenlos bestimmen?',
|
||||
answer:
|
||||
'Ja. GreenLens bietet kostenlose Pflanzenbestimmung per Foto. Du erhältst nach dem Scan den Namen und Pflegehinweise; erweiterte KI-Scans und zusätzliche Gesundheitschecks sind optional kostenpflichtig.',
|
||||
},
|
||||
{
|
||||
question: 'Kann ich Pflanzen mit Google kostenlos bestimmen?',
|
||||
@@ -686,8 +703,13 @@ const additionalSeoPages: Record<string, SeoPageProfile> = {
|
||||
},
|
||||
{
|
||||
href: '/blumen-scanner',
|
||||
label: 'Blumen Scanner',
|
||||
description: 'Blumen per Foto scannen — sofort Name, Herkunft und Pflegeplan.',
|
||||
label: 'Blumen per Foto erkennen',
|
||||
description: 'Blumen scannen — sofort Name, Herkunft und Pflegeplan erhalten.',
|
||||
},
|
||||
{
|
||||
href: '/pflanzen-krankheiten-erkennen',
|
||||
label: 'Pflanzenkrankheiten erkennen',
|
||||
description: 'Gelbe Blätter, Flecken oder Schädlingsbefall per Foto einordnen.',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -803,14 +825,14 @@ const englishSeoPages: Record<string, SeoPageProfile> = {
|
||||
|
||||
'identify-plant-photo': {
|
||||
slug: 'identify-plant-photo',
|
||||
metaTitle: 'Identify Plant by Photo — Instant Name and Care Plan | GreenLens',
|
||||
metaTitle: 'Identify Plant by Photo Free: Name + Care Plan | GreenLens',
|
||||
metaDescription:
|
||||
'Identify any plant by photo with GreenLens: get the species name, care plan, and health check in one app — no redirect to search results.',
|
||||
'Upload or take a plant photo and get the species name, care plan, watering reminders, and health check in one app. Free to start on iPhone.',
|
||||
canonical: '/identify-plant-photo',
|
||||
h1: 'Identify Plant by Photo',
|
||||
tagline: 'Photograph a plant — identified in under a second, with care plan and no search redirect.',
|
||||
tagline: 'Take or upload a plant photo — get the name, care plan, and next step.',
|
||||
directAnswer:
|
||||
'GreenLens identifies plants by photo in under a second. Instead of sending you to search results, the app delivers the species name, care requirements, watering reminders, and a health diagnosis directly in one place.',
|
||||
'GreenLens identifies plants by photo from your camera or gallery. Instead of sending you to search results, the app delivers the species name, care requirements, watering reminders, and a health check directly in one place.',
|
||||
definitionBlock:
|
||||
'Identifying a plant by photo means using a camera image to determine the species, common name, and associated care requirements. While Google Lens and general search engines return a name and links, GreenLens combines identification with an automatic care plan and a health check tool — so the scan leads directly to action.',
|
||||
lastUpdated: 'April 2026',
|
||||
@@ -869,7 +891,12 @@ const englishSeoPages: Record<string, SeoPageProfile> = {
|
||||
{
|
||||
question: 'How do I identify a plant by photo?',
|
||||
answer:
|
||||
'With GreenLens: open the app, point the camera at the plant, and tap Scan. In under a second you get the species name, botanical classification, and a complete care plan. You can also upload a photo from your gallery.',
|
||||
'With GreenLens: open the app, point the camera at the plant, and tap Scan. You get the species name, botanical classification, and a complete care plan. You can also upload a plant photo from your gallery.',
|
||||
},
|
||||
{
|
||||
question: 'Can I identify a plant by uploading a photo?',
|
||||
answer:
|
||||
'Yes. GreenLens works with both live camera scans and uploaded photos from your gallery. A clear photo with visible leaves, flowers, or growth shape gives the best identification result.',
|
||||
},
|
||||
{
|
||||
question: 'What is the best free app to identify plants by photo?',
|
||||
@@ -1035,14 +1062,14 @@ const germanSeoPages2: Record<string, SeoPageProfile> = {
|
||||
|
||||
'pflanzen-pflege-app': {
|
||||
slug: 'pflanzen-pflege-app',
|
||||
metaTitle: 'Pflanzen Gießerinnerung App – Nie mehr vergessen zu gießen | GreenLens',
|
||||
metaTitle: 'Pflanzen Pflege App mit Gießerinnerung | GreenLens',
|
||||
metaDescription:
|
||||
'Gießerinnerung pro Pflanze, automatischer Pflegeplan und KI-Diagnose bei Problemen. GreenLens erinnert genau dann, wenn deine Pflanze Wasser braucht. Kostenlos →',
|
||||
'Pflegeplan, Gießerinnerung pro Pflanze und Diagnose bei gelben Blättern. GreenLens hilft dir, Pflanzen richtig zu gießen und zu pflegen.',
|
||||
canonical: '/pflanzen-pflege-app',
|
||||
h1: 'Pflanzen Pflege App',
|
||||
tagline: 'Gießerinnerungen, die deine Pflanze kennen — nicht nur deinen Kalender.',
|
||||
tagline: 'Pflegepläne und Gießerinnerungen, die zu jeder Pflanze passen.',
|
||||
directAnswer:
|
||||
'GreenLens ist eine Pflanzen Pflege App, die Pflanzenerkennung, Pflegeplanung, Gießerinnerungen und Gesundheitsdiagnose verbindet. Statt generischer Gießeintimer verknüpft sie Pflegeempfehlungen mit der konkreten Pflanze, ihrem Standort und jüngsten Veränderungen.',
|
||||
'GreenLens ist eine Pflanzen Pflege App, die Pflanzenerkennung, Pflegeplanung, Gießerinnerungen und Gesundheitsdiagnose verbindet. Statt generischer Gieß-Timer verknüpft sie Pflegeempfehlungen mit der konkreten Pflanze, ihrem Standort und jüngsten Veränderungen.',
|
||||
definitionBlock:
|
||||
'Eine Pflanzen Pflege App hilft dabei, Gieß-, Dünge- und Pflegepläne für jede einzelne Pflanze zu verwalten. GreenLens erweitert das mit KI-basierten Pflegeplänen aus dem Scan-Ergebnis, kontextbewussten Erinnerungen und einem Gesundheitscheck, damit Pflegeentscheidungen auf dem basieren, was die Pflanze tatsächlich zeigt.',
|
||||
lastUpdated: 'April 2026',
|
||||
@@ -1121,7 +1148,12 @@ const germanSeoPages2: Record<string, SeoPageProfile> = {
|
||||
{
|
||||
question: 'Welche App erinnert mich ans Pflanzen gießen?',
|
||||
answer:
|
||||
'GreenLens erinnert dich pro Pflanze ans Gießen. Nach dem Scan erhält jede Pflanze einen eigenen Pflegeplan, den du an Standort und Zustand anpassen kannst. Dadurch ist die Erinnerung präziser als ein allgemeiner Kalendertermin.',
|
||||
'GreenLens erinnert dich pro Pflanze ans Gießen. Nach dem Scan erhält jede Pflanze einen eigenen Pflegeplan, den du an Standort und Zustand anpassen kannst. Dadurch ist die Gießerinnerung präziser als ein allgemeiner Kalendertermin.',
|
||||
},
|
||||
{
|
||||
question: 'Welche Pflanzen Pflege App hilft bei gelben Blättern?',
|
||||
answer:
|
||||
'GreenLens verbindet Pflegeplan und Gesundheitscheck. Wenn eine Pflanze gelbe Blätter, braune Spitzen oder weiche Stiele zeigt, analysiert die App die Symptome und gibt einen nächsten Schritt statt nur eine allgemeine Erinnerung.',
|
||||
},
|
||||
{
|
||||
question: 'Kann ich für jede Pflanze eine eigene Gießerinnerung setzen?',
|
||||
@@ -1160,14 +1192,14 @@ const germanSeoPages2: Record<string, SeoPageProfile> = {
|
||||
|
||||
'zimmerpflanzen-bestimmen': {
|
||||
slug: 'zimmerpflanzen-bestimmen',
|
||||
metaTitle: 'Zimmerpflanzen bestimmen per Foto – Monstera, Efeutute & mehr | GreenLens',
|
||||
metaTitle: 'Zimmerpflanzen bestimmen per Foto kostenlos | GreenLens',
|
||||
metaDescription:
|
||||
'Zimmerpflanze per Foto bestimmen: GreenLens erkennt Monstera, Efeutute, Ficus, Orchideen und Sukkulenten — mit sofortigem Pflegeplan und Gießerinnerung.',
|
||||
'Bestimme Zimmerpflanzen per Foto: Monstera, Efeutute, Ficus, Orchideen und Sukkulenten erkennen, Pflegeplan erhalten und richtig gießen.',
|
||||
canonical: '/zimmerpflanzen-bestimmen',
|
||||
h1: 'Zimmerpflanzen bestimmen',
|
||||
tagline: 'Zimmerpflanze fotografieren — Artname, Pflegebedarf und Gießplan in einer Sekunde.',
|
||||
tagline: 'Zimmerpflanze fotografieren, Namen erkennen und den passenden Pflegeplan erhalten.',
|
||||
directAnswer:
|
||||
'GreenLens bestimmt Zimmerpflanzen per Foto in unter einer Sekunde. Die App liefert Artname, botanische Einordnung und einen vollständigen Pflegeplan — direkt nach dem Scan, ohne Umweg über externe Seiten.',
|
||||
'Mit GreenLens kannst du Zimmerpflanzen per Foto bestimmen und direkt Pflegehinweise erhalten. Die App erkennt häufige Indoor-Pflanzen wie Monstera, Efeutute, Ficus, Orchideen, Kakteen und Sukkulenten und erstellt daraus einen Pflegeplan.',
|
||||
definitionBlock:
|
||||
'Zimmerpflanzen bestimmen bedeutet, anhand eines Fotos die Pflanzenart, den Trivialnamen und die Pflegeanforderungen für Innenraumbedingungen herauszufinden. GreenLens kombiniert die Bestimmung mit einem automatischen Pflegeplan, Gießerinnerungen und einem Gesundheitscheck, damit die Erkennung direkt zur Pflege führt.',
|
||||
lastUpdated: 'April 2026',
|
||||
@@ -1226,7 +1258,12 @@ const germanSeoPages2: Record<string, SeoPageProfile> = {
|
||||
{
|
||||
question: 'Welche Zimmerpflanzen kann GreenLens erkennen?',
|
||||
answer:
|
||||
'GreenLens erkennt über 450 Pflanzenarten, darunter die häufigsten Zimmerpflanzen: Monstera, Pothos, Ficus, Efeutute, Yucca, Orchideen, Kakteen, Sukkulenten, Sansevieria und viele mehr. Für seltene oder regional ungewöhnliche Arten hat iNaturalist eine größere Expertencommunity.',
|
||||
'GreenLens erkennt über 450 Pflanzenarten, darunter die häufigsten Zimmerpflanzen: Monstera, Pothos, Ficus, Efeutute, Yucca, Orchideen, Kakteen, Sukkulenten, Sansevieria, Calathea und viele mehr. Für seltene oder regional ungewöhnliche Arten hat iNaturalist eine größere Expertencommunity.',
|
||||
},
|
||||
{
|
||||
question: 'Kann ich Zimmerpflanzen kostenlos per Foto bestimmen?',
|
||||
answer:
|
||||
'Ja. GreenLens bietet kostenlose Zimmerpflanzen-Erkennung per Foto. Nach dem Scan erhältst du den Namen, Pflegehinweise für Licht und Wasser sowie einen Startpunkt für deine Gießerinnerungen.',
|
||||
},
|
||||
{
|
||||
question: 'Wie genau ist GreenLens bei Zimmerpflanzen?',
|
||||
@@ -1927,6 +1964,44 @@ const allSeoPages = {
|
||||
...highVolumeSeoPages,
|
||||
}
|
||||
|
||||
export const englishSeoPageSlugs = [
|
||||
'best-plant-identification-app',
|
||||
'plant-identifier-app',
|
||||
'plant-scanner',
|
||||
'flower-scanner',
|
||||
'houseplant-identifier',
|
||||
'succulent-identifier',
|
||||
'identify-plant-photo',
|
||||
'plant-disease-identifier',
|
||||
'plant-health-app',
|
||||
'plant-care-app',
|
||||
] as const
|
||||
|
||||
export const germanSeoPageSlugs = [
|
||||
'pflanzen-erkennen-kostenlos',
|
||||
'pflanzen-erkennen-app',
|
||||
'pflanzen-bestimmen',
|
||||
'blumen-scanner',
|
||||
'zimmerpflanzen-bestimmen',
|
||||
'pflanzen-pflege-app',
|
||||
'pflanzen-krankheiten-erkennen',
|
||||
] as const
|
||||
|
||||
export function getSeoPageBySlug(slug: string): SeoPageProfile | undefined {
|
||||
return allSeoPages[slug]
|
||||
}
|
||||
|
||||
export function getGermanSeoPageBySlug(slug: string): SeoPageProfile | undefined {
|
||||
const profile = allSeoPages[slug]
|
||||
|
||||
if (!profile || !(germanSeoPageSlugs as readonly string[]).includes(slug)) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
return {
|
||||
...profile,
|
||||
locale: 'de',
|
||||
canonical: profile.canonical,
|
||||
relatedLinks: profile.relatedLinks,
|
||||
}
|
||||
}
|
||||
|
||||
388
greenlns-landing/lib/spanishSeoPages.ts
Normal file
388
greenlns-landing/lib/spanishSeoPages.ts
Normal file
@@ -0,0 +1,388 @@
|
||||
import type { SeoPageProfile } from '@/lib/seoPages'
|
||||
|
||||
export const spanishSeoPageProfiles: Record<string, SeoPageProfile> = {
|
||||
'identificador-de-plantas': {
|
||||
slug: 'identificador-de-plantas',
|
||||
locale: 'es',
|
||||
metaTitle: 'Identificador de plantas por foto | GreenLens',
|
||||
metaDescription:
|
||||
'Identifica plantas por foto con GreenLens y recibe nombre, cuidados, recordatorios y diagnostico de salud en una sola app.',
|
||||
canonical: '/es/identificador-de-plantas',
|
||||
h1: 'Identificador de plantas',
|
||||
tagline: 'Escanea una planta y entiende que necesita en segundos.',
|
||||
directAnswer:
|
||||
'GreenLens es un identificador de plantas para iOS y Android. Toma una foto, recibe el nombre de la especie y pasa directamente a cuidados, riego y diagnostico si la planta muestra sintomas.',
|
||||
definitionBlock:
|
||||
'Un identificador de plantas usa IA para comparar una foto con una base de datos vegetal. GreenLens conecta esa identificacion con un plan de cuidado, recordatorios y revision de salud.',
|
||||
lastUpdated: 'Mayo 2026',
|
||||
includeAppSchema: true,
|
||||
featureTable: {
|
||||
title: 'GreenLens frente a un identificador basico',
|
||||
alternativeLabel: 'Apps basicas',
|
||||
rows: [
|
||||
{
|
||||
feature: 'Identificacion por foto',
|
||||
greenlens: 'Nombre, especie y perfil de cuidado en el mismo flujo.',
|
||||
alternative: 'Normalmente solo muestran el nombre o enlaces externos.',
|
||||
},
|
||||
{
|
||||
feature: 'Plan de cuidado',
|
||||
greenlens: 'Riego, luz y fertilizacion despues del escaneo.',
|
||||
alternative: 'El usuario debe buscar y configurar todo manualmente.',
|
||||
},
|
||||
{
|
||||
feature: 'Diagnostico de salud',
|
||||
greenlens: 'Analiza sintomas como hojas amarillas, manchas o tallos blandos.',
|
||||
alternative: 'Suele estar ausente o separado de la identificacion.',
|
||||
},
|
||||
],
|
||||
},
|
||||
greenLensIf: [
|
||||
'Quieres identificar una planta y saber que hacer despues.',
|
||||
'Tienes plantas de interior, jardin o suculentas y necesitas una guia sencilla.',
|
||||
'Quieres guardar tus plantas con notas y recordatorios.',
|
||||
],
|
||||
notBestIf: [
|
||||
'Necesitas identificacion botanica profesional para especies raras.',
|
||||
'Solo quieres una busqueda ocasional sin seguimiento de cuidado.',
|
||||
],
|
||||
faqs: [
|
||||
{
|
||||
question: '¿GreenLens identifica plantas desde fotos antiguas?',
|
||||
answer: 'Si. Puedes usar una foto de la galeria o tomar una nueva imagen desde la app.',
|
||||
},
|
||||
{
|
||||
question: '¿GreenLens tambien ayuda con el cuidado?',
|
||||
answer:
|
||||
'Si. Cada identificacion se conecta con recomendaciones de riego, luz, fertilizacion y seguimiento.',
|
||||
},
|
||||
{
|
||||
question: '¿Funciona para plantas de interior?',
|
||||
answer:
|
||||
'Si. GreenLens cubre plantas comunes de interior, plantas de jardin, flores y suculentas.',
|
||||
},
|
||||
],
|
||||
relatedLinks: [
|
||||
{
|
||||
href: '/es/escaner-de-plantas',
|
||||
label: 'Escaner de plantas',
|
||||
description: 'Escanea hojas, flores o plantas completas desde el movil.',
|
||||
},
|
||||
{
|
||||
href: '/es/app-para-cuidar-plantas',
|
||||
label: 'App para cuidar plantas',
|
||||
description: 'Organiza riego, luz y recordatorios para cada planta.',
|
||||
},
|
||||
{
|
||||
href: '/es/diagnosticar-enfermedades-plantas',
|
||||
label: 'Diagnosticar enfermedades de plantas',
|
||||
description: 'Analiza sintomas y recibe el siguiente paso mas seguro.',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
'app-para-cuidar-plantas': {
|
||||
slug: 'app-para-cuidar-plantas',
|
||||
locale: 'es',
|
||||
metaTitle: 'App para cuidar plantas | GreenLens',
|
||||
metaDescription:
|
||||
'GreenLens te ayuda a cuidar plantas con identificacion, planes de riego, recordatorios y diagnostico de problemas visibles.',
|
||||
canonical: '/es/app-para-cuidar-plantas',
|
||||
h1: 'App para cuidar plantas',
|
||||
tagline: 'Recordatorios y cuidados basados en la planta, no solo en el calendario.',
|
||||
directAnswer:
|
||||
'GreenLens combina identificacion de plantas, planes de cuidado, recordatorios y diagnostico de salud para que cada planta tenga una rutina clara.',
|
||||
definitionBlock:
|
||||
'Una app para cuidar plantas ayuda a organizar riego, fertilizacion, luz y seguimiento. GreenLens añade IA para identificar la planta y ajustar mejor las recomendaciones.',
|
||||
lastUpdated: 'Mayo 2026',
|
||||
includeAppSchema: true,
|
||||
featureTable: {
|
||||
title: 'Que aporta GreenLens al cuidado diario',
|
||||
alternativeLabel: 'Recordatorios genericos',
|
||||
rows: [
|
||||
{
|
||||
feature: 'Riego',
|
||||
greenlens: 'Recomendaciones ligadas a la especie y al contexto.',
|
||||
alternative: 'Intervalos fijos sin mirar el estado de la planta.',
|
||||
},
|
||||
{
|
||||
feature: 'Coleccion',
|
||||
greenlens: 'Perfil individual por planta con notas y fotos.',
|
||||
alternative: 'Lista simple de tareas sin contexto vegetal.',
|
||||
},
|
||||
{
|
||||
feature: 'Salud',
|
||||
greenlens: 'El diagnostico conecta sintomas con decisiones de cuidado.',
|
||||
alternative: 'El cuidado y la salud suelen estar separados.',
|
||||
},
|
||||
],
|
||||
},
|
||||
greenLensIf: [
|
||||
'Quieres organizar varias plantas en una sola app.',
|
||||
'Necesitas recordatorios de riego y cuidado por planta.',
|
||||
'Quieres entender si una rutina esta causando problemas.',
|
||||
],
|
||||
notBestIf: [
|
||||
'Solo necesitas un temporizador universal.',
|
||||
'Gestionas una operacion agricola o vivero profesional.',
|
||||
],
|
||||
faqs: [
|
||||
{
|
||||
question: '¿GreenLens me recuerda cuando regar?',
|
||||
answer: 'Si. Puedes usar recordatorios de cuidado para organizar cada planta.',
|
||||
},
|
||||
{
|
||||
question: '¿Sirve para principiantes?',
|
||||
answer:
|
||||
'Si. GreenLens esta pensado para convertir dudas comunes en pasos de cuidado claros.',
|
||||
},
|
||||
{
|
||||
question: '¿Puedo guardar varias plantas?',
|
||||
answer: 'Si. La app esta diseñada para mantener una coleccion personal de plantas.',
|
||||
},
|
||||
],
|
||||
relatedLinks: [
|
||||
{
|
||||
href: '/es/identificador-de-plantas',
|
||||
label: 'Identificador de plantas',
|
||||
description: 'Empieza identificando la planta antes de crear su rutina.',
|
||||
},
|
||||
{
|
||||
href: '/es/diagnosticar-enfermedades-plantas',
|
||||
label: 'Diagnostico de plantas',
|
||||
description: 'Cuando una planta muestra sintomas, revisa la causa probable.',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
'diagnosticar-enfermedades-plantas': {
|
||||
slug: 'diagnosticar-enfermedades-plantas',
|
||||
locale: 'es',
|
||||
metaTitle: 'Diagnosticar enfermedades de plantas | GreenLens',
|
||||
metaDescription:
|
||||
'Analiza hojas amarillas, manchas, tallos blandos y otros sintomas con GreenLens para recibir una accion concreta.',
|
||||
canonical: '/es/diagnosticar-enfermedades-plantas',
|
||||
h1: 'Diagnosticar enfermedades de plantas',
|
||||
tagline: 'Cuando algo se ve mal, encuentra el siguiente paso correcto.',
|
||||
directAnswer:
|
||||
'GreenLens analiza sintomas visibles de una planta y sugiere la causa mas probable con una accion concreta, como revisar humedad, ajustar luz o detener el riego.',
|
||||
definitionBlock:
|
||||
'Diagnosticar enfermedades de plantas significa interpretar sintomas como manchas, hojas amarillas, marchitez o tallos blandos. GreenLens prioriza la accion mas segura antes que una lista larga de posibilidades.',
|
||||
lastUpdated: 'Mayo 2026',
|
||||
includeAppSchema: true,
|
||||
featureTable: {
|
||||
title: 'Diagnostico practico para plantas con sintomas',
|
||||
alternativeLabel: 'Guias genericas',
|
||||
rows: [
|
||||
{
|
||||
feature: 'Sintomas visibles',
|
||||
greenlens: 'Analiza patrones de hojas, tallos y cambios recientes.',
|
||||
alternative: 'Listas amplias sin priorizar causas.',
|
||||
},
|
||||
{
|
||||
feature: 'Siguiente paso',
|
||||
greenlens: 'Recomienda una accion clara y de bajo riesgo.',
|
||||
alternative: 'Consejos generales dificiles de ordenar.',
|
||||
},
|
||||
{
|
||||
feature: 'Prevencion de exceso de cuidado',
|
||||
greenlens: 'Ayuda a evitar regar, fertilizar o mover la planta demasiado pronto.',
|
||||
alternative: 'A menudo propone mas tareas sin contexto.',
|
||||
},
|
||||
],
|
||||
},
|
||||
greenLensIf: [
|
||||
'Tu planta tiene hojas amarillas, manchas o tallos blandos.',
|
||||
'No sabes si el problema es agua, luz, raices o plagas.',
|
||||
'Quieres evitar empeorar la situacion con una accion impulsiva.',
|
||||
],
|
||||
notBestIf: [
|
||||
'Necesitas un analisis de laboratorio.',
|
||||
'Gestionas cultivos comerciales a gran escala.',
|
||||
],
|
||||
faqs: [
|
||||
{
|
||||
question: '¿GreenLens puede detectar pudricion de raices?',
|
||||
answer:
|
||||
'Puede identificar señales visibles asociadas, como tallos blandos, hojas amarillas y suelo demasiado humedo, y recomendar que revisar primero.',
|
||||
},
|
||||
{
|
||||
question: '¿Por que se ponen amarillas las hojas?',
|
||||
answer:
|
||||
'Las causas comunes son exceso de agua, falta de luz, daño de raices o desequilibrio de nutrientes.',
|
||||
},
|
||||
{
|
||||
question: '¿Sustituye a un experto?',
|
||||
answer:
|
||||
'No para casos raros o comerciales. Para problemas comunes de plantas domesticas, ayuda a decidir el siguiente paso.',
|
||||
},
|
||||
],
|
||||
relatedLinks: [
|
||||
{
|
||||
href: '/es/app-para-cuidar-plantas',
|
||||
label: 'App para cuidar plantas',
|
||||
description: 'Crea una rutina que reduzca problemas futuros.',
|
||||
},
|
||||
{
|
||||
href: '/es/identificador-de-plantas',
|
||||
label: 'Identificador de plantas',
|
||||
description: 'Identifica primero la planta para orientar mejor el cuidado.',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
'escaner-de-plantas': {
|
||||
slug: 'escaner-de-plantas',
|
||||
locale: 'es',
|
||||
metaTitle: 'Escaner de plantas | GreenLens',
|
||||
metaDescription:
|
||||
'Escanea plantas con tu movil y recibe nombre, perfil, cuidado y diagnostico con GreenLens.',
|
||||
canonical: '/es/escaner-de-plantas',
|
||||
h1: 'Escaner de plantas',
|
||||
tagline: 'De una foto a una decision de cuidado mas clara.',
|
||||
directAnswer:
|
||||
'El escaner de GreenLens identifica plantas desde una foto y conecta el resultado con recomendaciones de cuidado y salud.',
|
||||
definitionBlock:
|
||||
'Un escaner de plantas usa la camara del movil para reconocer hojas, flores o forma de crecimiento. GreenLens convierte ese escaneo en una ficha util para cuidar la planta.',
|
||||
lastUpdated: 'Mayo 2026',
|
||||
includeAppSchema: true,
|
||||
featureTable: {
|
||||
title: 'Que hace el escaner de GreenLens',
|
||||
alternativeLabel: 'Busqueda por imagen',
|
||||
rows: [
|
||||
{
|
||||
feature: 'Camara o galeria',
|
||||
greenlens: 'Permite usar fotos nuevas o existentes.',
|
||||
alternative: 'Puede limitarse a resultados de busqueda.',
|
||||
},
|
||||
{
|
||||
feature: 'Resultado accionable',
|
||||
greenlens: 'Incluye cuidado, recordatorios y revision de salud.',
|
||||
alternative: 'Suele terminar en el nombre de la planta.',
|
||||
},
|
||||
{
|
||||
feature: 'Coleccion',
|
||||
greenlens: 'Guarda plantas escaneadas para seguimiento.',
|
||||
alternative: 'No mantiene una coleccion de cuidado.',
|
||||
},
|
||||
],
|
||||
},
|
||||
greenLensIf: [
|
||||
'Quieres escanear plantas rapidamente desde el movil.',
|
||||
'Quieres guardar los resultados para cuidarlas despues.',
|
||||
'Buscas algo mas practico que una busqueda web.',
|
||||
],
|
||||
notBestIf: [
|
||||
'Solo quieres comparar imagenes en la web.',
|
||||
'Necesitas identificacion cientifica comunitaria para especies raras.',
|
||||
],
|
||||
faqs: [
|
||||
{
|
||||
question: '¿Puedo escanear flores?',
|
||||
answer: 'Si. GreenLens puede usar hojas, flores o fotos completas de la planta.',
|
||||
},
|
||||
{
|
||||
question: '¿Necesito internet?',
|
||||
answer: 'Si, los escaneos y diagnosticos requieren conexion.',
|
||||
},
|
||||
{
|
||||
question: '¿El resultado se puede guardar?',
|
||||
answer: 'Si, puedes guardar plantas en tu coleccion para seguimiento.',
|
||||
},
|
||||
],
|
||||
relatedLinks: [
|
||||
{
|
||||
href: '/es/identificador-de-plantas',
|
||||
label: 'Identificador de plantas',
|
||||
description: 'Identifica la especie y recibe informacion de cuidado.',
|
||||
},
|
||||
{
|
||||
href: '/es/app-para-cuidar-plantas',
|
||||
label: 'App para cuidar plantas',
|
||||
description: 'Convierte cada escaneo en una rutina de cuidado.',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
'comparar-google-lens': {
|
||||
slug: 'comparar-google-lens',
|
||||
locale: 'es',
|
||||
metaTitle: 'GreenLens vs Google Lens para plantas | Comparacion',
|
||||
metaDescription:
|
||||
'Google Lens identifica el nombre. GreenLens tambien ofrece cuidado, diagnostico y recordatorios. Compara cual conviene para plantas.',
|
||||
canonical: '/es/comparar/google-lens',
|
||||
h1: 'GreenLens vs Google Lens para plantas',
|
||||
tagline: 'Google Lens encuentra el nombre. GreenLens ayuda con lo que viene despues.',
|
||||
directAnswer:
|
||||
'Google Lens es util para reconocer una planta rapidamente. GreenLens esta diseñado para propietarios de plantas: identifica, crea un plan de cuidado, guarda la planta y ayuda con sintomas.',
|
||||
definitionBlock:
|
||||
'La diferencia principal es el objetivo. Google Lens es busqueda visual general; GreenLens es una app especializada en identificacion, cuidado y diagnostico de plantas.',
|
||||
lastUpdated: 'Mayo 2026',
|
||||
includeAppSchema: true,
|
||||
featureTable: {
|
||||
title: 'GreenLens frente a Google Lens',
|
||||
alternativeLabel: 'Google Lens',
|
||||
rows: [
|
||||
{
|
||||
feature: 'Identificacion',
|
||||
greenlens: 'Resultado dentro de una app especializada en plantas.',
|
||||
alternative: 'Busqueda visual general con enlaces a resultados web.',
|
||||
},
|
||||
{
|
||||
feature: 'Cuidado',
|
||||
greenlens: 'Plan, riego, luz y recordatorios despues del escaneo.',
|
||||
alternative: 'No incluye rutina de cuidado.',
|
||||
},
|
||||
{
|
||||
feature: 'Diagnostico',
|
||||
greenlens: 'Revisa sintomas y sugiere el siguiente paso.',
|
||||
alternative: 'No esta diseñado para diagnosticar problemas de salud vegetal.',
|
||||
},
|
||||
],
|
||||
},
|
||||
greenLensIf: [
|
||||
'Quieres saber como cuidar la planta despues de identificarla.',
|
||||
'Tu planta muestra sintomas y necesitas una accion concreta.',
|
||||
'Quieres una coleccion y recordatorios en la misma app.',
|
||||
],
|
||||
notBestIf: [
|
||||
'Solo necesitas una busqueda visual rapida y gratuita.',
|
||||
'No quieres instalar una app especializada.',
|
||||
],
|
||||
faqs: [
|
||||
{
|
||||
question: '¿Google Lens basta para identificar plantas?',
|
||||
answer:
|
||||
'Para obtener un nombre rapido puede bastar. Para cuidado, diagnostico y seguimiento, GreenLens cubre mas del flujo.',
|
||||
},
|
||||
{
|
||||
question: '¿GreenLens reemplaza Google Lens?',
|
||||
answer:
|
||||
'No como herramienta general. GreenLens es mejor cuando el objetivo es cuidar plantas, no buscar cualquier objeto.',
|
||||
},
|
||||
{
|
||||
question: '¿Cual elegir para hojas amarillas?',
|
||||
answer:
|
||||
'GreenLens, porque analiza sintomas y recomienda el siguiente paso en vez de solo buscar imagenes similares.',
|
||||
},
|
||||
],
|
||||
relatedLinks: [
|
||||
{
|
||||
href: '/es/identificador-de-plantas',
|
||||
label: 'Identificador de plantas',
|
||||
description: 'Identifica plantas y continua con su cuidado.',
|
||||
},
|
||||
{
|
||||
href: '/es/diagnosticar-enfermedades-plantas',
|
||||
label: 'Diagnosticar enfermedades',
|
||||
description: 'Entiende sintomas y acciones de rescate.',
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
export const spanishSeoPageSlugs = Object.keys(spanishSeoPageProfiles)
|
||||
|
||||
export function getSpanishSeoPageBySlug(slug: string): SeoPageProfile | undefined {
|
||||
return spanishSeoPageProfiles[slug]
|
||||
}
|
||||
@@ -6,6 +6,30 @@ const nextConfig: NextConfig = {
|
||||
turbopack: {
|
||||
root: path.join(__dirname),
|
||||
},
|
||||
async redirects() {
|
||||
const germanSeoRedirects = [
|
||||
'/pflanzen-erkennen-kostenlos',
|
||||
'/pflanzen-erkennen-app',
|
||||
'/pflanzen-bestimmen',
|
||||
'/blumen-scanner',
|
||||
'/zimmerpflanzen-bestimmen',
|
||||
'/pflanzen-pflege-app',
|
||||
'/pflanzen-krankheiten-erkennen',
|
||||
].map((slug) => ({
|
||||
source: `/de${slug}`,
|
||||
destination: slug,
|
||||
permanent: true,
|
||||
}))
|
||||
|
||||
return [
|
||||
{
|
||||
source: '/de',
|
||||
destination: '/',
|
||||
permanent: true,
|
||||
},
|
||||
...germanSeoRedirects,
|
||||
]
|
||||
},
|
||||
};
|
||||
|
||||
export default nextConfig;
|
||||
|
||||
Reference in New Issue
Block a user