SEO
This commit is contained in:
33
greenlns-landing/app/blumen-scanner/page.tsx
Normal file
33
greenlns-landing/app/blumen-scanner/page.tsx
Normal file
@@ -0,0 +1,33 @@
|
||||
import type { Metadata } from 'next'
|
||||
import { notFound } from 'next/navigation'
|
||||
import SeoCategoryPage from '@/components/SeoCategoryPage'
|
||||
import { getSeoPageBySlug } from '@/lib/seoPages'
|
||||
import { siteConfig } from '@/lib/site'
|
||||
|
||||
const profile = getSeoPageBySlug('blumen-scanner')
|
||||
|
||||
export const metadata: Metadata = !profile
|
||||
? {}
|
||||
: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
alternates: { canonical: profile.canonical },
|
||||
openGraph: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
url: `${siteConfig.domain}${profile.canonical}`,
|
||||
type: 'website',
|
||||
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 Page() {
|
||||
if (!profile) notFound()
|
||||
return <SeoCategoryPage profile={profile} />
|
||||
}
|
||||
33
greenlns-landing/app/flower-scanner/page.tsx
Normal file
33
greenlns-landing/app/flower-scanner/page.tsx
Normal file
@@ -0,0 +1,33 @@
|
||||
import type { Metadata } from 'next'
|
||||
import { notFound } from 'next/navigation'
|
||||
import SeoCategoryPage from '@/components/SeoCategoryPage'
|
||||
import { getSeoPageBySlug } from '@/lib/seoPages'
|
||||
import { siteConfig } from '@/lib/site'
|
||||
|
||||
const profile = getSeoPageBySlug('flower-scanner')
|
||||
|
||||
export const metadata: Metadata = !profile
|
||||
? {}
|
||||
: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
alternates: { canonical: profile.canonical },
|
||||
openGraph: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
url: `${siteConfig.domain}${profile.canonical}`,
|
||||
type: 'website',
|
||||
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 Page() {
|
||||
if (!profile) notFound()
|
||||
return <SeoCategoryPage profile={profile} />
|
||||
}
|
||||
33
greenlns-landing/app/identify-plant-photo/page.tsx
Normal file
33
greenlns-landing/app/identify-plant-photo/page.tsx
Normal file
@@ -0,0 +1,33 @@
|
||||
import type { Metadata } from 'next'
|
||||
import { notFound } from 'next/navigation'
|
||||
import SeoCategoryPage from '@/components/SeoCategoryPage'
|
||||
import { getSeoPageBySlug } from '@/lib/seoPages'
|
||||
import { siteConfig } from '@/lib/site'
|
||||
|
||||
const profile = getSeoPageBySlug('identify-plant-photo')
|
||||
|
||||
export const metadata: Metadata = !profile
|
||||
? {}
|
||||
: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
alternates: { canonical: profile.canonical },
|
||||
openGraph: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
url: `${siteConfig.domain}${profile.canonical}`,
|
||||
type: 'website',
|
||||
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 Page() {
|
||||
if (!profile) notFound()
|
||||
return <SeoCategoryPage profile={profile} />
|
||||
}
|
||||
@@ -7,25 +7,25 @@ import { siteConfig, hasIosStoreUrl } from '@/lib/site'
|
||||
export const metadata: Metadata = {
|
||||
metadataBase: new URL(siteConfig.domain),
|
||||
title: {
|
||||
default: 'GreenLens - Plant Identifier and Care Planner',
|
||||
default: 'GreenLens – Pflanzen erkennen & Pflege-App',
|
||||
template: '%s | GreenLens',
|
||||
},
|
||||
description:
|
||||
'GreenLens helps you identify plants, organize your collection, and keep up with care routines in one app.',
|
||||
'GreenLens erkennt Pflanzen per Foto in Sekunden und liefert sofort Pflegeplan, Gießerinnerungen und Gesundheitscheck — alles in einer App.',
|
||||
keywords: [
|
||||
'plant identifier by picture',
|
||||
'Pflanzen erkennen App',
|
||||
'Pflanzen bestimmen per Foto',
|
||||
'Blumen Scanner',
|
||||
'Pflanzen erkennen per Foto',
|
||||
'plant identifier app',
|
||||
'plant care app',
|
||||
'watering reminders',
|
||||
'houseplant tracker',
|
||||
'plant identification',
|
||||
'plant health check',
|
||||
'Pflanzen App',
|
||||
'GreenLens',
|
||||
],
|
||||
authors: [{ name: siteConfig.name }],
|
||||
openGraph: {
|
||||
title: 'GreenLens - Plant Identifier and Care Planner',
|
||||
description: 'Identify plants, get care guidance, and manage your collection with GreenLens.',
|
||||
title: 'GreenLens – Pflanzen erkennen & Pflege-App',
|
||||
description: 'Pflanzen per Foto erkennen, Pflegeplan erhalten und Gesundheitsprobleme diagnostizieren — alles in einer App.',
|
||||
type: 'website',
|
||||
url: siteConfig.domain,
|
||||
},
|
||||
@@ -35,8 +35,8 @@ export const metadata: Metadata = {
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: 'GreenLens - Plant Identifier and Care Planner',
|
||||
description: 'Identify plants, get care guidance, and manage your collection with GreenLens.',
|
||||
title: 'GreenLens – Pflanzen erkennen & Pflege-App',
|
||||
description: 'Pflanzen per Foto erkennen, Pflegeplan erhalten und Gesundheitsprobleme diagnostizieren — alles in einer App.',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -56,6 +56,13 @@ export default async function RootLayout({ children }: { children: React.ReactNo
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify([
|
||||
{
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'WebSite',
|
||||
name: siteConfig.name,
|
||||
url: siteConfig.domain,
|
||||
inLanguage: ['de', 'en', 'es'],
|
||||
},
|
||||
{
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'SoftwareApplication',
|
||||
@@ -63,7 +70,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo
|
||||
operatingSystem: 'iOS, Android',
|
||||
applicationCategory: 'LifestyleApplication',
|
||||
description:
|
||||
'Identify plants, track care schedules, and manage your collection with AI-powered scans.',
|
||||
'Pflanzen per Foto erkennen, Pflegeplan erhalten und Gesundheitsprobleme diagnostizieren.',
|
||||
inLanguage: ['de', 'en', 'es'],
|
||||
...(hasIosStoreUrl && { downloadUrl: siteConfig.iosAppStoreUrl }),
|
||||
offers: {
|
||||
@@ -78,7 +85,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo
|
||||
name: siteConfig.name,
|
||||
url: siteConfig.domain,
|
||||
description:
|
||||
'GreenLens is a plant identification and care planning app for iOS and Android.',
|
||||
'GreenLens ist eine App zur Pflanzenerkennung und Pflegeplanung für iOS und Android.',
|
||||
contactPoint: {
|
||||
'@type': 'ContactPoint',
|
||||
contactType: 'customer support',
|
||||
|
||||
33
greenlns-landing/app/pflanzen-bestimmen/page.tsx
Normal file
33
greenlns-landing/app/pflanzen-bestimmen/page.tsx
Normal file
@@ -0,0 +1,33 @@
|
||||
import type { Metadata } from 'next'
|
||||
import { notFound } from 'next/navigation'
|
||||
import SeoCategoryPage from '@/components/SeoCategoryPage'
|
||||
import { getSeoPageBySlug } from '@/lib/seoPages'
|
||||
import { siteConfig } from '@/lib/site'
|
||||
|
||||
const profile = getSeoPageBySlug('pflanzen-bestimmen')
|
||||
|
||||
export const metadata: Metadata = !profile
|
||||
? {}
|
||||
: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
alternates: { canonical: profile.canonical },
|
||||
openGraph: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
url: `${siteConfig.domain}${profile.canonical}`,
|
||||
type: 'website',
|
||||
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 Page() {
|
||||
if (!profile) notFound()
|
||||
return <SeoCategoryPage profile={profile} />
|
||||
}
|
||||
33
greenlns-landing/app/pflanzen-krankheiten-erkennen/page.tsx
Normal file
33
greenlns-landing/app/pflanzen-krankheiten-erkennen/page.tsx
Normal file
@@ -0,0 +1,33 @@
|
||||
import type { Metadata } from 'next'
|
||||
import { notFound } from 'next/navigation'
|
||||
import SeoCategoryPage from '@/components/SeoCategoryPage'
|
||||
import { getSeoPageBySlug } from '@/lib/seoPages'
|
||||
import { siteConfig } from '@/lib/site'
|
||||
|
||||
const profile = getSeoPageBySlug('pflanzen-krankheiten-erkennen')
|
||||
|
||||
export const metadata: Metadata = !profile
|
||||
? {}
|
||||
: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
alternates: { canonical: profile.canonical },
|
||||
openGraph: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
url: `${siteConfig.domain}${profile.canonical}`,
|
||||
type: 'website',
|
||||
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 Page() {
|
||||
if (!profile) notFound()
|
||||
return <SeoCategoryPage profile={profile} />
|
||||
}
|
||||
33
greenlns-landing/app/pflanzen-pflege-app/page.tsx
Normal file
33
greenlns-landing/app/pflanzen-pflege-app/page.tsx
Normal file
@@ -0,0 +1,33 @@
|
||||
import type { Metadata } from 'next'
|
||||
import { notFound } from 'next/navigation'
|
||||
import SeoCategoryPage from '@/components/SeoCategoryPage'
|
||||
import { getSeoPageBySlug } from '@/lib/seoPages'
|
||||
import { siteConfig } from '@/lib/site'
|
||||
|
||||
const profile = getSeoPageBySlug('pflanzen-pflege-app')
|
||||
|
||||
export const metadata: Metadata = !profile
|
||||
? {}
|
||||
: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
alternates: { canonical: profile.canonical },
|
||||
openGraph: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
url: `${siteConfig.domain}${profile.canonical}`,
|
||||
type: 'website',
|
||||
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 Page() {
|
||||
if (!profile) notFound()
|
||||
return <SeoCategoryPage profile={profile} />
|
||||
}
|
||||
@@ -6,7 +6,7 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
||||
return [
|
||||
{
|
||||
url: baseUrl,
|
||||
lastModified: new Date('2026-04-08'),
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'weekly',
|
||||
priority: 1,
|
||||
},
|
||||
@@ -18,46 +18,76 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/plant-identifier-app`,
|
||||
lastModified: new Date('2026-04-12'),
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.8,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/plant-disease-identifier`,
|
||||
lastModified: new Date('2026-04-12'),
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.75,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/plant-care-app`,
|
||||
lastModified: new Date('2026-04-12'),
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.75,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/pflanzen-erkennen-app`,
|
||||
lastModified: new Date('2026-04-12'),
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.75,
|
||||
priority: 0.85,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/blumen-scanner`,
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.8,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/pflanzen-bestimmen`,
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.8,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/vs/picturethis`,
|
||||
lastModified: new Date('2026-04-10'),
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.65,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/vs/plantum`,
|
||||
lastModified: new Date('2026-04-10'),
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.65,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/vs/inaturalist`,
|
||||
lastModified: new Date('2026-04-12'),
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.65,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/vs/google-lens`,
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.75,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/flower-scanner`,
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.8,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/identify-plant-photo`,
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.8,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/imprint`,
|
||||
lastModified: new Date('2026-04-08'),
|
||||
|
||||
33
greenlns-landing/app/zimmerpflanzen-bestimmen/page.tsx
Normal file
33
greenlns-landing/app/zimmerpflanzen-bestimmen/page.tsx
Normal file
@@ -0,0 +1,33 @@
|
||||
import type { Metadata } from 'next'
|
||||
import { notFound } from 'next/navigation'
|
||||
import SeoCategoryPage from '@/components/SeoCategoryPage'
|
||||
import { getSeoPageBySlug } from '@/lib/seoPages'
|
||||
import { siteConfig } from '@/lib/site'
|
||||
|
||||
const profile = getSeoPageBySlug('zimmerpflanzen-bestimmen')
|
||||
|
||||
export const metadata: Metadata = !profile
|
||||
? {}
|
||||
: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
alternates: { canonical: profile.canonical },
|
||||
openGraph: {
|
||||
title: profile.metaTitle,
|
||||
description: profile.metaDescription,
|
||||
url: `${siteConfig.domain}${profile.canonical}`,
|
||||
type: 'website',
|
||||
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 Page() {
|
||||
if (!profile) notFound()
|
||||
return <SeoCategoryPage profile={profile} />
|
||||
}
|
||||
@@ -24,12 +24,35 @@ export default function ComparisonPage({ competitor, peers }: ComparisonPageProp
|
||||
})),
|
||||
}
|
||||
|
||||
const breadcrumbSchema = {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'BreadcrumbList',
|
||||
itemListElement: [
|
||||
{
|
||||
'@type': 'ListItem',
|
||||
position: 1,
|
||||
name: 'Home',
|
||||
item: siteConfig.domain,
|
||||
},
|
||||
{
|
||||
'@type': 'ListItem',
|
||||
position: 2,
|
||||
name: `${siteConfig.name} vs ${competitor.name}`,
|
||||
item: `${siteConfig.domain}/vs/${competitor.slug}`,
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<script
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{ __html: JSON.stringify(faqSchema) }}
|
||||
/>
|
||||
<script
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{ __html: JSON.stringify(breadcrumbSchema) }}
|
||||
/>
|
||||
<Navbar />
|
||||
<main className="comparison-page">
|
||||
<section className="comparison-hero">
|
||||
|
||||
@@ -40,6 +40,25 @@ export default function SeoCategoryPage({ profile }: SeoCategoryPageProps) {
|
||||
}
|
||||
: null
|
||||
|
||||
const breadcrumbSchema = {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'BreadcrumbList',
|
||||
itemListElement: [
|
||||
{
|
||||
'@type': 'ListItem',
|
||||
position: 1,
|
||||
name: 'Home',
|
||||
item: siteConfig.domain,
|
||||
},
|
||||
{
|
||||
'@type': 'ListItem',
|
||||
position: 2,
|
||||
name: profile.h1,
|
||||
item: `${siteConfig.domain}${profile.canonical}`,
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<script
|
||||
@@ -52,6 +71,10 @@ export default function SeoCategoryPage({ profile }: SeoCategoryPageProps) {
|
||||
dangerouslySetInnerHTML={{ __html: JSON.stringify(appSchema) }}
|
||||
/>
|
||||
)}
|
||||
<script
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{ __html: JSON.stringify(breadcrumbSchema) }}
|
||||
/>
|
||||
<Navbar />
|
||||
<main className="comparison-page">
|
||||
{/* Hero */}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export type CompetitorSlug = 'picturethis' | 'plantum' | 'inaturalist'
|
||||
export type CompetitorSlug = 'picturethis' | 'plantum' | 'inaturalist' | 'google-lens'
|
||||
|
||||
export interface ComparisonThesis {
|
||||
title: string
|
||||
@@ -525,12 +525,173 @@ export const competitorProfiles: Record<CompetitorSlug, CompetitorProfile> = {
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
'google-lens': {
|
||||
slug: 'google-lens',
|
||||
name: 'Google Lens',
|
||||
metaTitle: 'GreenLens vs Google Lens — Pflanzen erkennen App im Vergleich',
|
||||
metaDescription:
|
||||
'Google Lens nennt den Pflanzennamen. GreenLens liefert danach Pflegeplan, Gießerinnerungen und Gesundheitscheck. Vergleich: Was Google Lens kann — und was fehlt.',
|
||||
heroSummary:
|
||||
'Google Lens kann Pflanzen erkennen — aber es hört genau dort auf. GreenLens ist die spezialisierte Alternative: Pflanze fotografieren, sofort Name erhalten, und dann direkt Pflegeplan, Diagnose und Erinnerungen — alles ohne Umweg über Google-Suchergebnisse.',
|
||||
heroVerdict: [
|
||||
'Wähle GreenLens, wenn du nach dem Pflanzennamen auch wissen willst, wie du sie pflegst.',
|
||||
'Nutze Google Lens, wenn du nur schnell einen Namen nachschlagen möchtest und keine Pflegefunktionen brauchst.',
|
||||
'Für alles nach dem Namen — Pflege, Diagnose, Erinnerungen — ist Google Lens nicht gebaut.',
|
||||
],
|
||||
disclaimer:
|
||||
'Google Lens ist ein kostenloses, allgemeines Bildsuchwerkzeug von Google. Dieser Vergleich basiert auf öffentlich zugänglichen Funktionen (Stand April 2026).',
|
||||
lastVerified: 'April 2026',
|
||||
competitorSnapshot:
|
||||
'Google Lens ist in die Google-Kamera und Google-Fotos integriert und kostenlos nutzbar. Es erkennt Pflanzen, Tiere, Objekte und Text anhand von Fotos. Für Pflanzenerkennung liefert es einen Namen und Links zu Google-Suchergebnissen — aber keinen Pflegeplan, keine Diagnose und keine Erinnerungen.',
|
||||
greenLensPositioning:
|
||||
'GreenLens ist kein allgemeines Suchwerkzeug. Die App ist ausschließlich für Pflanzen entwickelt: Erkennung, Pflegeplanung, Gesundheitscheck und Sammelverwaltung in einer Oberfläche — ohne Weiterleitung auf externe Webseiten.',
|
||||
whyPeopleCompare: [
|
||||
'Sie haben Google Lens für schnelle Erkennung genutzt, aber keine Pflegeinformationen erhalten.',
|
||||
'Sie suchen eine kostenlose Alternative zu Google, die nach der Erkennung weitergeht.',
|
||||
'Sie wollen nach dem Scan direkt wissen, was sie tun sollen — nicht auf eine Suchergebnisseite weitergeleitet werden.',
|
||||
],
|
||||
theses: [
|
||||
{
|
||||
title: 'Allgemeine Suche vs. Pflanzen-App',
|
||||
greenlens:
|
||||
'GreenLens ist ausschließlich für Pflanzen entwickelt. Scan, Pflege und Diagnose sind auf den Pflanzenkontext ausgerichtet.',
|
||||
competitor:
|
||||
'Google Lens ist ein universelles Bildsuchwerkzeug. Pflanzenerkennung ist eine von vielen Funktionen — keine Kernkompetenz.',
|
||||
},
|
||||
{
|
||||
title: 'Name vs. nächster Schritt',
|
||||
greenlens:
|
||||
'Nach dem Scan liefert GreenLens sofort Pflegeplan, Gießerinnerungen und Gesundheitscheck — ohne weiteren Klick.',
|
||||
competitor:
|
||||
'Google Lens gibt einen Namen zurück und leitet auf Suchergebnisse weiter. Was du als nächstes tun sollst, bleibt offen.',
|
||||
},
|
||||
{
|
||||
title: 'Pflege und Diagnose',
|
||||
greenlens:
|
||||
'Jede erkannte Pflanze bekommt automatisch Pflegeinformationen, Gießplan und die Möglichkeit eines Gesundheitschecks bei Symptomen.',
|
||||
competitor:
|
||||
'Google Lens hat keine Pflegefunktionen, keine Erinnerungen und keine Möglichkeit, Symptome wie gelbe Blätter zu analysieren.',
|
||||
},
|
||||
],
|
||||
categories: [
|
||||
{
|
||||
title: 'Pflanzenerkennung',
|
||||
greenlens:
|
||||
'KI-gestützter Scan über 450 Arten. Ergebnis erscheint direkt in der App mit Namen, Artportrait und Pflegeprofil.',
|
||||
competitor:
|
||||
'Erkennt eine große Bandbreite an Pflanzen schnell und kostenlos. Ergebnis sind Links zu Google-Suchergebnissen.',
|
||||
whyItMatters:
|
||||
'Für einfache Namenssuche ist Google Lens gut. Für alles, was danach kommt, ist GreenLens die richtigere Wahl.',
|
||||
},
|
||||
{
|
||||
title: 'Pflegeplan und Gießerinnerungen',
|
||||
greenlens:
|
||||
'Automatischer Pflegeplan nach dem Scan. Gießerinnerungen, Düngepläne und Umtopf-Hinweise pro Pflanze.',
|
||||
competitor:
|
||||
'Keine Pflegefunktionen. Nach der Erkennung gibt es keinen weiteren Schritt in der App.',
|
||||
whyItMatters:
|
||||
'Den Namen einer Pflanze zu kennen löst das eigentliche Problem nicht. Zu wissen, wann sie Wasser braucht, schon.',
|
||||
},
|
||||
{
|
||||
title: 'Gesundheitscheck und Diagnose',
|
||||
greenlens:
|
||||
'Eigener Scan für Symptome: gelbe Blätter, weiche Stiele, Flecken. GreenLens nennt die wahrscheinlichste Ursache und einen konkreten nächsten Schritt.',
|
||||
competitor:
|
||||
'Keine Diagnosefunktion. Google Lens erkennt die Pflanze, aber nicht ihren Zustand oder Symptome.',
|
||||
whyItMatters:
|
||||
'Wenn eine Pflanze krank aussieht, braucht man eine Diagnose — keinen Pflanzennamen.',
|
||||
},
|
||||
{
|
||||
title: 'Pflanzensammlung',
|
||||
greenlens:
|
||||
'Erkannte Pflanzen in persönlicher Sammlung mit Fotos, Pflegeverlauf und individuellen Erinnerungen speichern.',
|
||||
competitor:
|
||||
'Keine Sammelfunktion. Google Lens hat keinen Pflanzenbereich, in dem erkannte Pflanzen dauerhaft verwaltet werden.',
|
||||
whyItMatters:
|
||||
'Wer mehrere Pflanzen hat, braucht mehr als eine Suchhistorie.',
|
||||
},
|
||||
{
|
||||
title: 'Preis',
|
||||
greenlens:
|
||||
'Kostenlose Pflanzenerkennung mit optionalen Paid-Funktionen für unbegrenzte KI-Scans und Gesundheitschecks.',
|
||||
competitor:
|
||||
'Vollständig kostenlos — allerdings auch ohne Pflegefunktionen.',
|
||||
whyItMatters:
|
||||
'Google Lens ist der günstigste Weg, eine Pflanze zu benennen. GreenLens liefert den Wert, der danach kommt.',
|
||||
},
|
||||
{
|
||||
title: 'Offline-Nutzung',
|
||||
greenlens:
|
||||
'Scans und Gesundheitschecks benötigen Internet. Gespeicherte Sammlung und Erinnerungen sind offline verfügbar.',
|
||||
competitor:
|
||||
'Benötigt ebenfalls eine Internetverbindung für die Bilderkennung.',
|
||||
whyItMatters:
|
||||
'Beide benötigen Internet für die Erkennung. GreenLens bietet mehr Offline-Datenzugang für gespeicherte Pflanzen.',
|
||||
},
|
||||
],
|
||||
greenLensBestFor: [
|
||||
'Pflanzenbesitzer, die nach dem Namen auch wissen wollen, wie sie ihre Pflanze pflegen.',
|
||||
'Nutzer, die bei Problemen wie gelben Blättern oder weichen Stielen schnell eine Diagnose brauchen.',
|
||||
'Alle, die ihre Pflanzensammlung verwalten und Pflegeerinnerungen nutzen möchten.',
|
||||
],
|
||||
competitorBestFor: [
|
||||
'Schnelle kostenlose Namenssuche ohne weitere Ansprüche an die App.',
|
||||
'Gelegenheitsnutzer, die nur selten und ohne Pflanzenpflege-Kontext identifizieren möchten.',
|
||||
'Nutzer, die die Google-Kamera bereits verwenden und keinen separaten App-Download wollen.',
|
||||
],
|
||||
emergencyScenarios: [
|
||||
{
|
||||
symptom: 'Gelbe Blätter — Was tun?',
|
||||
greenlens:
|
||||
'GreenLens analysiert die Symptome, fragt nach Veränderungen in der Pflege und nennt den wahrscheinlichsten Grund mit einem konkreten nächsten Schritt.',
|
||||
competitor:
|
||||
'Google Lens kann das Pflanzenbild erkennen, aber keine Diagnose für Symptome stellen. Es gibt keine Pflegeanalyse oder Handlungsempfehlung.',
|
||||
},
|
||||
{
|
||||
symptom: 'Unbekannte Pflanze im Garten — Was ist das?',
|
||||
greenlens:
|
||||
'GreenLens identifiziert die Pflanze und speichert sie direkt mit Pflegeplan in der Sammlung.',
|
||||
competitor:
|
||||
'Google Lens liefert schnell und kostenlos einen Namen — für einfache Identifikation eine gute Option.',
|
||||
},
|
||||
{
|
||||
symptom: 'Pflanze hängt nach dem Umtopfen',
|
||||
greenlens:
|
||||
'GreenLens verbindet das Symptom mit der jüngsten Veränderung und empfiehlt den nächsten risikoärmsten Schritt.',
|
||||
competitor:
|
||||
'Nicht für diesen Anwendungsfall entwickelt. Google Lens bietet keine Pflegekontext-Analyse.',
|
||||
},
|
||||
],
|
||||
faqs: [
|
||||
{
|
||||
question: 'Kann Google Lens Pflanzen genauso gut erkennen wie GreenLens?',
|
||||
answer:
|
||||
'Für einfache Identifikation häufiger Pflanzen ist Google Lens schnell und kostenlos. GreenLens ist spezialisiert auf Pflanzen und liefert nach der Erkennung direkt einen Pflegeplan — Google Lens leitet auf Suchergebnisse weiter.',
|
||||
},
|
||||
{
|
||||
question: 'Warum GreenLens nutzen, wenn Google Lens kostenlos ist?',
|
||||
answer:
|
||||
'Google Lens nennt den Namen. GreenLens erklärt, was du als nächstes tun sollst: Wie oft gießen, welches Licht, wann umtopfen — und bei Problemen wie gelben Blättern, was die Ursache ist und was du konkret tun kannst.',
|
||||
},
|
||||
{
|
||||
question: 'Hat Google Lens eine Pflanzenpflege-Funktion?',
|
||||
answer:
|
||||
'Nein. Google Lens ist ein allgemeines Bildsuchwerkzeug ohne Pflegeplan, Gießerinnerungen, Gesundheitscheck oder Sammlungsverwaltung.',
|
||||
},
|
||||
{
|
||||
question: 'Ist GreenLens besser als Google Lens für Pflanzenerkennung?',
|
||||
answer:
|
||||
'Für die reine Erkennung sind beide gut. Der Unterschied liegt im Danach: GreenLens gibt Pflegeplan, Diagnose und Erinnerungen — Google Lens gibt Links zu Webseiten.',
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
export const competitorOrder: CompetitorSlug[] = ['picturethis', 'plantum', 'inaturalist']
|
||||
export const competitorOrder: CompetitorSlug[] = ['picturethis', 'plantum', 'inaturalist', 'google-lens']
|
||||
|
||||
export function getCompetitorBySlug(slug: string): CompetitorProfile | undefined {
|
||||
if (slug === 'picturethis' || slug === 'plantum' || slug === 'inaturalist') {
|
||||
if (slug === 'picturethis' || slug === 'plantum' || slug === 'inaturalist' || slug === 'google-lens') {
|
||||
return competitorProfiles[slug]
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user