verbesserte Copy

This commit is contained in:
2026-07-26 23:16:29 +02:00
parent c7c1864fc6
commit 50c0f33dd7
26 changed files with 1476 additions and 142 deletions

View File

@@ -2,7 +2,7 @@
"expo": {
"name": "GreenLens",
"slug": "greenlens",
"version": "2.4.2",
"version": "2.4.4",
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "automatic",
@@ -19,6 +19,7 @@
"supportsTablet": true,
"usesAppleSignIn": true,
"bundleIdentifier": "com.greenlens.app",
"buildNumber": "122",
"infoPlist": {
"NSCameraUsageDescription": "GreenLens needs camera access to identify plants.",
"NSPhotoLibraryUsageDescription": "GreenLens needs photo library access to identify plants from your gallery.",
@@ -55,7 +56,10 @@
"NSExtensionActivationSupportsWebPageWithMaxCount": 1,
"NSExtensionActivationSupportsImageWithMaxCount": 1
},
"androidIntentFilters": ["text/*", "image/*"],
"androidIntentFilters": [
"text/*",
"image/*"
],
"iosShareExtensionName": "GreenLens Share",
"iosAppGroupIdentifier": "group.com.greenlens.app",
"preprocessorInjectJS": "try{function glAddCandidate(list,value){if(value&&typeof value==='string'&&list.indexOf(value)===-1){list.push(value)}} function glSrcsetCandidate(value){if(!value||typeof value!=='string')return null;var parts=value.split(',').map(function(item){return item.trim().split(/\\s+/)[0]}).filter(Boolean);return parts.length?parts[parts.length-1]:null} function glEach(selector,callback){var nodes=document.querySelectorAll(selector);for(var i=0;i<nodes.length;i++){callback(nodes[i])}} var glCandidates=[];['og:image','og:image:url','og:image:secure_url','twitter:image','twitter:image:src','image'].forEach(function(key){glAddCandidate(glCandidates,metas[key])}); glEach('meta[itemprop=\"image\"]',function(meta){glAddCandidate(glCandidates,meta.getAttribute('content'))}); glEach('img',function(img){glAddCandidate(glCandidates,img.currentSrc);glAddCandidate(glCandidates,img.src);glAddCandidate(glCandidates,img.getAttribute('data-src'));glAddCandidate(glCandidates,img.getAttribute('data-original'));glAddCandidate(glCandidates,img.getAttribute('data-lazy-src'));glAddCandidate(glCandidates,glSrcsetCandidate(img.getAttribute('srcset')))}); glEach('picture source,source',function(source){glAddCandidate(glCandidates,source.src);glAddCandidate(glCandidates,source.getAttribute('src'));glAddCandidate(glCandidates,glSrcsetCandidate(source.getAttribute('srcset')))}); glEach('video',function(video){glAddCandidate(glCandidates,video.getAttribute('poster'))}); glEach('[style*=\"background-image\"]',function(el){var bg=(el.style&&el.style.backgroundImage)||'';var match=bg.match(/url\\([\"']?([^\"')]+)[\"']?\\)/);if(match){glAddCandidate(glCandidates,match[1])}});metas['greenlens:imageCandidates']=JSON.stringify(glCandidates.slice(0,12));metas['greenlens:imageCandidateCount']=String(glCandidates.length);metas['og:image']=metas['og:image']||glCandidates[0]}catch(e){metas['greenlens:preprocessorError']=String(e)}"

View File

@@ -1,13 +1,13 @@
{
"cli": {
"version": ">= 3.0.0",
"appVersionSource": "remote"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
{
"cli": {
"version": ">= 3.0.0",
"appVersionSource": "local"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"node": "22.18.0",
"distribution": "internal",
@@ -29,7 +29,7 @@
"EXPO_PUBLIC_STRIPE_PUBLISHABLE_KEY": "pk_live_51SHpSLJYShvDMH3vXGaCFTgSDBZmjLUuw12rcvZFPwxfdEK1zRGG5mXFTMs6vMkgp7Udj07eZPDTNijhQn29VYpe00gzX8pBKN",
"EXPO_PUBLIC_REVENUECAT_IOS_API_KEY": "appl_hrjmLmIUUTojZygbsisNqQqrHbX"
}
}
}
},
"submit": {
"production": {

View File

@@ -0,0 +1,4 @@
import { buildSeoPageMetadata, createSeoPage } from '@/lib/seoPageFactory'
export const metadata = buildSeoPageMetadata('braune-blattspitzen')
export default createSeoPage('braune-blattspitzen')

View File

@@ -0,0 +1,4 @@
import { buildSeoPageMetadata, createSeoPage } from '@/lib/seoPageFactory'
export const metadata = buildSeoPageMetadata('gelbe-blaetter-zimmerpflanze')
export default createSeoPage('gelbe-blaetter-zimmerpflanze')

View File

@@ -59,7 +59,7 @@ export default function OGImage() {
</div>
<div style={{ marginTop: 56, display: 'flex', gap: 16 }}>
{['450+ plant species', 'AI-powered scans', 'iOS & Android'].map((label) => (
{['450+ plant species', 'Health check with next steps', 'iPhone & iPad'].map((label) => (
<div
key={label}
style={{

View File

@@ -0,0 +1,4 @@
import { buildSeoPageMetadata, createSeoPage } from '@/lib/seoPageFactory'
export const metadata = buildSeoPageMetadata('pflanze-haengt-nach-umtopfen')
export default createSeoPage('pflanze-haengt-nach-umtopfen')

View File

@@ -0,0 +1,4 @@
import { buildSeoPageMetadata, createSeoPage } from '@/lib/seoPageFactory'
export const metadata = buildSeoPageMetadata('trauermuecken-blumenerde')
export default createSeoPage('trauermuecken-blumenerde')

View File

@@ -0,0 +1,4 @@
import { buildSeoPageMetadata, createSeoPage } from '@/lib/seoPageFactory'
export const metadata = buildSeoPageMetadata('ueberwaessert-oder-zu-trocken')
export default createSeoPage('ueberwaessert-oder-zu-trocken')

View File

@@ -0,0 +1,4 @@
import { buildSeoPageMetadata, createSeoPage } from '@/lib/seoPageFactory'
export const metadata = buildSeoPageMetadata('wurzelfaeule-erkennen')
export default createSeoPage('wurzelfaeule-erkennen')

View File

@@ -37,11 +37,11 @@ export default function CTA() {
<span className="store-btn-big">{hasIosStoreUrl ? 'App Store' : t.cta.supportLabel}</span>
</div>
</a>
<a
href={hasAndroidStoreUrl ? siteConfig.androidPlayStoreUrl : '/support'}
className="store-btn"
id="cta-googleplay"
aria-label="Google Play or contact"
<a
href={hasAndroidStoreUrl ? siteConfig.androidPlayStoreUrl : '/support'}
className="store-btn"
id="cta-googleplay"
aria-label={hasAndroidStoreUrl ? 'Google Play' : 'Contact support'}
>
<svg className="store-btn-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
<path d="M3.18 23.76c.33.18.7.24 1.08.17L14.84 12 11.17 8.33 3.18 23.76zm17.16-12.38-3.32-1.89-3.78 3.78 3.78 3.78 3.34-1.9c.95-.54.95-1.92-.02-2.77zM2.01 1.11C1.7 1.44 1.5 1.97 1.5 2.67v18.66c0 .7.2 1.23.51 1.56l.08.08L12.16 12v-.22L2.09 1.03l-.08.08zm9.16 10.67 2.67 2.67-10.5 5.97 7.83-8.64z" />

View File

@@ -9,66 +9,66 @@ const faqs = [
question: {
en: 'How does GreenLens identify a plant?',
de: 'Wie erkennt GreenLens eine Pflanze?',
es: '¿Cómo identifica GreenLens una planta?'
es: '¿Cómo 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 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 más rápido.'
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 más rápido.'
}
},
{
question: {
en: 'Is GreenLens free to use?',
de: 'Ist GreenLens kostenlos?',
es: '¿Es GreenLens gratuito?'
es: '¿Es GreenLens gratuito?'
},
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 zusätzlich kostenpflichtige Optionen wie Abos und Credit-Top-ups für erweiterte KI-Funktionen.',
es: 'GreenLens incluye funciones gratuitas y también opciones de pago como suscripciones y créditos para funciones de IA más amplias.'
en: 'One scan is free without an account, and you get three more after signing up. Beyond that GreenLens Pro is required — monthly or yearly, with current pricing shown in the App Store and cancellation any time in your iPhone settings. Optional credit packs exist for heavy use; you do not need them to start.',
de: 'Ein Scan ist gratis, ganz ohne Anmeldung. Nach der Anmeldung bekommst du drei weitere. Danach brauchst du GreenLens Pro — Monats- oder Jahresabo mit den aktuellen Preisen im App Store, jederzeit über die iPhone-Einstellungen kündbar. Optionale Credit-Pakete gibt es für intensive Nutzung; zum Start brauchst du sie nicht.',
es: 'Un escaneo es gratis, sin crear cuenta. Tras registrarte recibes tres más. A partir de ahí necesitas GreenLens Pro: suscripción mensual o anual, con los precios actuales en la App Store y cancelación en cualquier momento desde los ajustes del iPhone. Hay paquetes de créditos opcionales para uso intensivo; no los necesitas para empezar.'
}
},
{
question: {
en: 'Can I use GreenLens offline?',
de: 'Kann ich GreenLens offline nutzen?',
es: '¿Puedo usar GreenLens sin conexión?'
es: '¿Puedo usar GreenLens sin conexión?'
},
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 benötigen eine Internetverbindung. Deine gespeicherte Sammlung, Pflegenotizen und Gieß-Erinnerungen sind offline verfügbar.',
es: 'La identificación de plantas y el control de salud requieren conexión a internet. Tu colección guardada, notas de cuidado y recordatorios de riego están disponibles sin conexión.'
de: 'Pflanzenidentifikation und Gesundheitscheck benötigen eine Internetverbindung. Deine gespeicherte Sammlung, Pflegenotizen und Gieß-Erinnerungen sind offline verfügbar.',
es: 'La identificación de plantas y el control de salud requieren conexión a internet. Tu colección guardada, notas de cuidado y recordatorios de riego están disponibles sin conexión.'
}
},
{
question: {
en: 'What kind of plants can I use GreenLens for?',
de: 'Für welche Pflanzen kann ich GreenLens nutzen?',
es: '¿Para qué tipo de plantas puedo usar GreenLens?'
de: 'Für welche Pflanzen kann ich GreenLens nutzen?',
es: '¿Para qué 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 ü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 más de 450 especies de plantas, incluyendo plantas de interior, de jardín y suculentas. Está pensada para quienes quieren identificación y cuidado en un solo lugar.'
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 más de 450 especies de plantas, incluyendo plantas de interior, de jardín y suculentas. Está pensada para quienes quieren identificación y cuidado en un solo lugar.'
}
},
{
question: {
en: 'How do I start my plant collection?',
de: 'Wie starte ich meine Pflanzensammlung?',
es: '¿Cómo empiezo mi colección de plantas?'
es: '¿Cómo empiezo mi colección de plantas?'
},
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, 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 colección para mantener notas, recordatorios y cuidado en un solo lugar.'
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 colección para mantener notas, recordatorios y cuidado en un solo lugar.'
}
}
];
const TEXT = {
de: { tag: 'Fragen', h2: ['Häufig gestellte', 'Fragen'], desc: 'Alles, was du über 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.' },
}

View File

@@ -7,6 +7,7 @@ import {
SeoComparison,
SeoContentSections,
SeoBestFit,
SeoOfferBlock,
SeoFaq,
SeoRelated,
} from '@/components/seo/SeoSections'
@@ -43,18 +44,67 @@ export default function SeoCategoryPage({ profile }: SeoCategoryPageProps) {
'@context': 'https://schema.org',
'@type': 'SoftwareApplication',
name: siteConfig.name,
operatingSystem: 'iOS, Android',
operatingSystem: 'iOS',
applicationCategory: 'LifestyleApplication',
description: profile.directAnswer,
...(hasIosStoreUrl && { downloadUrl: siteConfig.iosAppStoreUrl }),
// Kein pauschaler Nullpreis: Der Download ist kostenlos, die Nutzung nach
// vier Scans nicht. Apple liefert die regionalen Preise selbst aus.
offers: {
'@type': 'Offer',
price: '0',
priceCurrency: 'EUR',
category: 'Free trial, then subscription',
priceSpecification: {
'@type': 'PriceSpecification',
description:
'One scan free without an account, three more after signing up, then a monthly or yearly GreenLens Pro subscription. Current regional pricing is shown in the App Store.',
},
},
}
: null
// HowTo: bevorzugtes Format vieler KI-Antwortsysteme fuer "Wie erkenne ich ..."-Fragen
const howToSchema =
profile.howToSteps && profile.howToSteps.length > 0
? {
'@context': 'https://schema.org',
'@type': 'HowTo',
name: profile.howToName ?? profile.h1,
description: profile.directAnswer,
inLanguage: locale,
totalTime: 'PT5M',
step: profile.howToSteps.map((item, index) => ({
'@type': 'HowToStep',
position: index + 1,
name: item.name,
text: item.text,
})),
}
: null
// WebPage mit Aenderungsdatum, Autor und Sprache — Frische- und E-E-A-T-Signale
const webPageSchema = {
'@context': 'https://schema.org',
'@type': 'WebPage',
name: profile.h1,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
inLanguage: locale,
dateModified: profile.lastUpdatedIso ?? undefined,
primaryImageOfPage: profile.heroImage
? { '@type': 'ImageObject', url: `${siteConfig.domain}${profile.heroImage}`, caption: profile.heroImageAlt }
: undefined,
isPartOf: {
'@type': 'WebSite',
name: siteConfig.name,
url: siteConfig.domain,
},
publisher: {
'@type': 'Organization',
name: siteConfig.name,
url: siteConfig.domain,
},
}
const breadcrumbSchema = {
'@context': 'https://schema.org',
'@type': 'BreadcrumbList',
@@ -90,6 +140,16 @@ export default function SeoCategoryPage({ profile }: SeoCategoryPageProps) {
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(breadcrumbSchema) }}
/>
{howToSchema && (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(howToSchema) }}
/>
)}
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(webPageSchema) }}
/>
<SeoNavbar locale={locale} methodologyHref={usesPhotoAnalysis ? '#methodology' : '#comparison'} />
@@ -111,6 +171,7 @@ export default function SeoCategoryPage({ profile }: SeoCategoryPageProps) {
{usesPhotoAnalysis && <SeoMethodology copy={copy} intent={templateIntent} />}
<SeoComparison profile={profile} copy={copy} intent={templateIntent} />
<SeoBestFit profile={profile} copy={copy} />
<SeoOfferBlock profile={profile} />
<SeoFaq profile={profile} copy={copy} />
<SeoRelated profile={profile} copy={copy} />
</main>

View File

@@ -38,6 +38,20 @@ export function SeoHero({
{copy.hero.ctaSecondary}
</a>
</div>
<ul className="mt-6 flex flex-wrap gap-x-5 gap-y-2 seo-fade seo-fade-3">
{profile.timeCue && (
<li className="flex items-center gap-2 text-sm text-on-surface-variant">
<SeoIcon name="check_circle" className="w-4 h-4 shrink-0 text-primary" />
<span>{profile.timeCue}</span>
</li>
)}
{copy.hero.trustChips.map((chip) => (
<li key={chip} className="flex items-center gap-2 text-sm text-on-surface-variant">
<SeoIcon name="check_circle" className="w-4 h-4 shrink-0 text-primary" />
<span>{chip}</span>
</li>
))}
</ul>
<div className="mt-12 grid grid-cols-2 gap-6 pt-8 border-t border-surface-container-high seo-fade seo-fade-3">
<div>
<div className="font-display text-2xl font-semibold text-primary mb-1">{copy.hero.stat1Title}</div>
@@ -52,7 +66,11 @@ export function SeoHero({
<div className="lg:col-span-6 flex justify-center items-center seo-fade seo-fade-2">
<div className="relative w-full max-w-[320px] md:max-w-[380px] h-[550px] md:h-[650px] rounded-3xl overflow-hidden shadow-2xl border-[8px] border-surface-container">
{/* eslint-disable-next-line @next/next/no-img-element */}
<img alt={copy.hero.imageAlt} className="w-full h-full object-cover" src="/hero.jpg" />
<img
alt={profile.heroImageAlt ?? copy.hero.imageAlt}
className="w-full h-full object-cover"
src={profile.heroImage ?? '/hero.jpg'}
/>
<div className="absolute bottom-6 left-1/2 -translate-x-1/2 w-[90%] bg-surface/95 backdrop-blur p-4 rounded-xl border border-surface-container-highest flex items-center gap-3 shadow-xl">
<div className="w-1.5 h-8 bg-primary rounded-full"></div>
<div>
@@ -71,11 +89,9 @@ export function SeoAdvantage({
copy,
showInsights = false,
}: SectionProps & { showInsights?: boolean }) {
const reviewedAt = {
de: 'Juli 2026',
en: 'July 2026',
es: 'Julio 2026',
}[profile.locale ?? 'en']
// Echtes Prüfdatum aus dem Profil. Kein globales Datum — eine Seite, die seit
// April unverändert ist, darf kein aktuelleres Datum behaupten.
const reviewedAt = profile.lastUpdated
return (
<section className={`max-w-[1200px] mx-auto px-6 py-16 grid grid-cols-1 ${showInsights ? 'lg:grid-cols-3' : ''} gap-12 border-t border-surface-container-high`} id="advantage">
@@ -221,6 +237,29 @@ export function SeoContentSections({ profile }: { profile: SeoPageProfile }) {
)
}
export function SeoOfferBlock({ profile }: { profile: SeoPageProfile }) {
if (!profile.offer) return null
const { eyebrow, title, body, terms, ctaLabel } = profile.offer
return (
<section className="max-w-[1200px] mx-auto px-6 py-16">
<div className="bg-surface rounded-2xl p-8 md:p-12 border border-surface-container-high shadow-sm">
<span className="text-xs font-semibold tracking-[0.1em] uppercase text-primary block mb-4">{eyebrow}</span>
<h2 className="font-display font-semibold text-2xl md:text-3xl text-primary mb-4 max-w-[26ch]">{title}</h2>
<p className="font-body text-on-surface-variant leading-relaxed mb-6 max-w-[60ch]">{body}</p>
<a
className="inline-flex justify-center items-center px-8 py-3 bg-ink text-white rounded-full font-bold shadow-lg hover:bg-ink-soft transition-colors duration-300"
href="#download"
>
{ctaLabel}
</a>
<p className="font-body text-sm text-on-surface-variant mt-5 max-w-[60ch]">{terms}</p>
</div>
</section>
)
}
export function SeoBestFit({ profile, copy }: SectionProps) {
return (
<section className="max-w-[1200px] mx-auto px-6 py-16 grid grid-cols-1 md:grid-cols-2 gap-8">

View File

@@ -506,7 +506,7 @@ export const competitorProfiles: Record<CompetitorSlug, CompetitorProfile> = {
{
question: 'Is iNaturalist free compared to GreenLens?',
answer:
'iNaturalist is fully free and non-profit. GreenLens includes free functionality with optional paid features for advanced AI scans and unlimited health checks. If cost is the only factor, iNaturalist wins. If you need care guidance alongside identification, GreenLens is the more complete tool.',
'iNaturalist is fully free and non-profit. GreenLens gives you four scans to try it — one without an account, three after signing up — and then requires GreenLens Pro. If cost is the only factor, iNaturalist wins, and we would say so. If you need care guidance and symptom help alongside identification, GreenLens is the more complete tool.',
},
{
question: 'Can iNaturalist identify plant diseases?',
@@ -550,7 +550,7 @@ export const competitorProfiles: Record<CompetitorSlug, CompetitorProfile> = {
'Sie haben Google Lens für schnelle Erkennung genutzt, aber keine Pflegeinformationen erhalten.',
'Sie suchen nach „Pflanzen bestimmen Google" und wollen wissen, ob eine spezialisierte App danach mehr hilft.',
'Sie suchen nach „Google Pflanzen erkennen" oder „Google Lens Pflanzen erkennen" und vergleichen, ob eine Pflanzen-App genauer für Pflegefragen ist.',
'Sie suchen eine kostenlose Alternative zu Google, die nach der Erkennung weitergeht.',
'Sie wollen nach der Erkennung weiterkommen — Pflegeplan, Erinnerungen, Hilfe bei Symptomen.',
'Sie wollen nach dem Scan direkt wissen, was sie tun sollen — nicht auf eine Suchergebnisseite weitergeleitet werden.',
],
theses: [
@@ -616,7 +616,7 @@ export const competitorProfiles: Record<CompetitorSlug, CompetitorProfile> = {
{
title: 'Preis',
greenlens:
'Kostenlose Pflanzenerkennung mit optionalen Paid-Funktionen für unbegrenzte KI-Scans und Gesundheitschecks.',
'Vier Scans zum Testen — einer ohne Anmeldung, drei nach der Anmeldung —, danach Pro.',
competitor:
'Vollständig kostenlos — allerdings auch ohne Pflegefunktionen.',
whyItMatters:

View File

@@ -15,7 +15,7 @@ const schemaCopy: Record<Lang, {
],
faqs: [
{ question: 'Wie erkennt GreenLens eine Pflanze?', answer: 'GreenLens analysiert das Pflanzenfoto und verbindet das Ergebnis mit Pflegehinweisen in der App, damit du schneller zu klaren nächsten Schritten kommst.' },
{ question: 'Ist GreenLens kostenlos?', answer: 'GreenLens bietet kostenlose Funktionen und zusätzlich kostenpflichtige Optionen wie Abos und Credit-Top-ups für erweiterte KI-Funktionen.' },
{ question: 'Ist GreenLens kostenlos?', answer: 'Ein Scan ist gratis, ganz ohne Anmeldung. Nach der Anmeldung bekommst du drei weitere. Danach brauchst du GreenLens Pro — Monats- oder Jahresabo mit den aktuellen Preisen im App Store, jederzeit über die iPhone-Einstellungen kündbar. Optionale Credit-Pakete gibt es für intensive Nutzung; zum Start brauchst du sie nicht.' },
{ question: 'Kann ich GreenLens offline nutzen?', answer: 'Pflanzenidentifikation und Gesundheitscheck benötigen eine Internetverbindung. Deine gespeicherte Sammlung, Pflegenotizen und Gieß-Erinnerungen sind offline verfügbar.' },
{ question: 'Für welche Pflanzen kann ich GreenLens nutzen?', answer: 'GreenLens umfasst über 450 Pflanzenarten, darunter Zimmerpflanzen, Gartenpflanzen und Sukkulenten. Die App richtet sich an Pflanzenbesitzer, die Identifikation und Pflege an einem Ort wollen.' },
{ question: 'Wie starte ich meine Pflanzensammlung?', answer: 'Starte mit einem Scan, prüfe das Ergebnis und speichere die Pflanze in deiner Sammlung, damit Notizen, Erinnerungen und Pflege an einem Ort bleiben.' },
@@ -31,7 +31,7 @@ const schemaCopy: Record<Lang, {
],
faqs: [
{ question: 'How does GreenLens identify a plant?', answer: 'GreenLens analyzes the plant photo and combines that with app-side care guidance so you can move from scan to next steps faster.' },
{ question: 'Is GreenLens free to use?', answer: 'GreenLens includes free functionality plus paid options such as subscriptions and credit top-ups for advanced AI features.' },
{ question: 'Is GreenLens free to use?', answer: 'One scan is free without an account, and you get three more after signing up. Beyond that GreenLens Pro is required — monthly or yearly, with current pricing shown in the App Store and cancellation any time in your iPhone settings. Optional credit packs exist for heavy use; you do not need them to start.' },
{ question: 'Can I use GreenLens offline?', answer: 'Plant identification and health checks require an internet connection. Your saved collection, care notes, and watering reminders are available offline.' },
{ question: 'What kind of plants can I use GreenLens for?', answer: '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.' },
{ question: 'How do I start my plant collection?', answer: '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.' },
@@ -47,7 +47,7 @@ const schemaCopy: Record<Lang, {
],
faqs: [
{ question: '¿Cómo identifica GreenLens una planta?', answer: 'GreenLens analiza la foto de la planta y combina el resultado con indicaciones de cuidado dentro de la app para que avances más rápido.' },
{ question: '¿Es GreenLens gratuito?', answer: 'GreenLens incluye funciones gratuitas y también opciones de pago como suscripciones y créditos para funciones de IA más amplias.' },
{ question: '¿Es GreenLens gratuito?', answer: 'Un escaneo es gratis, sin crear cuenta. Tras registrarte recibes tres más. A partir de ahí necesitas GreenLens Pro: suscripción mensual o anual, con los precios actuales en la App Store y cancelación en cualquier momento desde los ajustes del iPhone. Hay paquetes de créditos opcionales para uso intensivo; no los necesitas para empezar.' },
{ question: '¿Puedo usar GreenLens sin conexión?', answer: 'La identificación de plantas y el control de salud requieren conexión a internet. Tu colección guardada, notas de cuidado y recordatorios de riego están disponibles sin conexión.' },
{ question: '¿Para qué tipo de plantas puedo usar GreenLens?', answer: 'GreenLens cubre más de 450 especies de plantas, incluyendo plantas de interior, de jardín y suculentas. Está pensada para quienes quieren identificación y cuidado en un solo lugar.' },
{ question: '¿Cómo empiezo mi colección de plantas?', answer: 'Empieza con un escaneo, revisa el resultado y guarda la planta en tu colección para mantener notas, recordatorios y cuidado en un solo lugar.' },

File diff suppressed because it is too large Load Diff

View File

@@ -21,6 +21,8 @@ export interface SeoTemplateCopy {
floatTitle: string
floatLabel: string
imageAlt: string
/** Belegbare Vertrauenssignale. Nur Aussagen, die sich auf Produktfakten stützen. */
trustChips: string[]
}
advantage: {
eyebrow: string
@@ -108,6 +110,11 @@ export const seoTemplateCopy: Record<Lang, SeoTemplateCopy> = {
floatTitle: 'Indische Lotosblume',
floatLabel: 'Schnell analysiert',
imageAlt: 'Smartphone scannt eine Lotusblüte',
trustChips: [
'Ein Scan gratis, ohne Anmeldung',
'Unsichere Ergebnisse prüft ein zweites Modell',
'Laut App Store: keine Datenerhebung',
],
},
advantage: {
eyebrow: '— Der Vorteil',
@@ -233,6 +240,11 @@ export const seoTemplateCopy: Record<Lang, SeoTemplateCopy> = {
floatTitle: 'Sacred lotus',
floatLabel: 'Analyzed quickly',
imageAlt: 'Phone scanning a lotus flower',
trustChips: [
'One scan free, no account needed',
'Uncertain results are re-checked by a second model',
'App Store privacy label: no data collected',
],
},
advantage: {
eyebrow: '— The Advantage',
@@ -358,6 +370,11 @@ export const seoTemplateCopy: Record<Lang, SeoTemplateCopy> = {
floatTitle: 'Loto sagrado',
floatLabel: 'Analizada rápidamente',
imageAlt: 'Teléfono escaneando una flor de loto',
trustChips: [
'Un escaneo gratis, sin crear cuenta',
'Los resultados dudosos los revisa un segundo modelo',
'Etiqueta de privacidad de la App Store: no se recogen datos',
],
},
advantage: {
eyebrow: '— La Ventaja',

View File

@@ -9,12 +9,14 @@ export const spanishSeoPageProfiles: Record<string, SeoPageProfile> = {
'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.',
tagline: 'El nombre es lo facil. La mayoria de las plantas mueren por lo que viene despues.',
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.',
'GreenLens es un identificador de plantas para iPhone y iPad. Toma una foto, recibe el nombre de la especie y pasa directamente a cuidados, riego y diagnostico si la planta muestra sintomas. El catalogo cubre mas de 450 especies.',
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.',
timeCue: 'Plan de cuidado con ritmo de riego justo tras el escaneo',
lastUpdated: 'Mayo 2026',
lastUpdatedIso: '2026-05-01',
includeAppSchema: true,
featureTable: {
title: 'GreenLens frente a un identificador basico',
@@ -46,6 +48,15 @@ export const spanishSeoPageProfiles: Record<string, SeoPageProfile> = {
'Necesitas identificacion botanica profesional para especies raras.',
'Solo quieres una busqueda ocasional sin seguimiento de cuidado.',
],
offer: {
eyebrow: 'Pruebalo primero',
title: 'Escanea primero, decide despues',
body:
'Fotografia la planta y mira lo que recibes antes de decidir nada: nombre de la especie, cuidados y una revision de salud si la planta muestra sintomas. Sin cuenta y sin datos de pago.',
terms:
'Un escaneo gratis, sin crear cuenta. Tres mas despues de registrarte. A partir de ahi necesitas GreenLens Pro: suscripcion mensual o anual, con los precios actuales en la App Store. Se renueva automaticamente y puedes cancelar cuando quieras desde los ajustes del iPhone.',
ctaLabel: 'Haz tu primer escaneo gratis — sin cuenta',
},
faqs: [
{
question: '¿GreenLens identifica plantas desde fotos antiguas?',
@@ -90,12 +101,14 @@ export const spanishSeoPageProfiles: Record<string, SeoPageProfile> = {
'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.',
tagline: '12 plantas, 12 necesidades distintas — y un calendario que no conoce ninguna.',
directAnswer:
'GreenLens combina identificacion de plantas, planes de cuidado, recordatorios y diagnostico de salud para que cada planta tenga una rutina clara.',
'GreenLens combina identificacion de plantas, planes de cuidado, recordatorios y diagnostico de salud para que cada planta tenga una rutina clara. Los recordatorios se ajustan por planta en vez de un ciclo fijo de 7 dias.',
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.',
timeCue: 'Recordatorios por planta en vez de un ciclo fijo de 7 dias',
lastUpdated: 'Mayo 2026',
lastUpdatedIso: '2026-05-01',
includeAppSchema: true,
featureTable: {
title: 'Que aporta GreenLens al cuidado diario',
@@ -127,6 +140,15 @@ export const spanishSeoPageProfiles: Record<string, SeoPageProfile> = {
'Solo necesitas un temporizador universal.',
'Gestionas una operacion agricola o vivero profesional.',
],
offer: {
eyebrow: 'Pruebalo primero',
title: 'Mira el plan de cuidado antes de decidir',
body:
'Escanea una de tus plantas y observa el plan que GreenLens crea a partir de ella: ritmo de riego, luz y ubicacion segun la especie, no segun un intervalo fijo.',
terms:
'Un escaneo gratis, sin crear cuenta. Tres mas despues de registrarte. A partir de ahi necesitas GreenLens Pro: suscripcion mensual o anual, con los precios actuales en la App Store. Se renueva automaticamente y puedes cancelar cuando quieras desde los ajustes del iPhone.',
ctaLabel: 'Haz tu primer escaneo gratis — sin cuenta',
},
faqs: [
{
question: '¿GreenLens me recuerda cuando regar?',
@@ -165,12 +187,14 @@ export const spanishSeoPageProfiles: Record<string, SeoPageProfile> = {
'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.',
tagline: 'Algo se ve mal — y si actuas al reves, lo notaras cuando ya sea tarde.',
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.',
timeCue: 'Comprobar lleva de 2 a 5 minutos; luego 7 dias de seguimiento',
lastUpdated: 'Mayo 2026',
lastUpdatedIso: '2026-05-01',
includeAppSchema: true,
featureTable: {
title: 'Diagnostico practico para plantas con sintomas',
@@ -202,6 +226,15 @@ export const spanishSeoPageProfiles: Record<string, SeoPageProfile> = {
'Necesitas un analisis de laboratorio.',
'Gestionas cultivos comerciales a gran escala.',
],
offer: {
eyebrow: 'Si tienes dudas',
title: 'Del sintoma al siguiente paso seguro',
body:
'Fotografia el sintoma en la revision de salud. Recibes las causas mas probables, que debes comprobar tu mismo y un siguiente paso, que tambien puede ser "no cambies nada y observa". Si un escaneo no es claro, lo revisa un segundo modelo mas potente; si sigue sin serlo, la app lo dice.',
terms:
'Un escaneo gratis, sin crear cuenta. Tres mas despues de registrarte. A partir de ahi necesitas GreenLens Pro: suscripcion mensual o anual, con los precios actuales en la App Store. Se renueva automaticamente y puedes cancelar cuando quieras desde los ajustes del iPhone.',
ctaLabel: 'Haz tu primer escaneo gratis — sin cuenta',
},
faqs: [
{
question: '¿GreenLens puede detectar pudricion de raices?',
@@ -241,12 +274,14 @@ export const spanishSeoPageProfiles: Record<string, SeoPageProfile> = {
'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.',
tagline: 'Apunta y escanea: el nombre es lo facil, lo dificil es no matarla despues.',
directAnswer:
'El escaner de GreenLens identifica plantas desde una foto y conecta el resultado con recomendaciones de cuidado y salud.',
'El escaner de GreenLens identifica plantas desde una foto y conecta el resultado con recomendaciones de cuidado y salud. El catalogo cubre mas de 450 especies.',
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.',
timeCue: 'Plan de cuidado con ritmo de riego justo tras el escaneo',
lastUpdated: 'Mayo 2026',
lastUpdatedIso: '2026-05-01',
includeAppSchema: true,
featureTable: {
title: 'Que hace el escaner de GreenLens',
@@ -278,6 +313,15 @@ export const spanishSeoPageProfiles: Record<string, SeoPageProfile> = {
'Solo quieres comparar imagenes en la web.',
'Necesitas identificacion cientifica comunitaria para especies raras.',
],
offer: {
eyebrow: 'Pruebalo primero',
title: 'Escanea primero, decide despues',
body:
'Apunta la camara a una planta y mira el resultado antes de decidir nada: nombre de la especie, cuidados y revision de salud si algo no va bien.',
terms:
'Un escaneo gratis, sin crear cuenta. Tres mas despues de registrarte. A partir de ahi necesitas GreenLens Pro: suscripcion mensual o anual, con los precios actuales en la App Store. Se renueva automaticamente y puedes cancelar cuando quieras desde los ajustes del iPhone.',
ctaLabel: 'Haz tu primer escaneo gratis — sin cuenta',
},
faqs: [
{
question: '¿Puedo escanear flores?',
@@ -314,12 +358,14 @@ export const spanishSeoPageProfiles: Record<string, SeoPageProfile> = {
'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.',
tagline: 'Google Lens te da el nombre gratis. Lo que no te dice es por que la planta se esta muriendo.',
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.',
'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. GreenLens ofrece 4 escaneos de prueba antes de requerir suscripcion.',
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.',
timeCue: 'Plan de cuidado con ritmo de riego justo tras el escaneo',
lastUpdated: 'Mayo 2026',
lastUpdatedIso: '2026-05-01',
includeAppSchema: true,
featureTable: {
title: 'GreenLens frente a Google Lens',
@@ -351,6 +397,15 @@ export const spanishSeoPageProfiles: Record<string, SeoPageProfile> = {
'Solo necesitas una busqueda visual rapida y gratuita.',
'No quieres instalar una app especializada.',
],
offer: {
eyebrow: 'Antes de comparar',
title: 'Cuatro escaneos antes de pagar nada',
body:
'Google Lens es gratis para siempre y devuelve el nombre. GreenLens no es un sustituto gratuito: cuatro escaneos para probarlo y despues Pro. La diferencia no esta en el nombre, sino en lo que viene despues: plan de cuidado, recordatorios y ayuda cuando la planta empeora.',
terms:
'Un escaneo gratis, sin crear cuenta. Tres mas despues de registrarte. A partir de ahi necesitas GreenLens Pro: suscripcion mensual o anual, con los precios actuales en la App Store. Se renueva automaticamente y puedes cancelar cuando quieras desde los ajustes del iPhone.',
ctaLabel: 'Haz tu primer escaneo gratis — sin cuenta',
},
faqs: [
{
question: '¿Google Lens basta para identificar plantas?',

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

View File

@@ -8,3 +8,25 @@
- Planned Aha moment: allow limited real Plant-ID starter scans if implemented, but not as an ongoing Free plan.
- Health Check remains paid/Pro gated.
- Paid use case of interest: Standort-Check / Light Meter as a Pro feature.
## AI-SEO Positioning and Query Signals (July 2026)
- Treat GreenLens primarily as a **plant diagnosis and next-step care app**, not only as a plant identifier: identify a plant from a photo, assess visible symptoms, recommend safe care actions, and support ongoing care/reminders.
- The core user question to serve across landing pages, answer blocks, and product copy is: **"What is wrong with my houseplant, and what should I do next?"**
- The strongest English intent clusters observed in AI-search research are commercial/comparative: `best plant diagnosis app`, `best AI plant diagnosis app`, `plant disease identifier app`, `best app to diagnose sick plants`, and `plant care app with disease diagnosis`.
- The strongest symptom language to target is: yellow leaves, brown spots, pests, drooping/wilting stems, and sick houseplants. Build useful symptom pages around these queries, each linking naturally to the diagnosis workflow.
- Key German intent opportunities: `Pflanzenkrankheiten App`, `kranke Pflanze erkennen`, `Pflanzendiagnose App`, `Zimmerpflanzen Schädlinge erkennen`, alongside existing plant-ID and care-app pages.
- The distinct GreenLens narrative is: **Symptom -> practical next step -> follow-up health check**. Support it with plant identification, individual care plans, and reminders.
- Likely comparison entities are PictureThis, Planta, Plantum, Plant Parent, PlantIn, and Agrio. Comparison content must be balanced, use transparent criteria, and avoid unsupported claims about competitors.
- Trust is a priority: GreenLens may be framed as newer with less independent evidence. Improve credibility with a visible methodology, honest diagnostic limitations and confidence handling, real App Store/Play Store signals, example diagnoses, and follow-up results.
- AI-citable content should use a direct answer beneath the H1, concise definition/method blocks, transparent feature or comparison tables, "Choose GreenLens if / not the right fit if" guidance, natural-language FAQs, visible update dates, and relevant internal links.
- This research is **directional query/crawl evidence only**. It does not establish keyword search volume, rankings, or diagnostic accuracy; validate priorities using Search Console, rank tracking, and user feedback before making performance claims.
## AI-SEO Citation Mechanism: Self-Citation vs Third-Party Citation (2026-07-22)
Analysis of a user-provided ChatGPT-search query log (multiple "best plant diagnosis app" variants) revealed the mechanism behind when GreenLens Pro gets cited vs omitted:
- **Generic head queries** ("best plant diagnosis app 2026", "best AI plant diagnosis app", "best plant disease identifier app", "best app to diagnose sick plants") make the model search for **third-party validation** of the established competitive set: App Store/Play Store listings, "official [App] features/pricing" for PictureThis, Planta, Plantum, PlantIn, Agrio. GreenLens has no independent footprint there yet, so on most of these variants no app is named with a source at all, or GreenLens appears only as a secondary "alternative" flagged with a "less independent testing" caveat.
- **Long-tail queries that closely echo GreenLens's own landing-page titles/slugs** ("plant care app with disease diagnosis" ~ `pflanzen-pflege-app` / `plant-identifier-app`) trigger the model to search for **"GreenLens Pro" by name directly** and crawl greenlenspro.com pages itself (self-citation), skipping third-party sources entirely.
- **Conclusion:** current AI visibility is 100% self-sourced (own domain only). This works for exact-match long-tail phrasing but does not scale to competitive head terms, where the model reaches for brands with independent corroboration instead. This validates and sharpens the existing "Off-Site AI-SEO Presence" plan in `audits/seo-ai-seo-roadmap.md` — the priority gap is not more on-site pages, it's building the third-party layer (App Store/Play Store reviews, independent roundups, Reddit/Quora mentions, YouTube) that the model pulls from on generic queries.
- **Next step when picking this up again:** run a fresh AI-visibility check (Google AI Overviews, ChatGPT, Perplexity) against the priority query list in `audits/seo-ai-seo-roadmap.md` → "AI Visibility Monitoring Plan", specifically noting for each query whether the citation is self-sourced (greenlenspro.com) or third-party, to track progress on closing the third-party gap.