public: seo

This commit is contained in:
Carl-Gerhard Lindesvärd
2026-03-17 13:12:47 +01:00
parent 5557db83a6
commit 33431510b4
15 changed files with 723 additions and 23 deletions

View File

@@ -34,9 +34,9 @@ const faqData = [
'We have a dedicated compare page where you can see how OpenPanel compares to other analytics tools. You can find it [here](/compare). You can also read our comprehensive guide on the [best open source web analytics tools](/articles/open-source-web-analytics).',
},
{
question: 'How does OpenPanel compare to Mixpanel?',
question: 'Is OpenPanel a good Mixpanel alternative?',
answer:
"OpenPanel offers similar powerful product analytics features as Mixpanel, but with the added benefits of being open-source, more affordable, and including web analytics capabilities.\n\nYou get Mixpanel's power with Plausible's simplicity.",
"Yes — OpenPanel covers the core features most teams use in Mixpanel: event tracking, funnels, retention, cohorts, and user profiles. The key differences are pricing, privacy, and self-hosting.\n\nOpenPanel starts at $2.50/month and can be self-hosted for free, while Mixpanel is cloud-only and scales to hundreds or thousands per month. OpenPanel is also cookie-free by default with EU-only hosting, so no consent banners required — something Mixpanel can't offer.\n\nSee the full [OpenPanel vs Mixpanel comparison](/compare/mixpanel-alternative) for a side-by-side breakdown.",
},
{
question: 'How does OpenPanel compare to Plausible?',

View File

@@ -0,0 +1,63 @@
import { BarChart2Icon, CoinsIcon, GithubIcon, ServerIcon } from 'lucide-react';
import Link from 'next/link';
import { FeatureCard } from '@/components/feature-card';
import { GetStartedButton } from '@/components/get-started-button';
import { Section, SectionHeader } from '@/components/section';
import { Button } from '@/components/ui/button';
const reasons = [
{
icon: CoinsIcon,
title: 'Fraction of the cost',
description:
"Mixpanel's pricing scales to hundreds or thousands per month as your event volume grows. OpenPanel starts at $2.50/month — or self-host for free with no event limits.",
},
{
icon: BarChart2Icon,
title: 'The features you actually use',
description:
'Events, funnels, retention, cohorts, user profiles, custom dashboards, and A/B testing — all there. OpenPanel covers every core analytics workflow from Mixpanel without the learning curve.',
},
{
icon: ServerIcon,
title: 'Actually self-hostable',
description:
'Mixpanel is cloud-only. OpenPanel runs on your own infrastructure with a simple Docker setup. Full data ownership, zero vendor lock-in.',
},
{
icon: GithubIcon,
title: 'Open source & transparent',
description:
"Mixpanel is a black box. OpenPanel's code is public on GitHub — audit it, contribute to it, or fork it. No surprises, no hidden data processing.",
},
];
export function MixpanelAlternative() {
return (
<Section className="container">
<SectionHeader
description="OpenPanel covers the product analytics features teams actually use — events, funnels, retention, cohorts, and user profiles — without Mixpanel's pricing, privacy trade-offs, or vendor lock-in."
label="Mixpanel Alternative"
title="Why teams switch from Mixpanel to OpenPanel"
/>
<div className="mt-8 grid grid-cols-1 gap-4 md:grid-cols-2">
{reasons.map((reason) => (
<FeatureCard
description={reason.description}
icon={reason.icon}
key={reason.title}
title={reason.title}
/>
))}
</div>
<div className="row mt-8 gap-4">
<GetStartedButton />
<Button asChild className="px-6" size="lg" variant="outline">
<Link href="/compare/mixpanel-alternative">
OpenPanel vs Mixpanel
</Link>
</Button>
</div>
</Section>
);
}

View File

@@ -4,6 +4,7 @@ import { FeatureSpotlight } from './_sections/feature-spotlight';
import { CtaBanner } from './_sections/cta-banner';
import { DataPrivacy } from './_sections/data-privacy';
import { Faq } from './_sections/faq';
import { MixpanelAlternative } from './_sections/mixpanel-alternative';
import { Hero } from './_sections/hero';
import { Pricing } from './_sections/pricing';
import { Sdks } from './_sections/sdks';
@@ -63,6 +64,7 @@ export default function HomePage() {
<Testimonials />
<Pricing />
<DataPrivacy />
<MixpanelAlternative />
<Sdks />
<Faq />
<CtaBanner />

View File

@@ -3,9 +3,9 @@ import type { Metadata } from 'next';
export const metadata: Metadata = getPageMetadata({
url: '/tools/ip-lookup',
title: 'IP Lookup - Free IP Address Geolocation Tool',
title: 'Free IP Address Lookup — Geolocation, ISP & ASN',
description:
'Find your IP address and get detailed geolocation information including country, city, ISP, ASN, and coordinates. Free IP lookup tool with map preview.',
'Instantly look up any IP address. Get country, city, region, ISP, ASN, and coordinates in seconds. Free tool, no signup required, powered by MaxMind GeoLite2.',
});
export default function IPLookupLayout({