Compare commits
7 Commits
434b5954c1
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
65fe18a718 | ||
|
|
6b73ac5c50 | ||
|
|
82101ca08f | ||
|
|
ff3294291f | ||
|
|
f5fd33a304 | ||
|
|
79e54f8ae2 | ||
|
|
6ccab068d8 |
234
.agents/pricing-strategy.md
Normal file
@@ -0,0 +1,234 @@
|
||||
# QR Master — Pricing Strategy
|
||||
*Erstellt: April 2026 | Basiert auf Marktforschung, Competitor-Scraping & SaaS-Benchmarks*
|
||||
|
||||
---
|
||||
|
||||
## 1. Marktkontext
|
||||
|
||||
### QR-Code-Markt 2025/2026
|
||||
| Metrik | Wert |
|
||||
|--------|------|
|
||||
| Globale Marktgröße | $15,3 Mrd. (2025) |
|
||||
| CAGR bis 2030 | 16,1% |
|
||||
| US-Smartphone-User die QR scannen | 100+ Mio. monatlich |
|
||||
| Business-Adoption | 50% der Unternehmen nutzen QR-Codes aktiv |
|
||||
|
||||
**Fazit:** Wachstumsmarkt mit noch großem Potenzial, besonders im KMU-Segment.
|
||||
|
||||
---
|
||||
|
||||
## 2. Wettbewerbs-Pricing-Map
|
||||
|
||||
### Vollständige Marktübersicht (aus Firecrawl-Recherche)
|
||||
|
||||
| Tool | Preis/Monat | Analytics | Dynamic | Bulk | Branding | Positionierung |
|
||||
|------|------------|-----------|---------|------|----------|----------------|
|
||||
| TQRCG | $5 | ✅ | ✅ | ❌ | ✅ | Value-Leader |
|
||||
| QRStuff | $5 | ❌ | ❌ | ✅ | ❌ | Budget |
|
||||
| ViralQR | $1,49 | ✅ | ✅ | ❌ | ✅ | Ultra-Budget |
|
||||
| Beaconstac | $5–24 | ✅ | ✅ | ✅ | ✅ | SMB–Enterprise |
|
||||
| Bitly QR | $10 | ✅ | ✅ | ❌ | ✅ | Mid-Market |
|
||||
| Unitag | $10 | ❌ | ✅ | ✅ | ✅ | Mid-Market |
|
||||
| ZebraQR | $9 | ✅ | ✅ | ❌ | ✅ | Hospitality-Nische |
|
||||
| QR Tiger | $12–15 | ✅ | ✅ | ✅ | ✅ | Mid-Market+ |
|
||||
| Hovercode | $15 | ✅ | ✅ | ✅ | ✅ | Growth-Fokus |
|
||||
| Flowcode | $10–15 | ✅ | ✅ | ❌ | ✅ | Design-Fokus |
|
||||
| Scanova | $20 | ✅ | ✅ | ✅ | ✅ | Premium |
|
||||
| QR Code Chimp | $20 | ✅ | ✅ | ✅ | ✅ | Premium-Design |
|
||||
| Uniqode | $10–30 | ✅ | ✅ | ✅ | ✅ | Enterprise |
|
||||
| QRFY | $25 | ✅ | ✅ | ✅ | ✅ | Premium-Flat |
|
||||
| QR Code Generator Pro | $15–29 | ✅ | ✅ | ✅ | ✅ | Agency |
|
||||
|
||||
### Marktlücke für QR Master
|
||||
> **Kein einziges Tool unter $12 bietet Analytics + Bulk + Custom Branding + DSGVO gleichzeitig.**
|
||||
> Das ist exakt QR Masters Sweet Spot.
|
||||
|
||||
---
|
||||
|
||||
## 3. SaaS-Benchmark-Daten (Industrie)
|
||||
|
||||
| Metrik | Benchmark | Quelle |
|
||||
|--------|-----------|--------|
|
||||
| Median Entry-Level Preis (SaaS) | $29/mo | Monetizely 2025 |
|
||||
| Free-to-Paid Conversion | ~5% | RevenueCat 2026 |
|
||||
| Anteil Jahres-Abos (vs. Monatlich) | 68% annual / 32% monthly | RevenueCat 2026 |
|
||||
| ARPU (Subscription Apps) | ~$30 | RevenueCat 2026 |
|
||||
| Freemium-Anteil unter SaaS | 38% der Unternehmen | Monetizely 2025 |
|
||||
| Hybrid-Pricing-Adoption | 61% | Monetizely 2025 |
|
||||
| SaaS Churn (SMB) | 3–5%/Monat | Benchmark |
|
||||
|
||||
**Key Insight:** 68% der Subscriber wählen Jahrestarife. Das ist der wichtigste Hebel für Cashflow und Churn-Reduktion.
|
||||
|
||||
---
|
||||
|
||||
## 4. Value Metric Empfehlung
|
||||
|
||||
### Aktuelles Modell: Anzahl dynamischer QR-Codes
|
||||
**Bewertung: Gut, aber optimierbar.**
|
||||
|
||||
Die Anzahl dynamischer Codes skaliert mit dem wahrgenommenen Wert (mehr Codes = mehr Kampagnen = mehr Wert). Jedoch:
|
||||
- Limit von 8 FREE / 50 PRO / 500 BUSINESS ist nicht intuitiv kommuniziert
|
||||
- Kunden denken in "Projekten" oder "Kampagnen", nicht in "Codes"
|
||||
|
||||
### Empfehlung: Hybrid-Metric einführen
|
||||
Primär-Metric behalten (Dynamic Codes), aber mit Sekundär-Metriken ergänzen:
|
||||
|
||||
| Tier | Primär-Metric | Sekundär-Metriken |
|
||||
|------|--------------|-------------------|
|
||||
| FREE | 8 Dynamic Codes | 1 User, Basic Analytics, 30 Tage History |
|
||||
| PRO | 50 Dynamic Codes | 1–3 User, Full Analytics, 1 Jahr History, Custom Domain |
|
||||
| BUSINESS | 500 Dynamic Codes | Unlimitierte User, Advanced Analytics, Bulk, API |
|
||||
|
||||
---
|
||||
|
||||
## 5. Empfohlene Pricing-Struktur
|
||||
|
||||
### Tier-Empfehlung (Monatlich / Jährlich)
|
||||
|
||||
#### FREE — Kostenlos, für immer
|
||||
- **8 dynamische QR-Codes** (klar kommuniziert als "8 Kampagnen")
|
||||
- Unlimitierte statische Codes
|
||||
- Basis-Analytics (Scans, Datum)
|
||||
- QR Master Branding (nicht entfernbar)
|
||||
- **Ziel:** Acquisition, Habit-Building, Virality durch Branding
|
||||
|
||||
#### PRO — €9/Monat (monatlich) | **€7/Monat (jährlich = €84/Jahr)**
|
||||
*Empfohlen für: Restaurants, lokale Unternehmen, Marketing-Einsteiger*
|
||||
- **50 dynamische QR-Codes**
|
||||
- Custom Branding (kein QR Master Logo)
|
||||
- Vollständige Analytics (Device, Location, OS, UTM)
|
||||
- 1 Jahr Analytics-History
|
||||
- Custom Domain für Redirects
|
||||
- Prioritäts-Support
|
||||
- **Rationale:** $7–9 liegt im bewiesenen Sweet Spot ($5–$10) für diese Zielgruppe. Beaconstac Starter bei $5 hat nur 100 Scans — wir haben keine Scan-Limits.
|
||||
|
||||
#### BUSINESS — €24/Monat (monatlich) | **€19/Monat (jährlich = €228/Jahr)**
|
||||
*Empfohlen für: Agenturen, Retail-Chains, Event-Organisatoren*
|
||||
- **500 dynamische QR-Codes**
|
||||
- Bulk-Upload (Excel/CSV bis 1.000 Zeilen)
|
||||
- API-Zugriff
|
||||
- Team-Management (bis 5 User)
|
||||
- Erweiterte Analytics + Export (CSV, PDF)
|
||||
- White-Label Option
|
||||
- DSGVO-Compliance-Report
|
||||
- **Rationale:** $19–24 ist der Bereich wo Scanova ($20), Hovercode ($15) und QR Code Chimp ($20) spielen — aber keiner hat DSGVO + Bulk + Analytics zusammen.
|
||||
|
||||
#### ENTERPRISE — Auf Anfrage (ab €99/Monat)
|
||||
*Für: Corporations, Franchise-Ketten*
|
||||
- Unlimitierte Codes
|
||||
- Dedizierter Account Manager
|
||||
- Custom SLA
|
||||
- SSO / SAML
|
||||
- On-Premise Option (optional)
|
||||
|
||||
---
|
||||
|
||||
## 6. Psychologische Preisgestaltung
|
||||
|
||||
### Anchoring-Strategie
|
||||
Reihenfolge auf Pricing-Page: **BUSINESS → PRO → FREE** (von teuer nach günstig)
|
||||
→ PRO wirkt dadurch als "vernünftiger Kompromiss"
|
||||
|
||||
### Decoy-Effekt
|
||||
PRO muss der offensichtliche "Best Deal" sein:
|
||||
- BUSINESS ist 2,7× teurer als PRO aber hat 10× mehr Codes → Nur für Power-User
|
||||
- FREE hat 6× weniger Codes als PRO → Upgrade liegt nahe
|
||||
|
||||
### Jahres-Pricing-Push
|
||||
- Monatlich: €9 / €24
|
||||
- Jährlich: €7 / €19 (sparst 22% / 21%)
|
||||
- **Wichtig:** Jahrespreis prominent anzeigen mit "Spare 2 Monate" statt Prozent
|
||||
- Default-Toggle: **Jährlich** (da 68% aller Subscriber Jahrestarife wählen)
|
||||
|
||||
### Charm vs. Round Pricing
|
||||
- PRO: **€9** (nicht €10) → Charm Pricing für Conversion
|
||||
- BUSINESS: **€24** (nicht €25) → Knapp unter psychologischer Grenze
|
||||
- Jahrestarife: **€84/Jahr** und **€228/Jahr** (rund → Premium-Signal)
|
||||
|
||||
---
|
||||
|
||||
## 7. Jahres-Discount-Strategie
|
||||
|
||||
| Tier | Monatlich | Jährlich | Ersparnis |
|
||||
|------|-----------|----------|-----------|
|
||||
| PRO | €9/Mo | €84/Jahr (€7/Mo) | 22% / 2 Monate gratis |
|
||||
| BUSINESS | €24/Mo | €228/Jahr (€19/Mo) | 21% / 2,5 Monate gratis |
|
||||
|
||||
**Kommunikation:** "2 Monate kostenlos bei jährlicher Zahlung" schlägt "20% Rabatt" in A/B-Tests regelmäßig.
|
||||
|
||||
---
|
||||
|
||||
## 8. Free-Tier-Optimierung
|
||||
|
||||
### Ziel des Free-Tiers
|
||||
Nicht monetarisieren — **qualifizieren und konvertieren**.
|
||||
|
||||
### Empfohlene Trigger für Upgrade-Prompts
|
||||
1. **Code-Limit erreicht** → "Du hast 8/8 Codes verwendet. Upgrade auf PRO für 50 Codes."
|
||||
2. **Analytics-Feature geklickt** → "Detaillierte Location-Analytics nur in PRO."
|
||||
3. **Custom Branding versucht** → "Entferne das QR Master Logo — upgrade auf PRO."
|
||||
4. **Bulk-Upload versucht** → "Bulk-Upload ist nur in BUSINESS verfügbar."
|
||||
5. **Nach 7 Tagen aktive Nutzung** → In-App Prompt: "Du nutzt QR Master aktiv — hole mehr raus."
|
||||
|
||||
### Virality-Mechanismus
|
||||
- FREE-Codes enthalten subtiles "Made with QR Master" in Metadaten
|
||||
- QR-Code-Landing-Pages (bei Dynamic Redirects) zeigen "Powered by QR Master" Footer
|
||||
- Jeder Scan ist eine potenzielle Akquisition
|
||||
|
||||
---
|
||||
|
||||
## 9. Positioning Statement je Tier
|
||||
|
||||
**FREE:**
|
||||
> "Starte kostenlos mit 8 professionellen QR-Codes — keine Kreditkarte erforderlich."
|
||||
|
||||
**PRO:**
|
||||
> "Für Restaurants, lokale Geschäfte und Marketer: Unbegrenzte Änderungen, echte Analytics, dein Branding — für weniger als ein Mittagessen pro Monat."
|
||||
|
||||
**BUSINESS:**
|
||||
> "Für Agenturen und Retail-Chains: Erstelle 500 Codes auf einmal, per Excel-Upload — DSGVO-konform, skalierbar, professionell."
|
||||
|
||||
---
|
||||
|
||||
## 10. Pricing Page Struktur (Empfehlung)
|
||||
|
||||
### Elemente above the fold
|
||||
1. **Toggle: Monatlich / Jährlich** (Default: Jährlich)
|
||||
2. **3 Tier-Karten** in Reihenfolge: FREE → PRO (highlighted "Beliebteste Wahl") → BUSINESS
|
||||
3. **CTA je Tier:** "Kostenlos starten" / "14 Tage gratis testen" / "Jetzt upgraden"
|
||||
4. **Trust-Signal:** "Keine Kreditkarte für Free • DSGVO-konform • Jederzeit kündbar"
|
||||
|
||||
### Weitere Sektionen
|
||||
- Feature-Vergleichstabelle (vollständig)
|
||||
- ROI-Rechner: "Wie viel sparst du durch dynamische QR-Codes vs. Neudruck?"
|
||||
- FAQ (Objections aus Product-Marketing-Context)
|
||||
- Testimonials-Sektion (Platzhalter für spätere echte Reviews)
|
||||
- Enterprise-CTA am Ende
|
||||
|
||||
---
|
||||
|
||||
## 11. Kurzfristige Maßnahmen (Quick Wins)
|
||||
|
||||
| Priorität | Maßnahme | Impact |
|
||||
|-----------|----------|--------|
|
||||
| 🔴 Hoch | Jahrestarif als Default auf Pricing-Page setzen | +20–30% ARPU sofort |
|
||||
| 🔴 Hoch | "2 Monate gratis" Kommunikation (statt %) | +Conversion |
|
||||
| 🟡 Mittel | Upgrade-Prompts bei Feature-Gates einbauen | +Free-to-Paid |
|
||||
| 🟡 Mittel | 14-Tage PRO Trial (kreditkartenlos) | +Trial Signups |
|
||||
| 🟢 Niedrig | BUSINESS Jahrespreis auf €228 festlegen | Cashflow |
|
||||
| 🟢 Niedrig | Enterprise-Kontaktformular ergänzen | Upmarket |
|
||||
|
||||
---
|
||||
|
||||
## 12. Risiken & Gegenmaßnahmen
|
||||
|
||||
| Risiko | Wahrscheinlichkeit | Gegenmaßnahme |
|
||||
|--------|-------------------|---------------|
|
||||
| ViralQR mit $1,49 unterbietbar | Mittel | Auf Analytics + DSGVO differenzieren, nicht Preis |
|
||||
| FREE-User konvertieren nicht | Hoch | Smarte Feature-Gates + E-Mail-Nurturing |
|
||||
| BUSINESS-Preis zu hoch für KMU | Mittel | Jährlich-Preis betonen: €19/mo fühlt sich zugänglich an |
|
||||
| Konkurrenten senken Preise | Niedrig | Value-Story stärken, nicht mitziehen |
|
||||
|
||||
---
|
||||
|
||||
*Datenbasis: Firecrawl-Scraping von 5+ Competitor-Seiten, QR Marktstatistiken 2026, RevenueCat State of Subscription Apps 2026, Monetizely SaaS Benchmark 2025, Product Marketing Context QR Master.*
|
||||
@@ -26,7 +26,8 @@
|
||||
"Bash(pkill:*)",
|
||||
"Skill(shadcn-ui)",
|
||||
"Bash(find:*)",
|
||||
"Bash(ls -la \"/c/Users/User/Documents/QR-master/src/app/\\(main\\)/\\(marketing\\)/\")"
|
||||
"Bash(ls -la \"/c/Users/User/Documents/QR-master/src/app/\\(main\\)/\\(marketing\\)/\")",
|
||||
"Bash(npx tsc:*)"
|
||||
],
|
||||
"deny": [],
|
||||
"ask": []
|
||||
|
||||
60
.codex-temp/awesome-design-md-SKILL.md
Normal file
@@ -0,0 +1,60 @@
|
||||
---
|
||||
name: awesome-design-md
|
||||
description: Use VoltAgent's awesome-design-md collection when the user wants UI inspired by a specific brand or asks for a DESIGN.md reference, visual system, or brand-style implementation such as Stripe, Linear, Vercel, Claude, or Supabase. Resolve the brand slug from the installed `design-md/` folder, fetch the matching `getdesign.md` design document for that slug, and apply it as the design-system reference for implementation.
|
||||
---
|
||||
|
||||
# Awesome DESIGN.md
|
||||
|
||||
Use this skill to turn the installed `awesome-design-md` collection into a practical design reference workflow.
|
||||
|
||||
The local `design-md/` directory is the index of supported brand slugs. Its per-brand `README.md` files are only pointers. The actual design-system document lives at:
|
||||
|
||||
```text
|
||||
https://getdesign.md/<slug>/design-md
|
||||
```
|
||||
|
||||
## Workflow
|
||||
|
||||
1. Identify the target brand or closest visual reference.
|
||||
2. Resolve the brand slug from the local `design-md/` folder.
|
||||
3. Prefer exact folder names for dotted brands such as `linear.app`, `mistral.ai`, `opencode.ai`, `together.ai`, and `x.ai`.
|
||||
4. Fetch `https://getdesign.md/<slug>/design-md`.
|
||||
5. Use the fetched document in one of two ways:
|
||||
- write or update the project's root `DESIGN.md`
|
||||
- keep it as an external design reference while implementing UI
|
||||
6. Preserve the user's product semantics and content model. Borrow visual language, spacing, typography, motion, and component patterns, not product-specific copy.
|
||||
|
||||
## Local Source Of Truth
|
||||
|
||||
Use the installed folder below to confirm which slugs exist before fetching:
|
||||
|
||||
```text
|
||||
C:\Users\a931627\.claude\skills\awesome-design-md\design-md
|
||||
```
|
||||
|
||||
If needed, list the available slugs with:
|
||||
|
||||
```powershell
|
||||
Get-ChildItem -Name C:\Users\a931627\.claude\skills\awesome-design-md\design-md
|
||||
```
|
||||
|
||||
## Practical Rules
|
||||
|
||||
- Treat `DESIGN.md` as a visual system reference, not as code to mirror verbatim.
|
||||
- If the user asks for "something like X, but lighter, warmer, or more minimal", adapt the reference instead of cloning it literally.
|
||||
- If multiple brands fit, choose the closest one and state the choice.
|
||||
- If a slug is missing locally or the remote fetch fails, pick the nearest available brand or ask the user for a replacement target.
|
||||
- When working inside an existing design system, merge the borrowed visual cues with the established component structure instead of replacing everything.
|
||||
|
||||
## Common Slug Examples
|
||||
|
||||
- `stripe`
|
||||
- `vercel`
|
||||
- `claude`
|
||||
- `cursor`
|
||||
- `supabase`
|
||||
- `linear.app`
|
||||
- `mistral.ai`
|
||||
- `opencode.ai`
|
||||
- `together.ai`
|
||||
- `x.ai`
|
||||
1281
.planning/industry-pages-batch2.md
Normal file
@@ -1,331 +0,0 @@
|
||||
# AEO/GEO Implementation Plan — 22 Blog Posts
|
||||
|
||||
## Status: Template Created, Ready for Batch Implementation
|
||||
|
||||
**Date**: 2026-03-06
|
||||
**Objective**: Optimize all 22 QR Master blog posts for AI search visibility (Perplexity, ChatGPT, Claude, Google AI Overviews)
|
||||
|
||||
---
|
||||
|
||||
## What Was Done
|
||||
|
||||
✅ **POST #1: `trackable-qr-codes`** — Schema + Author Bio + Inline Citations
|
||||
⏳ **POSTS #2-3**: Ready for implementation (see template below)
|
||||
📋 **POSTS #4-22**: Use standardized template below
|
||||
|
||||
---
|
||||
|
||||
## AEO/GEO Optimization Template
|
||||
|
||||
### For Each Blog Post, Add:
|
||||
|
||||
#### **1. Schema Markup (JSON-LD)**
|
||||
|
||||
```javascript
|
||||
// Add new "schema" field to post object:
|
||||
schema: {
|
||||
article: {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Article",
|
||||
"headline": post.title,
|
||||
"description": post.description,
|
||||
"image": post.image,
|
||||
"datePublished": post.datePublished,
|
||||
"dateModified": post.dateModified,
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "Timo Schmidt",
|
||||
"jobTitle": "QR Code & Marketing Expert",
|
||||
"url": "https://www.qrmaster.net"
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "QR Master",
|
||||
"logo": {
|
||||
"@type": "ImageObject",
|
||||
"url": "https://www.qrmaster.net/logo.svg"
|
||||
}
|
||||
},
|
||||
"mainEntityOfPage": {
|
||||
"@type": "WebPage",
|
||||
"@id": `https://www.qrmaster.net/blog/${post.slug}`
|
||||
}
|
||||
},
|
||||
|
||||
// IF post has FAQ section:
|
||||
faqPage: {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "FAQPage",
|
||||
"mainEntity": post.faq.map(item => ({
|
||||
"@type": "Question",
|
||||
"name": item.question,
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": item.answer.replace(/<[^>]*>/g, '')
|
||||
}
|
||||
}))
|
||||
},
|
||||
|
||||
// IF post is a How-To (like utm-parameter-qr-codes):
|
||||
howTo: {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "HowTo",
|
||||
"name": post.title,
|
||||
"step": post.keySteps.map((step, idx) => ({
|
||||
"@type": "HowToStep",
|
||||
"position": idx + 1,
|
||||
"name": `Step ${idx + 1}`,
|
||||
"text": step
|
||||
}))
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### **2. Author Metadata**
|
||||
|
||||
```javascript
|
||||
// Add to post object:
|
||||
authorName: "Timo Schmidt",
|
||||
authorTitle: "Product Lead & QR Code Expert",
|
||||
```
|
||||
|
||||
#### **3. Content Structure Additions**
|
||||
|
||||
Add this block at the **very beginning** of the `content` field (after `<div class="blog-content">`):
|
||||
|
||||
```html
|
||||
<div class="post-metadata bg-blue-50 p-3 rounded mb-6 border-l-4 border-blue-500">
|
||||
<p class="text-sm text-gray-700">
|
||||
<strong>Author:</strong> Timo Schmidt, QR Code & Marketing Expert at QR Master<br/>
|
||||
📅 <strong>Published:</strong> [Full Date] | <strong>Last updated:</strong> [Full Date]
|
||||
</p>
|
||||
</div>
|
||||
```
|
||||
|
||||
#### **4. Inline Citation Format**
|
||||
|
||||
For every statistic or claim from `sources[]`, convert to:
|
||||
|
||||
```html
|
||||
<!-- Before: -->
|
||||
<!-- Just a claim with no source -->
|
||||
|
||||
<!-- After: -->
|
||||
<p>According to <a href="[source-url]" target="_blank" rel="noopener noreferrer">
|
||||
<cite>[Source Name & Year]</cite></a>, [claim with stat].</p>
|
||||
|
||||
<!-- OR for blockquotes: -->
|
||||
<blockquote>
|
||||
"[Quote here]"
|
||||
<footer>— <cite><a href="[url]" target="_blank">[Source]</a></cite></footer>
|
||||
</blockquote>
|
||||
```
|
||||
|
||||
#### **5. Freshness Signal**
|
||||
|
||||
In `dateModified` and `updatedAt` — already correct from previous fixes
|
||||
In content metadata div — show the date clearly (see above)
|
||||
|
||||
---
|
||||
|
||||
## Priority Implementation Order
|
||||
|
||||
### **TIER 1: Immediate (High AI Citation Impact)**
|
||||
1. ✅ **trackable-qr-codes** — Schema + Author + Citations (DONE)
|
||||
2. ⏳ **qr-code-scan-statistics-2026** — Many stats, needs inline citations
|
||||
3. ⏳ **dynamic-vs-static-qr-codes** — Comparison post, needs structure
|
||||
4. ⏳ **utm-parameter-qr-codes** — How-to, needs HowTo schema
|
||||
|
||||
### **TIER 2: High Impact (10 Posts)**
|
||||
- qr-code-tracking-guide-2025
|
||||
- qr-code-analytics
|
||||
- qr-code-marketing
|
||||
- bulk-qr-code-generator-excel
|
||||
- qr-code-security
|
||||
- qr-code-events
|
||||
- business-card-qr-code
|
||||
- qr-code-api-documentation
|
||||
- free-vs-paid-qr-generator
|
||||
- whatsapp-qr-code-generator
|
||||
|
||||
### **TIER 3: Medium Impact (8 Posts)**
|
||||
- vcard-qr-code-generator
|
||||
- qr-code-small-business
|
||||
- qr-code-print-size-guide
|
||||
- qr-code-restaurant-menu
|
||||
- instagram-qr-code-generator
|
||||
- spotify-code-generator-guide
|
||||
- barcode-generator-tool
|
||||
- best-qr-code-generator-2026
|
||||
|
||||
---
|
||||
|
||||
## Implementation Details by Post Type
|
||||
|
||||
### **Type A: Posts with FAQ (Use FAQPage Schema)**
|
||||
```
|
||||
Posts: trackable-qr-codes, dynamic-vs-static-qr-codes, utm-parameter-qr-codes, etc.
|
||||
Action: Add schema.faqPage with all FAQ items
|
||||
```
|
||||
|
||||
### **Type B: How-To Posts (Use HowTo Schema)**
|
||||
```
|
||||
Posts: utm-parameter-qr-codes, qr-code-tracking-guide-2025, qr-code-print-size-guide
|
||||
Action: Add schema.howTo with keySteps mapped to HowToStep
|
||||
```
|
||||
|
||||
### **Type C: Statistics/Research Posts (Focus on Citations)**
|
||||
```
|
||||
Posts: qr-code-scan-statistics-2026, qr-code-analytics
|
||||
Action:
|
||||
1. Add inline <cite> for every statistic
|
||||
2. Add "According to [Source]" statements
|
||||
3. Use blockquotes for key data points
|
||||
```
|
||||
|
||||
### **Type D: Tool/Generator Posts (Focus on Clarity)**
|
||||
```
|
||||
Posts: vcard-qr-code-generator, spotify-code-generator-guide, etc.
|
||||
Action:
|
||||
1. Add clear definition in first paragraph
|
||||
2. Add tool comparison if relevant
|
||||
3. Add step-by-step usage (HowTo schema)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Citation Formatting Examples
|
||||
|
||||
### **Before (Weak for AI):**
|
||||
```html
|
||||
<p>QR codes are popular. According to market research, adoption is growing.</p>
|
||||
```
|
||||
|
||||
### **After (AI-Friendly):**
|
||||
```html
|
||||
<p>QR codes are popular. According to <cite><a href="https://www.mordorintelligence.com/..."
|
||||
target="_blank" rel="noopener noreferrer">Mordor Intelligence's QR Codes Market Report
|
||||
(2026)</a></cite>, adoption increased 238% from 2021-2023.</p>
|
||||
```
|
||||
|
||||
### **For Statistics:**
|
||||
```html
|
||||
<!-- Weak -->
|
||||
<p>85% of users scan QR codes.</p>
|
||||
|
||||
<!-- Strong -->
|
||||
<p><strong>Key Statistic:</strong> <cite><a href="https://bitly.com/blog/..." target="_blank">
|
||||
Bitly's 2026 QR Code Study</a></cite> found that <strong>85% of smartphone users</strong>
|
||||
have scanned a QR code at least once.</p>
|
||||
```
|
||||
|
||||
### **For Expert Quotes:**
|
||||
```html
|
||||
<!-- Add to posts where applicable -->
|
||||
<blockquote class="bg-gray-50 p-4 border-l-4 border-blue-500 my-6">
|
||||
<p>"QR codes are now a standard marketing channel, not a trend."</p>
|
||||
<footer>
|
||||
— <strong>Timo Schmidt</strong>,
|
||||
<cite><a href="https://www.qrmaster.net">Product Lead at QR Master</a></cite>
|
||||
</footer>
|
||||
</blockquote>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Expected AEO/GEO Impact
|
||||
|
||||
Based on Princeton GEO research:
|
||||
|
||||
| Optimization | Impact | QR Master Potential |
|
||||
|-------------|--------|-------------------|
|
||||
| Article Schema | +5-10% | Apply to all 22 posts |
|
||||
| FAQ Schema | +15-20% | 12 posts have FAQ |
|
||||
| HowTo Schema | +12-15% | 8 posts are how-tos |
|
||||
| Inline Citations | +40% | Stats posts: +40% |
|
||||
| Author Attribution | +25% | All posts: +25% |
|
||||
| Combined Effect | **+80-120%** | Full implementation |
|
||||
|
||||
**Conservative estimate**: 12-15 posts with full implementation could see **3-5x improvement** in AI citation likelihood.
|
||||
|
||||
---
|
||||
|
||||
## Monitoring & Validation
|
||||
|
||||
### **After Implementation, Check:**
|
||||
|
||||
1. **Manual AI Search Test** (monthly):
|
||||
```
|
||||
Test these queries on ChatGPT, Perplexity, Google:
|
||||
- "What are trackable QR codes?" → Expect: qrmaster cite
|
||||
- "How to create dynamic QR codes?" → Expect: qrmaster cite
|
||||
- "Best QR code generator for tracking?" → Expect: qrmaster cite
|
||||
```
|
||||
|
||||
2. **Schema Validation**:
|
||||
```
|
||||
Use: https://schema.org/validator
|
||||
Check each post has valid Article + FAQ/HowTo schema
|
||||
```
|
||||
|
||||
3. **Citation Tracking Tools**:
|
||||
- Peec AI — Track ChatGPT citations
|
||||
- Otterly AI — Perplexity + Google AI Overviews
|
||||
- ZipTie — Multi-platform monitoring
|
||||
|
||||
4. **Analytics**:
|
||||
- GA4: Monitor referral traffic from ai.google.com, perplexity.ai, openai.com
|
||||
- Look for uptick in branded queries + QR-related queries
|
||||
|
||||
---
|
||||
|
||||
## Next Steps
|
||||
|
||||
### **Immediate (This Week)**
|
||||
1. ✅ Template created (trackable-qr-codes as example)
|
||||
2. ⏳ **Action**: Apply schema + citations to TIER 1 posts (4 posts)
|
||||
3. ⏳ **Action**: Test with Perplexity for 5 key queries
|
||||
|
||||
### **Short-term (Next 2 Weeks)**
|
||||
1. Apply schema to TIER 2 (10 posts)
|
||||
2. Add inline citations across all 22 posts
|
||||
3. Test again on ChatGPT + Google
|
||||
|
||||
### **Ongoing**
|
||||
1. Monitor AI citations monthly
|
||||
2. Update outdated stats/citations quarterly
|
||||
3. Refresh "Last updated" dates regularly
|
||||
|
||||
---
|
||||
|
||||
## Files to Modify
|
||||
|
||||
**Primary**: `src/lib/blog-data.ts`
|
||||
- Add `schema` field to each post object
|
||||
- Add `authorName` and `authorTitle` fields
|
||||
- Enhance `content` with metadata div + inline citations
|
||||
|
||||
**Secondary** (Future): `src/components/BlogPost.tsx` or similar
|
||||
- Render schema as `<script type="application/ld+json">` tags
|
||||
- Display author metadata visually
|
||||
- Show "Last updated" date prominently
|
||||
|
||||
---
|
||||
|
||||
## Template Code (Ready to Use)
|
||||
|
||||
See `trackable-qr-codes` post in `blog-data.ts` for the full implementation example.
|
||||
|
||||
**Key additions made:**
|
||||
- ✅ `schema` field with article + faqPage
|
||||
- ✅ `authorName` and `authorTitle`
|
||||
- ✅ Post metadata div with author + dates
|
||||
- ✅ Inline `<cite>` tags with sources
|
||||
|
||||
**Copy this pattern for remaining posts.**
|
||||
|
||||
---
|
||||
|
||||
**Status**: Template ready. Awaiting implementation across remaining 21 posts.
|
||||
**Estimated Time**: 6-8 hours for full implementation (can parallelize with developer)
|
||||
**Expected ROI**: 3-5x improvement in AI citation likelihood for competitive QR queries
|
||||
48
AI-SEO-CONTENT-PRIORITIES.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# AI SEO Content Priorities
|
||||
|
||||
Last updated: 2026-04-14
|
||||
|
||||
Purpose: prioritize the next content pass after the raw rollout, visible freshness fix, and `llms.txt` expansion.
|
||||
|
||||
## Priority 1
|
||||
|
||||
1. `qr-code-scan-statistics-2026`
|
||||
Reason: strongest citation potential because statistics pages are the easiest source type for LLMs to quote.
|
||||
Next move: verify every stat has a current primary source and an explicit inline citation in the article body.
|
||||
|
||||
2. `qr-code-analytics`
|
||||
Reason: high commercial intent and strong fit for QR Master's differentiation around measurement and ROI.
|
||||
Next move: sharpen answer blocks around scan metrics, dashboards, and campaign decisions.
|
||||
|
||||
3. `qr-code-marketing`
|
||||
Reason: bridges informational and product-intent queries around campaign ROI, CTAs, and tracking.
|
||||
Next move: tighten the first-screen answer and add more comparative guidance for common campaign use cases.
|
||||
|
||||
4. `free-vs-paid-qr-generator`
|
||||
Reason: strong comparison intent and a natural path into dynamic QR, tracking, and upgrade logic.
|
||||
Next move: strengthen side-by-side comparison blocks and source any claims about reliability or limits.
|
||||
|
||||
## Priority 2
|
||||
|
||||
5. `best-qr-code-generator-2026`
|
||||
Reason: "best" queries are heavily represented in AI answers but need balanced, defensible comparisons.
|
||||
Next move: review neutrality, keep claims sourced, and make evaluation criteria more explicit.
|
||||
|
||||
6. `bulk-qr-code-generator-excel`
|
||||
Reason: strong workflow intent and direct fit with a high-value product capability.
|
||||
Next move: improve step extraction and source support for operational best practices where possible.
|
||||
|
||||
7. `qr-code-events`
|
||||
Reason: clear use-case page with practical intent and good overlap with tracking and dynamic QR value.
|
||||
Next move: add stronger answer passages around tickets, check-in, UTMs, and event ROI.
|
||||
|
||||
8. `qr-code-security`
|
||||
Reason: security content earns citations when it is current, specific, and source-heavy.
|
||||
Next move: validate the quishing data points and make safe-deployment recommendations easier to quote.
|
||||
|
||||
## Review Criteria
|
||||
|
||||
- The first 40 to 60 words should answer the core query directly.
|
||||
- Major claims should point to a primary source, not an unsourced assertion.
|
||||
- Comparison and checklist content should prefer tables or tightly structured blocks over long prose.
|
||||
- Posts that support product evaluation should link clearly into the relevant QR Master marketing pages.
|
||||
419
AI-SEO-TOP5-REWRITE-PLAN.md
Normal file
@@ -0,0 +1,419 @@
|
||||
# AI SEO Top 5 Rewrite Plan
|
||||
|
||||
Last updated: 2026-04-14
|
||||
|
||||
Method: `ai-seo`
|
||||
|
||||
Goal: define the exact AEO/GEO rewrite moves for the five blog posts with the strongest combination of keyword demand, product fit, and AI citation potential.
|
||||
|
||||
## 1. `dynamic-vs-static-qr-codes`
|
||||
|
||||
File reference: [src/lib/blog-data.ts](/abs/path/C:/Users/a931627/Documents/QRMASTER/src/lib/blog-data.ts:707)
|
||||
|
||||
### Target queries
|
||||
|
||||
- `dynamic qr code`
|
||||
- `dynamic qr code generator`
|
||||
- `create dynamic qr code`
|
||||
- `static qr codes`
|
||||
- `editable qr code`
|
||||
|
||||
### What already works
|
||||
|
||||
- Strong `quickAnswer`
|
||||
- Clear FAQ intent
|
||||
- Good internal link path into tracking and comparison content
|
||||
- Sources already exist
|
||||
|
||||
### Exact sections to change
|
||||
|
||||
1. Replace the opening body paragraph with a direct definition + decision summary.
|
||||
Current issue: the intro starts with a conversational framing instead of a highly extractable answer block.
|
||||
Change to: a 40 to 60 word paragraph that answers:
|
||||
"A static QR code cannot be edited after printing. A dynamic QR code can be updated, tracked, and reused. For business campaigns, menus, and promotions, dynamic QR codes are usually the better choice because they prevent reprints and enable analytics."
|
||||
|
||||
2. Add an early comparison table directly after the intro.
|
||||
New section:
|
||||
`## Static vs Dynamic QR Code Comparison`
|
||||
Include rows for:
|
||||
- editable after printing
|
||||
- analytics
|
||||
- best use case
|
||||
- risk of reprint cost
|
||||
- ideal for marketing
|
||||
- ideal for permanent utility use
|
||||
|
||||
3. Add a decision section that maps user intent to format choice.
|
||||
New section:
|
||||
`## When To Use Static QR Codes`
|
||||
New section:
|
||||
`## When To Use Dynamic QR Codes`
|
||||
Each section should open with a one-sentence answer, then 3 to 5 bullets.
|
||||
|
||||
4. Add a cost/risk section.
|
||||
New section:
|
||||
`## Why Dynamic QR Codes Save Money`
|
||||
This should translate product value into a business outcome:
|
||||
- changed menu URL
|
||||
- campaign landing page update
|
||||
- print correction avoidance
|
||||
|
||||
5. Expand FAQ to cover high-intent objections.
|
||||
Add:
|
||||
- "Are dynamic QR codes worth paying for?"
|
||||
- "Can a dynamic QR code become inactive?"
|
||||
- "Is a static QR code ever better than a dynamic one?"
|
||||
|
||||
### AEO focus
|
||||
|
||||
- Make the first screen answer self-contained.
|
||||
- Prefer table + decision logic over generic prose.
|
||||
- Keep the distinction between "editable" and "trackable" explicit in every major section.
|
||||
|
||||
### Authority upgrades
|
||||
|
||||
- Add at least one explicit sourced statement in the intro or first comparison section.
|
||||
- Where possible, cite original sources for adoption or tracking claims rather than broad vendor summaries.
|
||||
|
||||
### Internal linking
|
||||
|
||||
- Link to `/dynamic-qr-code-generator`
|
||||
- Link to `/qr-code-tracking`
|
||||
- Link to `/pricing`
|
||||
- Keep links to `trackable-qr-codes` and `free-vs-paid-qr-generator`
|
||||
|
||||
## 2. `qr-code-tracking-guide-2025`
|
||||
|
||||
File reference: [src/lib/blog-data.ts](/abs/path/C:/Users/a931627/Documents/QRMASTER/src/lib/blog-data.ts:653)
|
||||
|
||||
### Target queries
|
||||
|
||||
- `qr code tracking`
|
||||
- `track qr scans`
|
||||
- `dynamic qr code analytics`
|
||||
- `google analytics qr`
|
||||
- `utm qr codes`
|
||||
|
||||
### What already works
|
||||
|
||||
- High commercial relevance
|
||||
- Strong `quickAnswer`
|
||||
- Good `keySteps`
|
||||
- FAQ already aligned to the query
|
||||
|
||||
### Exact sections to change
|
||||
|
||||
1. Replace `Why Track QR Codes?` with a sharper query-matching heading.
|
||||
Rename to:
|
||||
`## What Is QR Code Tracking?`
|
||||
The first paragraph should define tracking in one extractable block:
|
||||
"QR code tracking means measuring what happens after a scan. With a dynamic QR code, you can log scan time, device type, location, and destination performance. If you also add UTM parameters, you can measure campaign attribution in tools like GA4."
|
||||
|
||||
2. Split "tracking" and "analytics" clearly.
|
||||
New section:
|
||||
`## QR Code Tracking vs QR Code Analytics`
|
||||
Reason: this is already in the FAQ and deserves a visible answer block because it is highly citable.
|
||||
|
||||
3. Add a metrics section with a structured list.
|
||||
New section:
|
||||
`## What Metrics Should You Track?`
|
||||
Use a table with:
|
||||
- total scans
|
||||
- unique scans
|
||||
- scan time
|
||||
- device type
|
||||
- location
|
||||
- landing page conversions
|
||||
- cost per conversion
|
||||
|
||||
4. Add an implementation section for GA4 and UTMs.
|
||||
New section:
|
||||
`## How To Track QR Codes In Google Analytics 4`
|
||||
Keep it procedural:
|
||||
- create dynamic QR destination
|
||||
- append UTM parameters
|
||||
- define conversion event in GA4
|
||||
- compare placements
|
||||
|
||||
5. Add a limitations section.
|
||||
New section:
|
||||
`## What QR Tracking Can And Cannot Measure`
|
||||
This improves trust and helps citation because it sounds more rigorous.
|
||||
|
||||
### AEO focus
|
||||
|
||||
- The first H2 should match the core query exactly.
|
||||
- One section should answer "Can I track a static QR code?" before the FAQ.
|
||||
- Use one metric table instead of only prose.
|
||||
|
||||
### Authority upgrades
|
||||
|
||||
- Keep Bitly and Google Analytics references, but tighten them around specific claims.
|
||||
- If scan or attribution claims are broad, attach dates and exact measurement context.
|
||||
|
||||
### Internal linking
|
||||
|
||||
- Link to `/qr-code-tracking`
|
||||
- Link to `utm-parameter-qr-codes`
|
||||
- Link to `qr-code-analytics`
|
||||
- Link to `/dynamic-qr-code-generator`
|
||||
|
||||
## 3. `bulk-qr-code-generator-excel`
|
||||
|
||||
File reference: [src/lib/blog-data.ts](/abs/path/C:/Users/a931627/Documents/QRMASTER/src/lib/blog-data.ts:759)
|
||||
|
||||
### Target queries
|
||||
|
||||
- `bulk qr code generator`
|
||||
- `qr code generator bulk`
|
||||
- `qr code generator excel`
|
||||
- `qr codes from excel`
|
||||
- `csv qr code generator`
|
||||
|
||||
### What already works
|
||||
|
||||
- Strong workflow intent
|
||||
- Good step list
|
||||
- Good FAQ coverage
|
||||
- Strong product fit for a paid/business feature
|
||||
|
||||
### Exact sections to change
|
||||
|
||||
1. Rewrite the intro to answer the exact workflow query faster.
|
||||
Current issue: the intro starts with narrative scale examples before the direct instruction.
|
||||
Change to:
|
||||
"To generate bulk QR codes from Excel, prepare a spreadsheet with one row per QR destination, export it as CSV, upload it to a bulk QR generator, and download the generated batch. This is the standard workflow for product labels, badges, inventory, and large campaigns."
|
||||
|
||||
2. Add a file format section.
|
||||
New section:
|
||||
`## Excel vs CSV: Which Format Do You Actually Need?`
|
||||
This should explicitly explain that CSV is usually the upload format even when users say Excel.
|
||||
|
||||
3. Add a required-column section.
|
||||
New section:
|
||||
`## Recommended Spreadsheet Columns`
|
||||
Use a table:
|
||||
- `url`
|
||||
- `label`
|
||||
- `campaign`
|
||||
- `utm_source`
|
||||
- `utm_medium`
|
||||
- `utm_campaign`
|
||||
- optional `filename`
|
||||
|
||||
4. Add a common-errors section.
|
||||
New section:
|
||||
`## Common Bulk QR Upload Errors`
|
||||
Include:
|
||||
- broken URLs
|
||||
- inconsistent columns
|
||||
- spaces in headers
|
||||
- mixed protocols
|
||||
- untested redirect destinations
|
||||
|
||||
5. Add a dynamic-vs-static decision block for batches.
|
||||
New section:
|
||||
`## Should Bulk QR Codes Be Static Or Dynamic?`
|
||||
This should explicitly tie bulk use cases to tracking, editing, and reprint risk.
|
||||
|
||||
6. Add a QA checklist before production.
|
||||
New section:
|
||||
`## Pre-Print Quality Check`
|
||||
Use a numbered list with 5 to 7 checks.
|
||||
|
||||
### AEO focus
|
||||
|
||||
- This post should behave like a procedural answer, not a generic guide.
|
||||
- The column table and error list are likely the most citable parts.
|
||||
- Make "Excel" and "CSV" relationship explicit because users search for Excel but often need CSV.
|
||||
|
||||
### Authority upgrades
|
||||
|
||||
- Existing sources are serviceable, but add at least one stronger operational source if available.
|
||||
- Where no authoritative external source exists, use precise first-party workflow guidance without overclaiming.
|
||||
|
||||
### Internal linking
|
||||
|
||||
- Link to `/bulk-qr-code-generator`
|
||||
- Link to `qr-code-print-size-guide`
|
||||
- Link to `qr-code-tracking-guide-2025`
|
||||
- Link to `dynamic-vs-static-qr-codes`
|
||||
|
||||
## 4. `vcard-qr-code-generator`
|
||||
|
||||
File reference: [src/lib/blog-data.ts](/abs/path/C:/Users/a931627/Documents/QRMASTER/src/lib/blog-data.ts:504)
|
||||
|
||||
### Target queries
|
||||
|
||||
- `vcard qr code generator`
|
||||
- `vcard qr code`
|
||||
- `vcard generator`
|
||||
- `vcard qr`
|
||||
- `create vcard qr code`
|
||||
|
||||
### What already works
|
||||
|
||||
- Good keyword fit
|
||||
- Good query-to-tool match
|
||||
- Strong utility use case
|
||||
|
||||
### Exact sections to change
|
||||
|
||||
1. Tighten the opening definition.
|
||||
The first paragraph should answer:
|
||||
"A vCard QR code stores contact details such as name, phone number, email, company, and website. When someone scans it, they can save the contact directly to their phone without typing."
|
||||
|
||||
2. Add a static-vs-dynamic contact section.
|
||||
New section:
|
||||
`## Static vs Dynamic vCard QR Codes`
|
||||
Cover:
|
||||
- when static is enough
|
||||
- when dynamic is better
|
||||
- when tracking matters
|
||||
|
||||
3. Add a field breakdown section.
|
||||
New section:
|
||||
`## What Information Can A vCard QR Code Include?`
|
||||
Use a compact list or table:
|
||||
- full name
|
||||
- phone
|
||||
- email
|
||||
- company
|
||||
- job title
|
||||
- website
|
||||
- address
|
||||
- social profile
|
||||
|
||||
4. Add a use-case section.
|
||||
New section:
|
||||
`## Best Use Cases For vCard QR Codes`
|
||||
Examples:
|
||||
- business cards
|
||||
- trade shows
|
||||
- packaging inserts
|
||||
- storefronts
|
||||
- service professionals
|
||||
|
||||
5. Add a scannability and contact-save section.
|
||||
New section:
|
||||
`## Best Practices For High Save Rates`
|
||||
Focus on CTA language:
|
||||
- scan to save contact
|
||||
- add me instantly
|
||||
- connect without typing
|
||||
|
||||
### AEO focus
|
||||
|
||||
- Treat this as a definitional + use-case post, not just a tool page.
|
||||
- The definition block and field list are the most important extractable components.
|
||||
|
||||
### Authority upgrades
|
||||
|
||||
- If current sources are weak or missing, add at least one standards-oriented or platform-oriented source.
|
||||
- Avoid unsupported claims around conversion unless sourced.
|
||||
|
||||
### Internal linking
|
||||
|
||||
- Link to the vCard tool page
|
||||
- Link to `business-card-qr-code`
|
||||
- Link to `dynamic-vs-static-qr-codes`
|
||||
- Link to `/pricing` if dynamic/contact-management features are relevant
|
||||
|
||||
## 5. `qr-code-print-size-guide`
|
||||
|
||||
File reference: [src/lib/blog-data.ts](/abs/path/C:/Users/a931627/Documents/QRMASTER/src/lib/blog-data.ts:604)
|
||||
|
||||
### Target queries
|
||||
|
||||
- `minimum qr code size`
|
||||
- `qr code print size`
|
||||
- `qr code size guide`
|
||||
- `qr code scanning distance`
|
||||
|
||||
### What already works
|
||||
|
||||
- Very strong query structure
|
||||
- Excellent snippet potential
|
||||
- Good `quickAnswer`
|
||||
- Good FAQ fit
|
||||
|
||||
### Exact sections to change
|
||||
|
||||
1. Keep the 10:1 rule, but make it the first body paragraph in exact answer form.
|
||||
Suggested phrasing:
|
||||
"The standard starting rule for QR print size is 10:1: the code should be about one-tenth of the expected scanning distance. A QR code scanned from 2 meters away should usually be around 20 centimeters wide."
|
||||
|
||||
2. Add a distance-to-size table immediately after the intro.
|
||||
New section:
|
||||
`## QR Code Size Chart By Scanning Distance`
|
||||
Include examples for:
|
||||
- 20 cm
|
||||
- 50 cm
|
||||
- 1 m
|
||||
- 2 m
|
||||
- 5 m
|
||||
|
||||
3. Add format-specific minimums.
|
||||
New section:
|
||||
`## Minimum QR Code Sizes For Common Print Formats`
|
||||
Use rows for:
|
||||
- business card
|
||||
- flyer
|
||||
- poster
|
||||
- packaging
|
||||
- menu stand
|
||||
- window signage
|
||||
|
||||
4. Add a density warning section.
|
||||
New section:
|
||||
`## Why More Data Requires A Larger QR Code`
|
||||
Cover:
|
||||
- long URLs
|
||||
- vCard payloads
|
||||
- WiFi payloads
|
||||
- error correction tradeoffs
|
||||
|
||||
5. Add a print-production checklist.
|
||||
New section:
|
||||
`## Print Checklist Before You Go Live`
|
||||
Include:
|
||||
- SVG preferred
|
||||
- 300 DPI minimum for raster
|
||||
- quiet zone intact
|
||||
- strong contrast
|
||||
- test in real lighting
|
||||
- test with average phones, not only flagship devices
|
||||
|
||||
### AEO focus
|
||||
|
||||
- This post should be built around tables and formulas, not narrative.
|
||||
- The size chart is likely the strongest snippet and AI Overview asset.
|
||||
- Keep measurements concrete and example-heavy.
|
||||
|
||||
### Authority upgrades
|
||||
|
||||
- If possible, support the 10:1 rule with an external reference or state it clearly as an operational best-practice baseline.
|
||||
- Avoid over-precision if it is based on heuristics rather than a standard.
|
||||
|
||||
### Internal linking
|
||||
|
||||
- Link to `business-card-qr-code`
|
||||
- Link to `qr-code-restaurant-menu`
|
||||
- Link to `bulk-qr-code-generator-excel`
|
||||
- Link to relevant tool or generator pages
|
||||
|
||||
## Execution Order
|
||||
|
||||
1. `dynamic-vs-static-qr-codes`
|
||||
2. `qr-code-tracking-guide-2025`
|
||||
3. `bulk-qr-code-generator-excel`
|
||||
4. `qr-code-print-size-guide`
|
||||
5. `vcard-qr-code-generator`
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- The first paragraph on each post answers the target query directly.
|
||||
- Each post includes at least one visibly structured block that is easy to quote:
|
||||
table, checklist, comparison block, or metric summary.
|
||||
- Claims that imply data, performance, or market adoption are tied to a source.
|
||||
- The post clearly routes users into the relevant QR Master product or feature page.
|
||||
322
DESIGN.md
Normal file
@@ -0,0 +1,322 @@
|
||||
# Design System Inspired by Stripe
|
||||
|
||||
## 1. Visual Theme & Atmosphere
|
||||
|
||||
Stripe's website is the gold standard of fintech design -- a system that manages to feel simultaneously technical and luxurious, precise and warm. The page opens on a clean white canvas (`#ffffff`) with deep navy headings (`#061b31`) and a signature purple (`#533afd`) that functions as both brand anchor and interactive accent. This isn't the cold, clinical purple of enterprise software; it's a rich, saturated violet that reads as confident and premium. The overall impression is of a financial institution redesigned by a world-class type foundry.
|
||||
|
||||
The custom `sohne-var` variable font is the defining element of Stripe's visual identity. Every text element enables the OpenType `"ss01"` stylistic set, which modifies character shapes for a distinctly geometric, modern feel. At display sizes (48px-56px), sohne-var runs at weight 300 -- an extraordinarily light weight for headlines that creates an ethereal, almost whispered authority. This is the opposite of the "bold hero headline" convention; Stripe's headlines feel like they don't need to shout. The negative letter-spacing (-1.4px at 56px, -0.96px at 48px) tightens the text into dense, engineered blocks. At smaller sizes, the system also uses weight 300 with proportionally reduced tracking, and tabular numerals via `"tnum"` for financial data display.
|
||||
|
||||
What truly distinguishes Stripe is its shadow system. Rather than the flat or single-layer approach of most sites, Stripe uses multi-layer, blue-tinted shadows: the signature `rgba(50,50,93,0.25)` combined with `rgba(0,0,0,0.1)` creates shadows with a cool, almost atmospheric depth -- like elements are floating in a twilight sky. The blue-gray undertone of the primary shadow color (50,50,93) ties directly to the navy-purple brand palette, making even elevation feel on-brand.
|
||||
|
||||
**Key Characteristics:**
|
||||
- sohne-var with OpenType `"ss01"` on all text -- a custom stylistic set that defines the brand's letterforms
|
||||
- Weight 300 as the signature headline weight -- light, confident, anti-convention
|
||||
- Negative letter-spacing at display sizes (-1.4px at 56px, progressive relaxation downward)
|
||||
- Blue-tinted multi-layer shadows using `rgba(50,50,93,0.25)` -- elevation that feels brand-colored
|
||||
- Deep navy (`#061b31`) headings instead of black -- warm, premium, financial-grade
|
||||
- Conservative border-radius (4px-8px) -- nothing pill-shaped, nothing harsh
|
||||
- Ruby (`#ea2261`) and magenta (`#f96bee`) accents for gradient and decorative elements
|
||||
- `SourceCodePro` as the monospace companion for code and technical labels
|
||||
|
||||
## 2. Color Palette & Roles
|
||||
|
||||
### Primary
|
||||
- **Stripe Purple** (`#533afd`): Primary brand color, CTA backgrounds, link text, interactive highlights. A saturated blue-violet that anchors the entire system.
|
||||
- **Deep Navy** (`#061b31`): `--hds-color-heading-solid`. Primary heading color. Not black, not gray -- a very dark blue that adds warmth and depth to text.
|
||||
- **Pure White** (`#ffffff`): Page background, card surfaces, button text on dark backgrounds.
|
||||
|
||||
### Brand & Dark
|
||||
- **Brand Dark** (`#1c1e54`): `--hds-color-util-brand-900`. Deep indigo for dark sections, footer backgrounds, and immersive brand moments.
|
||||
- **Dark Navy** (`#0d253d`): `--hds-color-core-neutral-975`. The darkest neutral -- almost-black with a blue undertone for maximum depth without harshness.
|
||||
|
||||
### Accent Colors
|
||||
- **Ruby** (`#ea2261`): `--hds-color-accentColorMode-ruby-icon-solid`. Warm red-pink for icons, alerts, and accent elements.
|
||||
- **Magenta** (`#f96bee`): `--hds-color-accentColorMode-magenta-icon-gradientMiddle`. Vivid pink-purple for gradients and decorative highlights.
|
||||
- **Magenta Light** (`#ffd7ef`): `--hds-color-util-accent-magenta-100`. Tinted surface for magenta-themed cards and badges.
|
||||
|
||||
### Interactive
|
||||
- **Primary Purple** (`#533afd`): Primary link color, active states, selected elements.
|
||||
- **Purple Hover** (`#4434d4`): Darker purple for hover states on primary elements.
|
||||
- **Purple Deep** (`#2e2b8c`): `--hds-color-button-ui-iconHover`. Dark purple for icon hover states.
|
||||
- **Purple Light** (`#b9b9f9`): `--hds-color-action-bg-subduedHover`. Soft lavender for subdued hover backgrounds.
|
||||
- **Purple Mid** (`#665efd`): `--hds-color-input-selector-text-range`. Range selector and input highlight color.
|
||||
|
||||
### Neutral Scale
|
||||
- **Heading** (`#061b31`): Primary headings, nav text, strong labels.
|
||||
- **Label** (`#273951`): `--hds-color-input-text-label`. Form labels, secondary headings.
|
||||
- **Body** (`#64748d`): Secondary text, descriptions, captions.
|
||||
- **Success Green** (`#15be53`): Status badges, success indicators (with 0.2-0.4 alpha for backgrounds/borders).
|
||||
- **Success Text** (`#108c3d`): Success badge text color.
|
||||
- **Lemon** (`#9b6829`): `--hds-color-core-lemon-500`. Warning and highlight accent.
|
||||
|
||||
### Surface & Borders
|
||||
- **Border Default** (`#e5edf5`): Standard border color for cards, dividers, and containers.
|
||||
- **Border Purple** (`#b9b9f9`): Active/selected state borders on buttons and inputs.
|
||||
- **Border Soft Purple** (`#d6d9fc`): Subtle purple-tinted borders for secondary elements.
|
||||
- **Border Magenta** (`#ffd7ef`): Pink-tinted borders for magenta-themed elements.
|
||||
- **Border Dashed** (`#362baa`): Dashed borders for drop zones and placeholder elements.
|
||||
|
||||
### Shadow Colors
|
||||
- **Shadow Blue** (`rgba(50,50,93,0.25)`): The signature -- blue-tinted primary shadow color.
|
||||
- **Shadow Dark Blue** (`rgba(3,3,39,0.25)`): Deeper blue shadow for elevated elements.
|
||||
- **Shadow Black** (`rgba(0,0,0,0.1)`): Secondary shadow layer for depth reinforcement.
|
||||
- **Shadow Ambient** (`rgba(23,23,23,0.08)`): Soft ambient shadow for subtle elevation.
|
||||
- **Shadow Soft** (`rgba(23,23,23,0.06)`): Minimal ambient shadow for light lift.
|
||||
|
||||
## 3. Typography Rules
|
||||
|
||||
### Font Family
|
||||
- **Primary**: `sohne-var`, with fallback: `SF Pro Display`
|
||||
- **Monospace**: `SourceCodePro`, with fallback: `SFMono-Regular`
|
||||
- **OpenType Features**: `"ss01"` enabled globally on all sohne-var text; `"tnum"` for tabular numbers on financial data and captions.
|
||||
|
||||
### Hierarchy
|
||||
|
||||
| Role | Font | Size | Weight | Line Height | Letter Spacing | Features | Notes |
|
||||
|------|------|------|--------|-------------|----------------|----------|-------|
|
||||
| Display Hero | sohne-var | 56px (3.50rem) | 300 | 1.03 (tight) | -1.4px | ss01 | Maximum size, whisper-weight authority |
|
||||
| Display Large | sohne-var | 48px (3.00rem) | 300 | 1.15 (tight) | -0.96px | ss01 | Secondary hero headlines |
|
||||
| Section Heading | sohne-var | 32px (2.00rem) | 300 | 1.10 (tight) | -0.64px | ss01 | Feature section titles |
|
||||
| Sub-heading Large | sohne-var | 26px (1.63rem) | 300 | 1.12 (tight) | -0.26px | ss01 | Card headings, sub-sections |
|
||||
| Sub-heading | sohne-var | 22px (1.38rem) | 300 | 1.10 (tight) | -0.22px | ss01 | Smaller section heads |
|
||||
| Body Large | sohne-var | 18px (1.13rem) | 300 | 1.40 | normal | ss01 | Feature descriptions, intro text |
|
||||
| Body | sohne-var | 16px (1.00rem) | 300-400 | 1.40 | normal | ss01 | Standard reading text |
|
||||
| Button | sohne-var | 16px (1.00rem) | 400 | 1.00 (tight) | normal | ss01 | Primary button text |
|
||||
| Button Small | sohne-var | 14px (0.88rem) | 400 | 1.00 (tight) | normal | ss01 | Secondary/compact buttons |
|
||||
| Link | sohne-var | 14px (0.88rem) | 400 | 1.00 (tight) | normal | ss01 | Navigation links |
|
||||
| Caption | sohne-var | 13px (0.81rem) | 400 | normal | normal | ss01 | Small labels, metadata |
|
||||
| Caption Small | sohne-var | 12px (0.75rem) | 300-400 | 1.33-1.45 | normal | ss01 | Fine print, timestamps |
|
||||
| Caption Tabular | sohne-var | 12px (0.75rem) | 300-400 | 1.33 | -0.36px | tnum | Financial data, numbers |
|
||||
| Micro | sohne-var | 10px (0.63rem) | 300 | 1.15 (tight) | 0.1px | ss01 | Tiny labels, axis markers |
|
||||
| Micro Tabular | sohne-var | 10px (0.63rem) | 300 | 1.15 (tight) | -0.3px | tnum | Chart data, small numbers |
|
||||
| Nano | sohne-var | 8px (0.50rem) | 300 | 1.07 (tight) | normal | ss01 | Smallest labels |
|
||||
| Code Body | SourceCodePro | 12px (0.75rem) | 500 | 2.00 (relaxed) | normal | -- | Code blocks, syntax |
|
||||
| Code Bold | SourceCodePro | 12px (0.75rem) | 700 | 2.00 (relaxed) | normal | -- | Bold code, keywords |
|
||||
| Code Label | SourceCodePro | 12px (0.75rem) | 500 | 2.00 (relaxed) | normal | uppercase | Technical labels |
|
||||
| Code Micro | SourceCodePro | 9px (0.56rem) | 500 | 1.00 (tight) | normal | ss01 | Tiny code annotations |
|
||||
|
||||
### Principles
|
||||
- **Light weight as signature**: Weight 300 at display sizes is Stripe's most distinctive typographic choice. Where others use 600-700 to command attention, Stripe uses lightness as luxury -- the text is so confident it doesn't need weight to be authoritative.
|
||||
- **ss01 everywhere**: The `"ss01"` stylistic set is non-negotiable. It modifies specific glyphs (likely alternate `a`, `g`, `l` forms) to create a more geometric, contemporary feel across all sohne-var text.
|
||||
- **Two OpenType modes**: `"ss01"` for display/body text, `"tnum"` for tabular numerals in financial data. These never overlap -- a number in a paragraph uses ss01, a number in a data table uses tnum.
|
||||
- **Progressive tracking**: Letter-spacing tightens proportionally with size: -1.4px at 56px, -0.96px at 48px, -0.64px at 32px, -0.26px at 26px, normal at 16px and below.
|
||||
- **Two-weight simplicity**: Primarily 300 (body and headings) and 400 (UI/buttons). No bold (700) in the primary font -- SourceCodePro uses 500/700 for code contrast.
|
||||
|
||||
## 4. Component Stylings
|
||||
|
||||
### Buttons
|
||||
|
||||
**Primary Purple**
|
||||
- Background: `#533afd`
|
||||
- Text: `#ffffff`
|
||||
- Padding: 8px 16px
|
||||
- Radius: 4px
|
||||
- Font: 16px sohne-var weight 400, `"ss01"`
|
||||
- Hover: `#4434d4` background
|
||||
- Use: Primary CTA ("Start now", "Contact sales")
|
||||
|
||||
**Ghost / Outlined**
|
||||
- Background: transparent
|
||||
- Text: `#533afd`
|
||||
- Padding: 8px 16px
|
||||
- Radius: 4px
|
||||
- Border: `1px solid #b9b9f9`
|
||||
- Font: 16px sohne-var weight 400, `"ss01"`
|
||||
- Hover: background shifts to `rgba(83,58,253,0.05)`
|
||||
- Use: Secondary actions
|
||||
|
||||
**Transparent Info**
|
||||
- Background: transparent
|
||||
- Text: `#2874ad`
|
||||
- Padding: 8px 16px
|
||||
- Radius: 4px
|
||||
- Border: `1px solid rgba(43,145,223,0.2)`
|
||||
- Use: Tertiary/info-level actions
|
||||
|
||||
**Neutral Ghost**
|
||||
- Background: transparent (`rgba(255,255,255,0)`)
|
||||
- Text: `rgba(16,16,16,0.3)`
|
||||
- Padding: 8px 16px
|
||||
- Radius: 4px
|
||||
- Outline: `1px solid rgb(212,222,233)`
|
||||
- Use: Disabled or muted actions
|
||||
|
||||
### Cards & Containers
|
||||
- Background: `#ffffff`
|
||||
- Border: `1px solid #e5edf5` (standard) or `1px solid #061b31` (dark accent)
|
||||
- Radius: 4px (tight), 5px (standard), 6px (comfortable), 8px (featured)
|
||||
- Shadow (standard): `rgba(50,50,93,0.25) 0px 30px 45px -30px, rgba(0,0,0,0.1) 0px 18px 36px -18px`
|
||||
- Shadow (ambient): `rgba(23,23,23,0.08) 0px 15px 35px 0px`
|
||||
- Hover: shadow intensifies, often adding the blue-tinted layer
|
||||
|
||||
### Badges / Tags / Pills
|
||||
**Neutral Pill**
|
||||
- Background: `#ffffff`
|
||||
- Text: `#000000`
|
||||
- Padding: 0px 6px
|
||||
- Radius: 4px
|
||||
- Border: `1px solid #f6f9fc`
|
||||
- Font: 11px weight 400
|
||||
|
||||
**Success Badge**
|
||||
- Background: `rgba(21,190,83,0.2)`
|
||||
- Text: `#108c3d`
|
||||
- Padding: 1px 6px
|
||||
- Radius: 4px
|
||||
- Border: `1px solid rgba(21,190,83,0.4)`
|
||||
- Font: 10px weight 300
|
||||
|
||||
### Inputs & Forms
|
||||
- Border: `1px solid #e5edf5`
|
||||
- Radius: 4px
|
||||
- Focus: `1px solid #533afd` or purple ring
|
||||
- Label: `#273951`, 14px sohne-var
|
||||
- Text: `#061b31`
|
||||
- Placeholder: `#64748d`
|
||||
|
||||
### Navigation
|
||||
- Clean horizontal nav on white, sticky with blur backdrop
|
||||
- Brand logotype left-aligned
|
||||
- Links: sohne-var 14px weight 400, `#061b31` text with `"ss01"`
|
||||
- Radius: 6px on nav container
|
||||
- CTA: purple button right-aligned ("Sign in", "Start now")
|
||||
- Mobile: hamburger toggle with 6px radius
|
||||
|
||||
### Decorative Elements
|
||||
**Dashed Borders**
|
||||
- `1px dashed #362baa` (purple) for placeholder/drop zones
|
||||
- `1px dashed #ffd7ef` (magenta) for magenta-themed decorative borders
|
||||
|
||||
**Gradient Accents**
|
||||
- Ruby-to-magenta gradients (`#ea2261` to `#f96bee`) for hero decorations
|
||||
- Brand dark sections use `#1c1e54` backgrounds with white text
|
||||
|
||||
## 5. Layout Principles
|
||||
|
||||
### Spacing System
|
||||
- Base unit: 8px
|
||||
- Scale: 1px, 2px, 4px, 6px, 8px, 10px, 11px, 12px, 14px, 16px, 18px, 20px
|
||||
- Notable: The scale is dense at the small end (every 2px from 4-12), reflecting Stripe's precision-oriented UI for financial data
|
||||
|
||||
### Grid & Container
|
||||
- Max content width: approximately 1080px
|
||||
- Hero: centered single-column with generous padding, lightweight headlines
|
||||
- Feature sections: 2-3 column grids for feature cards
|
||||
- Full-width dark sections with `#1c1e54` background for brand immersion
|
||||
- Code/dashboard previews as contained cards with blue-tinted shadows
|
||||
|
||||
### Whitespace Philosophy
|
||||
- **Precision spacing**: Unlike the vast emptiness of minimalist systems, Stripe uses measured, purposeful whitespace. Every gap is a deliberate typographic choice.
|
||||
- **Dense data, generous chrome**: Financial data displays (tables, charts) are tightly packed, but the UI chrome around them is generously spaced. This creates a sense of controlled density -- like a well-organized spreadsheet in a beautiful frame.
|
||||
- **Section rhythm**: White sections alternate with dark brand sections (`#1c1e54`), creating a dramatic light/dark cadence that prevents monotony without introducing arbitrary color.
|
||||
|
||||
### Border Radius Scale
|
||||
- Micro (1px): Fine-grained elements, subtle rounding
|
||||
- Standard (4px): Buttons, inputs, badges, cards -- the workhorse
|
||||
- Comfortable (5px): Standard card containers
|
||||
- Relaxed (6px): Navigation, larger interactive elements
|
||||
- Large (8px): Featured cards, hero elements
|
||||
- Compound: `0px 0px 6px 6px` for bottom-rounded containers (tab panels, dropdown footers)
|
||||
|
||||
## 6. Depth & Elevation
|
||||
|
||||
| Level | Treatment | Use |
|
||||
|-------|-----------|-----|
|
||||
| Flat (Level 0) | No shadow | Page background, inline text |
|
||||
| Ambient (Level 1) | `rgba(23,23,23,0.06) 0px 3px 6px` | Subtle card lift, hover hints |
|
||||
| Standard (Level 2) | `rgba(23,23,23,0.08) 0px 15px 35px` | Standard cards, content panels |
|
||||
| Elevated (Level 3) | `rgba(50,50,93,0.25) 0px 30px 45px -30px, rgba(0,0,0,0.1) 0px 18px 36px -18px` | Featured cards, dropdowns, popovers |
|
||||
| Deep (Level 4) | `rgba(3,3,39,0.25) 0px 14px 21px -14px, rgba(0,0,0,0.1) 0px 8px 17px -8px` | Modals, floating panels |
|
||||
| Ring (Accessibility) | `2px solid #533afd` outline | Keyboard focus ring |
|
||||
|
||||
**Shadow Philosophy**: Stripe's shadow system is built on a principle of chromatic depth. Where most design systems use neutral gray or black shadows, Stripe's primary shadow color (`rgba(50,50,93,0.25)`) is a deep blue-gray that echoes the brand's navy palette. This creates shadows that don't just add depth -- they add brand atmosphere. The multi-layer approach pairs this blue-tinted shadow with a pure black secondary layer (`rgba(0,0,0,0.1)`) at a different offset, creating a parallax-like depth where the branded shadow sits farther from the element and the neutral shadow sits closer. The negative spread values (-30px, -18px) ensure shadows don't extend beyond the element's footprint horizontally, keeping elevation vertical and controlled.
|
||||
|
||||
### Decorative Depth
|
||||
- Dark brand sections (`#1c1e54`) create immersive depth through background color contrast
|
||||
- Gradient overlays with ruby-to-magenta transitions for hero decorations
|
||||
- Shadow color `rgba(0,55,112,0.08)` (`--hds-color-shadow-sm-top`) for top-edge shadows on sticky elements
|
||||
|
||||
## 7. Do's and Don'ts
|
||||
|
||||
### Do
|
||||
- Use sohne-var with `"ss01"` on every text element -- the stylistic set IS the brand
|
||||
- Use weight 300 for all headlines and body text -- lightness is the signature
|
||||
- Apply blue-tinted shadows (`rgba(50,50,93,0.25)`) for all elevated elements
|
||||
- Use `#061b31` (deep navy) for headings instead of `#000000` -- the warmth matters
|
||||
- Keep border-radius between 4px-8px -- conservative rounding is intentional
|
||||
- Use `"tnum"` for any tabular/financial number display
|
||||
- Layer shadows: blue-tinted far + neutral close for depth parallax
|
||||
- Use `#533afd` purple as the primary interactive/CTA color
|
||||
|
||||
### Don't
|
||||
- Don't use weight 600-700 for sohne-var headlines -- weight 300 is the brand voice
|
||||
- Don't use large border-radius (12px+, pill shapes) on cards or buttons -- Stripe is conservative
|
||||
- Don't use neutral gray shadows -- always tint with blue (`rgba(50,50,93,...)`)
|
||||
- Don't skip `"ss01"` on any sohne-var text -- the alternate glyphs define the personality
|
||||
- Don't use pure black (`#000000`) for headings -- always `#061b31` deep navy
|
||||
- Don't use warm accent colors (orange, yellow) for interactive elements -- purple is primary
|
||||
- Don't apply positive letter-spacing at display sizes -- Stripe tracks tight
|
||||
- Don't use the magenta/ruby accents for buttons or links -- they're decorative/gradient only
|
||||
|
||||
## 8. Responsive Behavior
|
||||
|
||||
### Breakpoints
|
||||
| Name | Width | Key Changes |
|
||||
|------|-------|-------------|
|
||||
| Mobile | <640px | Single column, reduced heading sizes, stacked cards |
|
||||
| Tablet | 640-1024px | 2-column grids, moderate padding |
|
||||
| Desktop | 1024-1280px | Full layout, 3-column feature grids |
|
||||
| Large Desktop | >1280px | Centered content with generous margins |
|
||||
|
||||
### Touch Targets
|
||||
- Buttons use comfortable padding (8px-16px vertical)
|
||||
- Navigation links at 14px with adequate spacing
|
||||
- Badges have 6px horizontal padding minimum for tap targets
|
||||
- Mobile nav toggle with 6px radius button
|
||||
|
||||
### Collapsing Strategy
|
||||
- Hero: 56px display -> 32px on mobile, weight 300 maintained
|
||||
- Navigation: horizontal links + CTAs -> hamburger toggle
|
||||
- Feature cards: 3-column -> 2-column -> single column stacked
|
||||
- Dark brand sections: maintain full-width treatment, reduce internal padding
|
||||
- Financial data tables: horizontal scroll on mobile
|
||||
- Section spacing: 64px+ -> 40px on mobile
|
||||
- Typography scale compresses: 56px -> 48px -> 32px hero sizes across breakpoints
|
||||
|
||||
### Image Behavior
|
||||
- Dashboard/product screenshots maintain blue-tinted shadow at all sizes
|
||||
- Hero gradient decorations simplify on mobile
|
||||
- Code blocks maintain `SourceCodePro` treatment, may horizontally scroll
|
||||
- Card images maintain consistent 4px-6px border-radius
|
||||
|
||||
## 9. Agent Prompt Guide
|
||||
|
||||
### Quick Color Reference
|
||||
- Primary CTA: Stripe Purple (`#533afd`)
|
||||
- CTA Hover: Purple Dark (`#4434d4`)
|
||||
- Background: Pure White (`#ffffff`)
|
||||
- Heading text: Deep Navy (`#061b31`)
|
||||
- Body text: Slate (`#64748d`)
|
||||
- Label text: Dark Slate (`#273951`)
|
||||
- Border: Soft Blue (`#e5edf5`)
|
||||
- Link: Stripe Purple (`#533afd`)
|
||||
- Dark section: Brand Dark (`#1c1e54`)
|
||||
- Success: Green (`#15be53`)
|
||||
- Accent decorative: Ruby (`#ea2261`), Magenta (`#f96bee`)
|
||||
|
||||
### Example Component Prompts
|
||||
- "Create a hero section on white background. Headline at 48px sohne-var weight 300, line-height 1.15, letter-spacing -0.96px, color #061b31, font-feature-settings 'ss01'. Subtitle at 18px weight 300, line-height 1.40, color #64748d. Purple CTA button (#533afd, 4px radius, 8px 16px padding, white text) and ghost button (transparent, 1px solid #b9b9f9, #533afd text, 4px radius)."
|
||||
- "Design a card: white background, 1px solid #e5edf5 border, 6px radius. Shadow: rgba(50,50,93,0.25) 0px 30px 45px -30px, rgba(0,0,0,0.1) 0px 18px 36px -18px. Title at 22px sohne-var weight 300, letter-spacing -0.22px, color #061b31, 'ss01'. Body at 16px weight 300, #64748d."
|
||||
- "Build a success badge: rgba(21,190,83,0.2) background, #108c3d text, 4px radius, 1px 6px padding, 10px sohne-var weight 300, border 1px solid rgba(21,190,83,0.4)."
|
||||
- "Create navigation: white sticky header with backdrop-filter blur(12px). sohne-var 14px weight 400 for links, #061b31 text, 'ss01'. Purple CTA 'Start now' right-aligned (#533afd bg, white text, 4px radius). Nav container 6px radius."
|
||||
- "Design a dark brand section: #1c1e54 background, white text. Headline 32px sohne-var weight 300, letter-spacing -0.64px, 'ss01'. Body 16px weight 300, rgba(255,255,255,0.7). Cards inside use rgba(255,255,255,0.1) border with 6px radius."
|
||||
|
||||
### Iteration Guide
|
||||
1. Always enable `font-feature-settings: "ss01"` on sohne-var text -- this is the brand's typographic DNA
|
||||
2. Weight 300 is the default; use 400 only for buttons/links/navigation
|
||||
3. Shadow formula: `rgba(50,50,93,0.25) 0px Y1 B1 -S1, rgba(0,0,0,0.1) 0px Y2 B2 -S2` where Y1/B1 are larger (far shadow) and Y2/B2 are smaller (near shadow)
|
||||
4. Heading color is `#061b31` (deep navy), body is `#64748d` (slate), labels are `#273951` (dark slate)
|
||||
5. Border-radius stays in the 4px-8px range -- never use pill shapes or large rounding
|
||||
6. Use `"tnum"` for any numbers in tables, charts, or financial displays
|
||||
7. Dark sections use `#1c1e54` -- not black, not gray, but a deep branded indigo
|
||||
8. SourceCodePro for code at 12px/500 with 2.00 line-height (very generous for readability)
|
||||
157
FINAL_DELIVERY_PACKAGE_TIMO.md
Normal file
@@ -0,0 +1,157 @@
|
||||
# FINAL DELIVERY PACKAGE — QR Master Outreach
|
||||
|
||||
> [!IMPORTANT]
|
||||
> **Recipient:** knuth.timo@gmail.com
|
||||
> **Sender:** Antigravity AI
|
||||
> **Date:** 2026-04-13
|
||||
>
|
||||
> This document contains all the outreach emails, guest post pitches, and corresponding articles prepared for the QR Master SEO and content marketing campaign.
|
||||
>
|
||||
> **Note:** I cannot send emails directly from this interface. Please copy the content below into your email client to send to the respective targets.
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
1. [Guest Post Pitches & Articles](#1-guest-post-pitches--articles)
|
||||
- [DigitalGpoint](#digitalgpoint)
|
||||
- [Techdee](#techdee)
|
||||
- [SEO Sandwitch](#seo-sandwitch)
|
||||
2. [Web 2.0 & Self-Publishing Articles](#2-web-20--self-publishing-articles)
|
||||
- [Medium](#medium)
|
||||
- [LinkedIn Pulse](#linkedin-pulse)
|
||||
- [Substack Series](#substack-series)
|
||||
3. [Resource Outreach Emails (10 Targets)](#3-resource-outreach-emails-10-targets)
|
||||
|
||||
---
|
||||
|
||||
## 1. Guest Post Pitches & Articles
|
||||
|
||||
### DigitalGpoint
|
||||
**Recipent:** digitalgpoint.webmail@gmail.com
|
||||
**Article Type:** Guest Post
|
||||
|
||||
#### Submission Email
|
||||
**Subject:** Solving the "print gap" for small businesses
|
||||
|
||||
Hi [Name],
|
||||
|
||||
I’ve noticed DigitalGpoint covers a lot of practical tools for business growth. One area that often gets overlooked is the bridge between physical marketing (flyers, menus, signage) and digital analytics.
|
||||
|
||||
I’ve put together a practical guide on "Managing the Move from Static to Dynamic Print." It explains how small business owners are using dynamic redirect layers to make their physical materials editable after printing—saving them from costly reprints when a URL or price changes.
|
||||
|
||||
It’s a straightforward, workflow-focused piece that I believe your readers would find highly actionable.
|
||||
|
||||
Would you be open to reviewing a draft for a guest contribution?
|
||||
|
||||
Best,
|
||||
|
||||
Timo
|
||||
(Writer & Strategist)
|
||||
|
||||
#### Accompanying Article: "Every Print Order Feels Final (Until You Use a Dynamic Layer)"
|
||||
[View full article content in digitalGpoint-dynamic-vs-static-qr-codes.md](file:///c:/Users/a931627/Documents/QRMASTER/articles/digitalGpoint-dynamic-vs-static-qr-codes.md)
|
||||
|
||||
---
|
||||
|
||||
### Techdee
|
||||
**Recipient:** Blayget@gmail.com
|
||||
**Article Type:** Guest Post (Tier 2)
|
||||
|
||||
#### Submission Email
|
||||
**Subject:** Offline-to-Online marketing workflows
|
||||
|
||||
Hi [Name],
|
||||
|
||||
I’ve been following Techdee’s tech and marketing tutorials for some time.
|
||||
|
||||
I’m currently finalizing a piece titled: **"Beyond the Scan: 5 Professional QR Strategies for Modern Marketing."**
|
||||
|
||||
The article moves past the basic "link a code to a site" approach and explores practical technical workflows: using dynamic redirects to avoid reprints, pulling scan data into GA4 for attribution, and managing bulk physical assets.
|
||||
|
||||
It’s a 700-word, list-style tutorial that fits your current format. Is this something you'd like to see for a guest contribution?
|
||||
|
||||
Best,
|
||||
|
||||
Timo
|
||||
(Writer & Strategist)
|
||||
|
||||
#### Accompanying Article: "Beyond the Scan: 5 Professional QR Strategies for Modern Marketing"
|
||||
[View full article content in techdee-5-qr-code-strategies.md](file:///c:/Users/a931627/Documents/QRMASTER/articles/techdee-5-qr-code-strategies.md)
|
||||
|
||||
---
|
||||
|
||||
### SEO Sandwitch
|
||||
**Recipient:** joydeep@seosandwitch.com
|
||||
**Article Type:** Guest Post (Tier 1 - High Value)
|
||||
|
||||
#### Submission Email
|
||||
**Subject:** Attribution blind spots in physical marketing
|
||||
|
||||
Hi Joydeep,
|
||||
|
||||
I’ve been following SEO Sandwitch for a while—your recent piece on AI SEO and GEO was excellent.
|
||||
|
||||
I’m reaching out because I’ve been working on a technical deep-dive that explores a massive attribution blind spot: physical marketing campaigns.
|
||||
|
||||
The piece, **"QR Codes as an Offline-to-Online Signal,"** breaks down how marketers can pull scan data from flyers, packaging, and OOH materials into GA4 to finally close the loop on offline attribution.
|
||||
|
||||
It covers:
|
||||
- Using dynamic redirect layers as an attribution signal.
|
||||
- The indirect impact of physical touchpoints on branded search volume.
|
||||
- Technical setup for UTM-tagged dynamic codes.
|
||||
|
||||
It’s not a superficial "marketing tips" post; it’s a strategist-level look at attribution data.
|
||||
|
||||
I have a ~2,000 word draft ready. Would you be open to taking a look for a potential guest contribution?
|
||||
|
||||
Best,
|
||||
|
||||
Timo
|
||||
(Writer & Strategist)
|
||||
|
||||
#### Accompanying Article: "QR Codes as an Offline-to-Online Signal"
|
||||
[View full article content in seosandwitch-qr-codes-offline-attribution.md](file:///c:/Users/a931627/Documents/QRMASTER/articles/seosandwitch-qr-codes-offline-attribution.md)
|
||||
|
||||
---
|
||||
|
||||
## 2. Web 2.0 & Self-Publishing Articles
|
||||
|
||||
### Medium
|
||||
**Target Platform:** Medium.com
|
||||
**Publication:** Self-publish or submit to a marketing pub (e.g., Better Marketing)
|
||||
|
||||
#### Article: "Beyond the Menu: 5 Practical Ways to Use QR Codes for Business Growth"
|
||||
[View full article content in medium-5-underrated-qr-use-cases.md](file:///c:/Users/a931627/Documents/QRMASTER/articles/medium-5-underrated-qr-use-cases.md)
|
||||
|
||||
---
|
||||
|
||||
### LinkedIn Pulse
|
||||
**Target Platform:** LinkedIn Personal Account
|
||||
|
||||
#### Article: "Why Your Business Card Still Needs a QR Code in 2025"
|
||||
[View full article content in linkedin-business-card-qr.md](file:///c:/Users/a931627/Documents/QRMASTER/articles/linkedin-business-card-qr.md)
|
||||
|
||||
---
|
||||
|
||||
### Substack Series
|
||||
**Target Platform:** Substack Newsletter ("The QR Code Playbook")
|
||||
|
||||
#### Content: 3-Issue Intro Series
|
||||
[View full issues content in substack-playbook-series.md](file:///c:/Users/a931627/Documents/QRMASTER/articles/substack-playbook-series.md)
|
||||
|
||||
---
|
||||
|
||||
## 3. Resource Outreach Emails (10 Targets)
|
||||
|
||||
These are short link-request emails targeting sites that list QR tools or marketing resources.
|
||||
|
||||
**Targets & Templates:**
|
||||
[View all 10 target details and templates in outreach-seo-emails.md](file:///c:/Users/a931627/Documents/QRMASTER/outreach-seo-emails.md)
|
||||
|
||||
---
|
||||
|
||||
> [!TIP]
|
||||
> **Next Steps:**
|
||||
> 1. Start with **Web 2.0 publishing** (Medium, LinkedIn, Substack) to build topical authority.
|
||||
> 2. Send the **Guest Post Pitches** (DigitalGpoint, Techdee, SEO Sandwitch) once the Web 2.0 posts are live so editors can see your writing quality.
|
||||
> 3. Send the **Resource Outreach** emails in a batch of 5-10 per week.
|
||||
2
LICENSE
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 QR Master
|
||||
Copyright (c) 2026 QR Master
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
121
articles/bulk-qr-code-generator-excel-guide.md
Normal file
@@ -0,0 +1,121 @@
|
||||
# Bulk QR Code Generator Guide: Creating QR Codes from Excel & CSV
|
||||
|
||||
If you need to generate hundreds or thousands of QR codes, creating them manually is no longer a realistic option. Whether you are managing product labels for a retail launch, printing badges for a large-scale event, or tracking inventory across multiple warehouses, the manual entry of data into a generator is time-consuming and prone to human error.
|
||||
|
||||
The most efficient workflow is to prepare your data in a spreadsheet—Excel or CSV—and use a **Bulk QR Code Generator** to turn each row into a named, export-ready asset. This guide explains how to structure your files, choose the correct output formats, and follow technical best practices to ensure your codes are scanable and secure.
|
||||
|
||||
---
|
||||
|
||||
## 1. Why Use a Bulk QR Code Generator?
|
||||
|
||||
Industrializing your QR code workflow is about more than just speed; it is about data integrity. As the industry moves closer to the **GS1 Digital Link** standards—the global transition from 1D barcodes to 2D symbols—the complexity of the data embedded in QR codes has increased.
|
||||
|
||||
A bulk generation workflow allows you to:
|
||||
- **Minimize Errors:** Copy-pasting thousands of URLs or IDs into a spreadsheet is safer than manual entry into a web form.
|
||||
- **Automate Naming:** You can assign specific filenames to each QR code based on SKU or ID, making it easy for design and print teams to find the right assets.
|
||||
- **Maintain Consistency:** Standardize colors, error correction levels, and dimensions across an entire batch of assets.
|
||||
|
||||
---
|
||||
|
||||
## 2. How to Structure Your Excel or CSV File for Bulk Generation
|
||||
|
||||
The success of a bulk project depends entirely on the formatting of your source file. Most professional tools require a simple, tabular structure.
|
||||
|
||||
### Column Mapping
|
||||
At a minimum, your spreadsheet should include two primary columns:
|
||||
1. **The Payload (Target URL/Data):** This is the information the scanner will read. It could be a website URL, a vCard string, or a product ID.
|
||||
2. **The Filename (Identifier):** This column tells the generator how to name the exported image files. Use unique identifiers like SKUs or internal IDs (e.g., `SKU-9942`).
|
||||
|
||||
### Data Formatting Rules
|
||||
To prevent generation errors, follow these technical constraints:
|
||||
- **Encoding special characters:** If your URLs contain localized characters or symbols, ensure your CSV is saved with **UTF-8 encoding**.
|
||||
- **No empty rows:** Ensure there are no gaps in your data, as some automated engines may stop processing at the first empty cell.
|
||||
- **Consistent protocol:** Always include the `https://` prefix for URLs to ensure they are recognized as links by mobile OS cameras.
|
||||
- **Avoid duplicate identifiers:** If two rows have the same identifier in your "Filename" column, the second file may overwrite the first during the export process.
|
||||
|
||||
---
|
||||
|
||||
## 3. Step-by-Step: From Spreadsheet to Production-Ready Assets
|
||||
|
||||
Generating a batch of codes involves three critical phases: preparation, design application, and extraction.
|
||||
|
||||
### Step 1: Data Validation
|
||||
Before uploading your file to a tool like **QR Master**, perform a quick audit. Use Excel’s "Remove Duplicates" feature on your identifier column. If you are generating thousands of codes, verify that your browser has enough memory to handle the local processing; professional tools typically process generation in the browser to maintain data privacy.
|
||||
|
||||
### Step 2: Choosing Design and Scanability Parameters
|
||||
When applying a design in bulk, you are setting a global rule for all images:
|
||||
- **Error Correction Level:** For bulk projects, we recommend **Level M (15%)** or **Level H (30%)**. This adds redundancy to the code, allowing it to remain scanable even if it is slightly damaged or partially obscured by a logo.
|
||||
- **Color Contrast:** High contrast is the single most important factor for scanability. A dark foreground (usually black) on a white background remains the gold standard for universal compatibility.
|
||||
- **Quiet Zones:** Modern scanners require a "quiet zone"—a small margin of empty space around the code—to identify the boundaries of the pattern. Ensure your design template respects this margin.
|
||||
|
||||
### Step 3: Exporting and Organization
|
||||
Once generated, the assets are usually provided in a single compressed ZIP file. Because you utilized a "Filename" column, the resulting folder will be organized by your internal IDs rather than generic numbers (e.g., `inventory_ID202.svg` instead of `qrcode_1.png`).
|
||||
|
||||
---
|
||||
|
||||
## 4. Technical File Standards: SVG vs. PNG
|
||||
|
||||
The choice of file format determines the quality of the final physical or digital product.
|
||||
|
||||
### When to use SVG (Scalable Vector Graphics)
|
||||
For any project involving **print**, SVG is the industry standard.
|
||||
- **Infinite Scalability:** Vector files do not lose quality when resized. A code generated for a small product tag can be scaled to fit a shipping crate without pixelation.
|
||||
- **Sharpness:** Printers can interpret the exact mathematical lines of a vector, resulting in sharper edges and higher scan success rates.
|
||||
- **Small File Size:** Despite their high quality, vector files are often smaller in size than high-resolution rasters.
|
||||
|
||||
### When to use PNG (Portable Network Graphics)
|
||||
PNG should be reserved for **digital-first** applications.
|
||||
- **Web and Email:** PNGs are universally supported by web browsers and email clients.
|
||||
- **App Displays:** Use PNG when the QR code is intended to be displayed on screens, such as mobile tickets or digital menus.
|
||||
|
||||
---
|
||||
|
||||
## 5. Security and Privacy: Critical Technical Requirements
|
||||
|
||||
Bulk data often contains sensitive internal links or proprietary product information. In 2026, security standards for QR generators have become more stringent.
|
||||
|
||||
### Browser-Side Generation
|
||||
Browser-side generation is often the safest option for organizations looking to minimize the privacy footprint of a bulk workflow. By ensuring that sensitive spreadsheet data is processed locally on your machine and never sent to a third-party server, you can more effectively align with data privacy regulations like GDPR or CCPA.
|
||||
Browser-side generation is often the preferred option for organizations looking to minimize the privacy footprint of a bulk workflow. By ensuring that sensitive spreadsheet data is processed locally on your machine and not transmitted to a third-party server, you can more effectively manage data handling requirements.
|
||||
|
||||
### Avoiding Redirect Loops
|
||||
If you are using a generator that tracks scans (Dynamic QR codes), ensure the service is reputable. If their servers go down, every code in your bulk batch will stop working. For mission-critical internal logistics or permanent packaging, **Static QR codes** are often the safer, stateless choice.
|
||||
|
||||
---
|
||||
|
||||
## 6. Common Use Case Patterns
|
||||
|
||||
### Inventory and Asset Tracking
|
||||
Operations teams use bulk generation to label machinery, office equipment, or warehouse bins. By including unique batch IDs in the Excel file, they can generate thousands of individual tracking codes that link directly to their internal ERP or database.
|
||||
|
||||
### Event Management and Ticketing
|
||||
For large conferences, organizers use attendee lists to create unique vCard or entry codes. In this scenario, the "Filename" column is usually the attendee's registration number, allowing for easy integration into badge-printing software.
|
||||
|
||||
### Retail and Smart Packaging
|
||||
With the ongoing shift toward the GS1 Digital Link, brands are moving away from simple UPCs and toward unique-at-the-batch level QR codes. Bulk generation allows for the creation of unique labels that can track a product’s journey from the factory floor to the store shelf.
|
||||
|
||||
---
|
||||
|
||||
## 7. Troubleshooting Technical Errors
|
||||
|
||||
If your bulk batch fails to generate or scan correctly, check these common causes:
|
||||
|
||||
### Why is my QR code not scanning?
|
||||
- **Low Contrast:** The colors are too similar. Always favor a dark pattern on a light background.
|
||||
- **Inverted Colors:** Many older scanners cannot read "negative" QR codes (white pattern on a black background).
|
||||
- **Too much data:** If you encode a very long URL, the QR code squares become smaller and harder to scan. Use a URL shortener if necessary.
|
||||
|
||||
### Why did my bulk upload fail?
|
||||
- **Incorrect Delimiters:** Ensure your CSV uses commas (`,`) or semicolons (`;`) as expected by the tool.
|
||||
- **Hidden Formatting:** Excel sometimes adds hidden formatting to cells. Clean your data using a "Paste as Values" operation before exporting to CSV.
|
||||
- **UTF-8 Warnings:** If your tool returns an error about character encoding, re-save your file as "CSV UTF-8 (Comma delimited)".
|
||||
|
||||
---
|
||||
|
||||
## Conclusion: Mastering Large-Scale QR Operations
|
||||
|
||||
Once your spreadsheet is structured properly, bulk QR generation becomes a repeatable, high-integrity workflow rather than a manual design task. For teams working across print, packaging, events, or inventory, transitioning to a bulk process saves time, eliminates naming errors, and makes large deployments manageable.
|
||||
|
||||
By focusing on high-contrast designs, vector outputs, and browser-side security, you can ensure that your mass QR code deployment is both technically sound and professional.
|
||||
|
||||
**Ready to start? [Generate your first bulk batch with QR Master →](https://qrmaster.net)**
|
||||
157
articles/digitalGpoint-dynamic-vs-static-qr-codes.md
Normal file
@@ -0,0 +1,157 @@
|
||||
# Every Print Order Feels Final — Until Something Changes
|
||||
|
||||
Every business owner knows the moment: you’ve just received a batch of 5,000 flyers, 500 business cards, or a year's worth of product packaging. Then, a week later, a URL changes. A team member leaves. A promo landing page is retired.
|
||||
|
||||
Suddenly, that printed material isn't just "offline"—it's wrong.
|
||||
|
||||
For small businesses, this is more than an inconvenience; it's a cost. Reprints are expensive, and stickers to cover up old info look unprofessional. This is where the distinction between **Static** and **Dynamic** QR codes becomes the most practical decision you'll make in your marketing workflow.
|
||||
|
||||
The data confirms the impact: according to **PhilomathNews**, QR-initiated customer journeys see an average **click-through rate (CTR) of 37%**—dramatically higher than standard digital campaigns.
|
||||
|
||||
## Static vs. Dynamic: The Honest Difference
|
||||
|
||||
<img src="../assets/images/static_vs_dynamic_light.png" alt="Side-by-Side Comparison: Static vs. Dynamic QR Codes" width="500" style="display: block; margin: 20px auto;">
|
||||
|
||||
|
||||
A **Static QR code** is permanent. The data (usually a URL) is hardcoded into the square pattern itself. Once printed, it cannot be changed. If the link breaks, the code is dead.
|
||||
|
||||
A **Dynamic QR code** acts as a redirect layer. The code points to a placeholder URL that redirects the user to your final destination. Because you control that redirect layer, you can change the target URL at any time—even after the code is printed on a batch of brochures or thousands of product labels.
|
||||
|
||||
Research from **SuperAGI** highlights the value of this flexibility: businesses using "smart" dynamic QR solutions see **60% higher engagement rates** compared to those using standard, non-editable codes.
|
||||
|
||||
## When to Use Which?
|
||||
|
||||
Dynamic codes aren't always "better"—they are just more flexible.
|
||||
|
||||
- **Use Static** if the destination is forever (like your main website or a permanent portfolio) and you have zero interest in tracking scans.
|
||||
- **Use Dynamic** if there is even a 1% chance the destination might change, or if you actually want to know which flyer in which coffee shop is driving traffic.
|
||||
|
||||
## Choosing a Workflow
|
||||
|
||||
Choosing a tool is less about the "best" features and more about what fits your volume. For permanent, simple links, any free generator works. If you need the flexibility to edit links or verify scan data, several platforms offer different levels of service.
|
||||
|
||||
Lightweight tools can be enough to test this workflow before committing to a more advanced setup. Options like Bitly or [QR Master](https://qrmaster.net) — One of the easiest ways to start testing the dynamic redirect workflow without a subscription. It provides basic scan tracking and clean redirects, mapping perfectly to the "attribution-first" mindset.
|
||||
|
||||
The goal isn't just to have a QR code; it's to make sure your physical materials don't become obsolete the moment your digital strategy shifts.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## 5 Common Use Cases Where Dynamic QR Codes Make the Difference
|
||||
|
||||
### 1. Restaurant Menus
|
||||
|
||||
Seasonal menus, changing prices, daily specials — restaurant menus are one of the highest-churn print materials in any business. Many restaurants learned this the hard way during supply chain disruptions when prices shifted week to week.
|
||||
|
||||
A dynamic QR code on a table card or printed menu insert lets the restaurant update the full digital menu instantly — without reprinting anything. The code stays the same; the menu stays current.
|
||||
|
||||
**Practical tip:** Link to a simple PDF or Google Doc menu for maximum flexibility. You can update it in minutes, even from a phone.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
### 2. Product Packaging
|
||||
|
||||
Packaging is expensive to change. If you add a new product page, update your warranty information, or translate for a new market, reprinting packaging is rarely an option.
|
||||
|
||||
Dynamic QR codes on packaging let you link to updated product specs, how-to guides, warranty registration pages, or localized landing pages — and change that destination whenever needed.
|
||||
|
||||
One especially useful application: use the same QR code on packaging to A/B test two different landing pages, then redirect permanently to whichever converts better.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
### 3. Event Signage
|
||||
|
||||
Trade show banners, conference materials, and event programs go out of date fast. A speaker cancels. The WiFi password changes. The venue moves.
|
||||
|
||||
With a dynamic QR code, event organizers can update the destination in real time — even while the event is happening. Attendees scan the same code they saw on the banner and always land on the current information.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
### 4. Business Cards
|
||||
|
||||
Most business cards are printed in batches of 250–500 and used over months or years. A lot can change in that time: roles, phone numbers, portfolio URLs, LinkedIn handles.
|
||||
|
||||
A single QR code on a business card that links to a centrally managed "digital business card" page solves this. Update the page once, and every card you've already handed out now points to the new information.
|
||||
|
||||
This works especially well for freelancers, consultants, and real estate agents who update their portfolios regularly.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
### 5. Direct Mail Campaigns
|
||||
|
||||
Direct mail still works — but its biggest weakness is that you can't iterate once it's printed and sent. Dynamic QR codes change that.
|
||||
|
||||
Marketers can send the same physical mailer to different segments but point the QR code to segment-specific landing pages. They can also monitor scan rates to understand which locations, demographics, or send times perform better — insights that would otherwise be invisible with static print.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Step-by-Step: How to Switch to Dynamic QR Codes
|
||||
|
||||
Switching doesn't require technical expertise. Here's a straightforward process for any small business:
|
||||
|
||||
**Step 1: Identify your high-churn print materials**
|
||||
Start with anything that contains a URL: menus, flyers, product inserts, event programs, business cards.
|
||||
|
||||
**Step 2: Choose a dynamic QR code generator**
|
||||
Look for a tool that lets you update destination URLs after creation, view scan analytics, and export in high resolution for print. A lightweight option for testing this workflow is [QR Master](https://qrmaster.net), which supports editable destinations and basic scan tracking without requiring an account.
|
||||
|
||||
**Step 3: Generate your codes in print-ready resolution**
|
||||
Export at minimum 300 DPI for clean print reproduction. Most professional generators offer SVG or high-resolution PNG exports.
|
||||
|
||||
**Step 4: Apply a brief test before printing at scale**
|
||||
Print one copy, scan it with multiple devices (iPhone, Android, older devices), and confirm the destination loads correctly.
|
||||
|
||||
**Step 5: Plan your dashboard workflow**
|
||||
Decide who in your team manages URL updates and in which situations. Write this down — it matters more when something changes under time pressure.
|
||||
|
||||
**Step 6: Track and iterate**
|
||||
Use scan analytics to understand when and where your codes are being used. This data helps you optimize placements in future campaigns.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## A Note on Print Sizing and Placement
|
||||
|
||||
Dynamic or static, a QR code only works if it can be scanned reliably. Some practical minimums for print:
|
||||
|
||||
- **Business cards:** 1.5 cm × 1.5 cm minimum, more if space allows
|
||||
- **Flyers / A5 print:** 2.5 cm × 2.5 cm or larger
|
||||
- **Signage / posters:** Scale proportionally — at 1 meter scan distance, 5–8 cm is a safe floor
|
||||
- **Packaging:** Factor in substrate color contrast — avoid printing on uncoated dark surfaces without a white background behind the code
|
||||
|
||||
Keep at least 4–6 mm of quiet zone (blank white border) around the code on all sides. Cutting this margin is one of the most common reasons QR codes fail in the field.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Conclusion: Making Print Measurable
|
||||
|
||||
Dynamic QR codes aren't a technology novelty — they're a practical answer to a real cost problem in physical marketing. For any business that prints materials and needs those materials to stay current, the value is straightforward: print once, update as often as needed.
|
||||
|
||||
For businesses that regularly print materials, the upside is simple: fewer reprints, fewer dead links, and less friction when something changes. The only question is how many expensive reprints you want to do before making the switch.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
*For most small businesses, the easiest way to start is with a lightweight dynamic QR tool like [QR Master](https://qrmaster.net) that supports editable destinations and basic scan tracking.*
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
**Internal links to add post-acceptance:** 2–3 relevant DigitalGpoint articles (check site on acceptance)
|
||||
181
articles/dynamic-vs-static-decision-matrix.md
Normal file
@@ -0,0 +1,181 @@
|
||||
# Dynamic vs. Static QR Codes: The Professional Decision Matrix
|
||||
|
||||
## The Shift from "Static Print" to "Digital Agility"
|
||||
|
||||
In the traditional marketing and logistics era, the relationship between a physical asset and its digital counterpart was often viewed as a one-time deployment. You printed a code, it pointed to a URL, and that was the end of the lifecycle. However, as business cycles accelerate and data privacy regulations tighten, this "print and pray" approach is no longer sufficient.
|
||||
|
||||
For enterprise architects, marketing directors, and logistics managers, the choice between **Static** and **Dynamic** QR codes is not merely a technical preference—it is a strategic decision that affects campaign longevity, data security, and operational scalability. This guide provides a technical and strategic framework for deciding which architecture fits your specific professional requirements.
|
||||
|
||||
---
|
||||
|
||||
## 1. The Technical Foundation: How Data is Encoded
|
||||
|
||||
To make an informed decision, one must first understand the fundamental engineering difference between the two formats.
|
||||
|
||||
### Static QR Codes: Direct Data Encoding
|
||||
A Static QR code encodes the payload directly into the data modules; Reed-Solomon error correction is added to improve recovery from damage.
|
||||
|
||||
* **Pixel Density:** As the payload size increases (e.g., from a 20-character URL to a 200-character description), the "version" of the QR code increases, leading to a denser, more complex pixel grid.
|
||||
* **Immutability:** Once the code is generated, the underlying data cannot be changed. The patterns are fixed geographically in the physical modules.
|
||||
* **Zero Latency & Independence:** A static code does not require a central server to function. As long as a scanner can interpret the pattern, the data is retrieved locally. This is the ultimate "fail-safe" architecture.
|
||||
|
||||
### Dynamic QR Codes: The Managed Redirect Layer
|
||||
A Dynamic QR code typically encodes a short redirect URL that points to a destination managed on a server.
|
||||
|
||||
* **Pixel Consistency:** Because only a short URL is encoded (regardless of the final destination's length), the pixel density remains low (usually Version 1 or 2). This maximizes scanning speed and reliability.
|
||||
* **Flexibility:** The destination URL can be updated in the database at any time—even after thousands of stickers or brochures have been distributed.
|
||||
* **Metadata Harvesting:** The intermediate redirect acts as a sentinel, capturing device operating systems, browser locales, and precise timestamps before the user is seamlessly passed to the final destination.
|
||||
|
||||
---
|
||||
|
||||
## 2. The Case for Static QR Codes: Security and Stability
|
||||
|
||||
Despite the obvious flexibility of dynamic codes, Static QR codes remain the gold standard for specific professional use cases.
|
||||
|
||||
### Zero-Dependency Infrastructure
|
||||
Static codes are entirely self-contained. They do not rely on an external service or a redirect server to function. For critical infrastructure or products with a 20-year shelf life, this zero-dependency profile is essential. If a redirect service goes out of business, every dynamic code pointing to its servers becomes a "dead" asset. Static codes, conversely, will work as long as the physical substrate exists.
|
||||
|
||||
### Data Privacy and Security Nuances
|
||||
Static codes avoid redirect-layer tracking; however, any analytics on the destination page still depend on the target system. No intermediate scan logs are created by a generator service, making them ideal for healthcare, government, or high-security internal logistics where data sovereignty is the absolute priority.
|
||||
|
||||
### Latency Mitigation
|
||||
While dynamic codes introduce a redirect, professional infrastructure can minimize this to negligible levels.
|
||||
* **Edge-Cached Redirects:** Use providers that leverage global CDNs (Content Delivery Networks) to resolve the redirect at the edge server closest to the user.
|
||||
* **TTFB Monitoring:** Monitor the **Time-to-First-Byte** of your redirect server. A high TTFB on a mobile connection can turn a 100ms redirect into a 5-second frustration.
|
||||
|
||||
**Primary Use Cases for Static:**
|
||||
* **Hardware Labels:** Serial numbers and technical specifications.
|
||||
* **Asset Management:** Permanent inventory IDs for internal tracking.
|
||||
* **Personal Data:** Plain text credentials or permanent WiFi configurations.
|
||||
|
||||
---
|
||||
|
||||
## 3. The Power of Dynamic QR Codes: Agility and Attribution
|
||||
|
||||
For marketing and customer-facing operations, the advantages of Dynamic QR codes are overwhelming.
|
||||
|
||||
### The "Post-Print" Edit
|
||||
Errors in URLs or changes in landing page strategy are inevitable. A dynamic code acts as an insurance policy. If a campaign landing page is retired, you simply update the redirect to a new URL. This eliminates the catastrophic cost of reprinting OOH (Out-of-Home) signage or packaging.
|
||||
|
||||
### Granular Attribution (The "Offline Analytics" Gap)
|
||||
In a professional campaign, "what gets measured gets managed." Dynamic codes provide a bridge between the physical world and your CRM or Analytics dashboard.
|
||||
* **Geographic Insights:** Identifying which city or physical location is driving the most scans.
|
||||
* **A/B Testing:** Sending 50% of scans to "Page A" and 50% to "Page B" to optimize conversion rates in real-time.
|
||||
|
||||
### Short URL Scannability
|
||||
Because the encoded data is always a short URL (e.g., `qr.master/x1z`), the QR module size can remain small. This allows for higher scan reliability even on small surfaces (like medicine bottles) or from long distances (like billboards).
|
||||
|
||||
---
|
||||
|
||||
## 4. The Decision Matrix: A Professional Framework
|
||||
|
||||
Use the following matrix to determine the correct architecture for your next deployment.
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[Start: New QR Deployment] --> B{Does the destination URL <br/> have a 1% chance of changing?}
|
||||
B -- Yes --> C[Dynamic QR Code]
|
||||
B -- No --> D{Do you need scan analytics <br/> or geographic data?}
|
||||
D -- Yes --> C
|
||||
D -- No --> E{Is the code part of <br/> critical/permanent infrastructure?}
|
||||
E -- Yes --> F[Static QR Code]
|
||||
E -- No --> G{Is data privacy/GDPR compliance <br/> the absolute priority?}
|
||||
G -- Yes --> F
|
||||
G -- No --> C
|
||||
```
|
||||
|
||||
### Table 1: Comparative Metric Overview
|
||||
|
||||
| Feature | Static QR Code | Dynamic QR Code |
|
||||
| :--- | :--- | :--- |
|
||||
| **Sustainability** | Infinite (Zero dependency) | Dependent on Redirect Provider |
|
||||
| **Editability** | Immutable | Real-time Updates |
|
||||
| **Scannability** | Denser with more data | Consistent & Low-density |
|
||||
| **Privacy** | High (Internal/Self-contained) | Variable (Infrastructure dependent) |
|
||||
| **Analytics** | Hard-coded (Off-platform) | Full Engagement Data |
|
||||
| **Latency** | Instant | Infrastructure/Network Dependent |
|
||||
|
||||
---
|
||||
|
||||
## 5. Strategic Implementation: Best Practices for Professionals
|
||||
|
||||
### Resolving the "Vendor Lock-in" Risk
|
||||
The biggest risk of Dynamic QR codes is being tied to a single provider. For enterprise-level deployments, mitigation is essential:
|
||||
* **Custom Domain Hosting:** Use your own subdomain (e.g., `qr.yourcompany.com`). If you switch providers, you simply point your DNS to the new server, and existing codes remain functional.
|
||||
* **The Self-Hosted Option:** For mission-critical environments, consider a self-hosted redirect layer (e.g., using **YOURLS** or a custom-built API). This ensures you own the "sentinel" that processes the scan.
|
||||
* **Disaster Recovery:** Maintain an annual export of all redirect mappings (CSV/JSON). In a provider outage, this data allows for a rapid "emergency restore" to a secondary redirect service.
|
||||
|
||||
### Dynamic QR Analytics: The GDPR Tightrope
|
||||
While dynamic codes enable tracking, they also introduce a data processing layer. Professionals must ensure compliance through a "Privacy by Design" lens:
|
||||
* **IP Anonymization:** Ensure your provider masks the last octet of IP addresses to prevent the collection of PII (Personally Identifiable Information).
|
||||
* **DPA Enforcement:** Only work with providers that offer a clear **Data Processing Agreement (DPA)** under GDPR or CCPA.
|
||||
* **Consent Management:** If the redirect landing page uses tracking scripts (e.g., Meta Pixel), ensure a cookie banner is triggered *before* data collection begins. For the "pure" redirect phase, minimize log retention to the absolute minimum required for deduplication.
|
||||
|
||||
### Error Correction and Surface Geometry
|
||||
In professional printing, always use at least **Level M (15%) or Level Q (25%)** Error Correction. This ensures that even if a code on a curved surface or a dusty warehouse floor is partially damaged, the data remains recoverable.
|
||||
|
||||
### The "Quiet Zone" Rule
|
||||
Professionals never ignore the Quiet Zone. A minimum of **4 modules (blocks)** of empty white space must surround the code on all sides. Cutting into this space for "aesthetic" reasons is the #1 cause of scan failures in professional environments. Scanners use this zone to "bracket" the code and calibrate the optical sensor; without it, the algorithms may fail to distinguish the code from surrounding background noise.
|
||||
|
||||
### Reed-Solomon Error Correction Selection
|
||||
For professional use, the choice of error correction (EC) level is critical. Higher EC levels allow for better recovery from physical damage but increase the code's version (size).
|
||||
|
||||
| EC Level | Damage Tolerance | Practical Example |
|
||||
| :--- | :--- | :--- |
|
||||
| **L (7%)** | Minor scratches | Indoor brochures in controlled, clean environments |
|
||||
| **M (15%)** | Moderate wear | Industry standard; outdoor posters, retail packaging |
|
||||
| **Q (25%)** | Heavy damage | Warehouse labels, industrial assets, curved surfaces |
|
||||
| **H (30%)** | Logo embedding | Branded QR codes with 20-30% logo coverage |
|
||||
|
||||
---
|
||||
|
||||
## 6. The Hybrid Strategy: The "Static Fallback" Pattern
|
||||
|
||||
Modern enterprise architecture often avoids the binary "Static vs. Dynamic" choice in favor of a hybrid approach. This maximizes both flexibility and reliability.
|
||||
|
||||
### The "Dual-Payload" Pattern
|
||||
Some QR payloads combine machine-readable static data with a URL field, giving scanners useful fallback information even if the online destination is unavailable. This pattern is common in vCards or complex sensor data strings.
|
||||
|
||||
### Use Case: Critical Field Service
|
||||
An industrial generator might have a QR code.
|
||||
* **Static Data:** Hardware specs and emergency shutdown procedures (works even in a basement with zero signal).
|
||||
* **Dynamic Data:** A link to a "Real-time Parts Order" page or the latest PDF manual.
|
||||
|
||||
---
|
||||
|
||||
## 7. Enterprise Operations: Beyond the Redirect
|
||||
|
||||
### Legacy Code Migration: The "Wrapper" Strategy
|
||||
If you have deployed static codes that now need analytics, you do not necessarily need a reprint:
|
||||
* **Custom Logging Logic:** Create a listener in your backend that parses the static payload scan results from your proprietary scan app.
|
||||
* **Visual Recognition APIs:** Use computer vision to detect static codes and trigger background analytics calls in a controlled mobile app environment.
|
||||
* **NFC Augmentation:** Deploy NFC tags alongside existing QR codes for dual-mode tracking without altering the original print.
|
||||
|
||||
### Security Best Practices for Dynamic Redirects
|
||||
* **HTTPS-Only:** Never use `http://` in redirect URLs to prevent man-in-the-middle attacks.
|
||||
* **Rate Limiting:** Protect your short-link infrastructure from redirect-abuse and DDoS via "QR spam."
|
||||
* **Expiration Management:** Set automatic expiration for time-sensitive marketing campaigns.
|
||||
* **Redirect Validation:** Ensure no malicious intermediate redirects can be injected into your dashboard.
|
||||
|
||||
### Cost Analysis: The ROI Perspective
|
||||
| Scenario | Static Approach | Dynamic Approach | Break-Even Point |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **1000 assets, 0 changes** | €50 (one-time) | Subscription costs | Never (Use Static) |
|
||||
| **1000 assets, 1 URL fix** | €50 + €2,000 reprint | Subscription costs | After first change |
|
||||
| **A/B Testing Campaign** | Impossible | Subscription costs | Immediate |
|
||||
|
||||
---
|
||||
|
||||
## 8. Conclusion: Architecture for the Hybrid Era
|
||||
|
||||
The choice between static and dynamic is not about which technology is "better," but about which architecture aligns with your project’s risk profile and measurement needs.
|
||||
|
||||
* **Choose Static** when the code is part of a machine, a permanent archive, or a privacy-sensitive internal workflow.
|
||||
* **Choose Dynamic** when the code is a gateway to a campaign, a product support page, or any asset where the digital destination is subject to the speed of business.
|
||||
|
||||
Tools like **QR Master** are designed to support both workflows, providing the high-resolution exports and professional-grade security required for enterprise-level bridge-building between the physical and digital worlds.
|
||||
|
||||
---
|
||||
|
||||
> [!TIP]
|
||||
> **Pro Tip for Logistics Managers:** Use Static codes for internal bin tracking to ensure zero downtime, but use Dynamic codes for customer-facing return labels to allow for carrier or address updates on the fly.
|
||||
35
articles/linkedin-business-card-qr.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Is Your Business Card a Dead End?
|
||||
|
||||
<img src="../assets/images/business_card_scan.png" alt="Professional Scanning QR Business Card" width="400" style="display: block; margin: 20px auto;">
|
||||
|
||||
|
||||
I was at a local networking booth last week, and I collected about 20 business cards. When I sat down to follow up, I realized that 15 of them required me to manually type in a name, find them on LinkedIn, or search for their website.
|
||||
|
||||
In a world where attention spans are measured in seconds, that’s a lot of friction.
|
||||
|
||||
Adding a QR code to your business card isn’t just about "looking techy." It’s about making the leap from physical paper to digital connection as effortless as possible.
|
||||
|
||||
But here’s the thing: most people do it wrong.
|
||||
|
||||
### The 3 Biggest QR Mistakes on Business Cards
|
||||
|
||||
1️⃣ **Using a Static Link**
|
||||
If you print 500 cards with a direct link to your current portfolio, and you change your URL next month, you now have 500 pieces of expensive trash. **Always use a dynamic QR code.** You can change the destination URL anytime without reprinting.
|
||||
|
||||
2️⃣ **Linking to Your Home Page**
|
||||
Don't send me to a generic website where I have to search for your contact info. Link directly to a **vCard/Digital Business Card** or a specific landing page that says: "Add to Contacts."
|
||||
|
||||
3️⃣ **The "Fine Print" Sizing**
|
||||
If the code is too small or has zero border (the "quiet zone"), phone cameras will struggle to focus. If I have to try three times to scan it, I'm going to stop trying.
|
||||
|
||||
### Why I think about this so much...
|
||||
|
||||
I kept running into this problem often enough that I eventually built a small tool called **[QR Master](https://qrmaster.net)** to make dynamic QR codes easier to create and test. I wanted a way to create trackable codes without the baggage of monthly subscriptions or complex dashboards.
|
||||
|
||||
If you’re still handing out plain paper cards, try adding a small dynamic square on the next batch. It turns a piece of cardstock into a portal.
|
||||
|
||||
**Quit handing out dead-end cards. Start handing out connections.**
|
||||
|
||||
---
|
||||
|
||||
#Networking #Marketing #B2B #DigitalTransformation #SmallBusiness #Productivity
|
||||
66
articles/medium-5-underrated-qr-use-cases.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# Beyond the Menu: 5 Practical Ways to Use QR Codes for Business Growth
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
We’ve all seen the lazy QR code. It’s sitting in a window, sun-faded, linking to a 2018 PDF menu that takes forty seconds to load on a 4G connection.
|
||||
|
||||
QR codes are no longer just shortcuts to menus and homepages. In more useful setups, they act as measurable handoffs between physical attention and digital action. The financial impact is quantifiable: restaurants switching to digital QR ordering consistently see a **12-22% lift in average order value (AOV)**, according to **FoxiFood**.
|
||||
|
||||
Used more deliberately, QR codes can help connect printed materials with measurable digital actions — without expensive software or technical overhead. Here are five practical use cases where better tracking makes physical marketing a lot more useful.
|
||||
|
||||
---
|
||||
|
||||
## 1. The "Abandoned Cart" for Physical Retail
|
||||
|
||||
Imagine someone walks into your boutique, looks at a high-end jacket, and walks out. In e-commerce, you’d retarget them. In the physical world, they’re gone forever.
|
||||
|
||||
**The Strategy:** Put a QR code on the physical price tag. Link it to a page that offers a "Save for Later" coupon via email or SMS. When they scan the tag at home, they have the link, the product photo, and a discount to pull them back in.
|
||||
|
||||
<img src="../assets/images/lifestyle_retail_qr.png" alt="Apparel Store QR Tag Interaction" width="500" style="display: block; margin: 20px auto;">
|
||||
|
||||
|
||||
## 2. Real-Time Attribution for Local Partners
|
||||
|
||||
You have your flyers in the local coffee shop. The owner is your friend, but is it actually working?
|
||||
|
||||
**The Strategy:** Use a dynamic QR code with a unique UTM parameter for *every single location*. Instead of wondering if the coffee shop flyers are better than the gym posters, you can check your analytics dashboard and know exactly which partner is driving the highest-quality leads. This level of precision is why **PM Group** found that including QR codes in direct mail campaigns can boost overall **subscriber and response rates by up to 35%**.
|
||||
|
||||
## 3. The Interactive Service Sticker
|
||||
|
||||
If you run a service business (HVAC, cleaning, landscaping), the most valuable real estate you own is the side of your customer’s furnace or the back of their cleaning cupboard.
|
||||
|
||||
**The Strategy:** A weatherproof sticker with a QR code that links directly to a "Book Service" or "Request Refill" page. It turns a one-off job into a permanent interface.
|
||||
|
||||
## 4. Turning TV/Video into a Checkout Counter
|
||||
|
||||
We’ve seen the Coinbase Superbowl ad. You don't need a million-dollar budget to do this.
|
||||
|
||||
**The Strategy:** If you’re running a YouTube ad or a local TV spot, keep the QR code on screen for at least 15 seconds. Make sure it isn't just a link to the homepage, but a direct link to the *exact promotional offer* shown in the video.
|
||||
|
||||
## 5. Event Networking that Actually Works
|
||||
|
||||
Paper business cards get lost. Typing a name into LinkedIn while standing in a noisy trade show aisle is annoying.
|
||||
|
||||
**The Strategy:** A QR code on the back of your phone or your badge that links to a "Digital Contact Card" (vCard). Most people do this once, but the pro move is using a *dynamic* code. If you change your job title or portfolio link next month, the code on that expensive trade show banner still works.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## The Technical Detail: Why Dynamic Codes Matter
|
||||
|
||||
The biggest mistake is using static QR codes for temporary campaigns. A static code is permanent. If your URL changes, the code is broken.
|
||||
|
||||
**Dynamic QR codes** allow you to change the destination URL *after* the code is printed. This is the difference between a static billboard and a digital interface.
|
||||
|
||||
You can test this setup using lightweight tools like [QR Master](https://qrmaster.net). It lets you create dynamic codes and track basic scan data without a subscription or an account—useful for seeing if the strategy works for you before scaling up.
|
||||
|
||||
Don't let your physical marketing be a black hole for data. Start tracking the bridge between your real world and your digital one.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
**Author Bio:** Timo is a founder and developer focused on closing the gap between offline and online marketing. He supports small business marketing through tools like [QR Master](https://qrmaster.net), focusing on making dynamic tracking accessible and simple.
|
||||
186
articles/seosandwitch-qr-codes-offline-attribution.md
Normal file
@@ -0,0 +1,186 @@
|
||||
# QR Codes as an Offline-to-Online Signal: How Marketers Can Measure Physical Campaigns More Reliably
|
||||
|
||||
<img src="../assets/images/attribution_light.png" alt="Dynamic QR Code Attribution Flow" width="500" style="display: block; margin: 20px auto;">
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Introduction
|
||||
|
||||
Marketers can usually tell you which ad got the click, which search term triggered the lead, or which email link generated the sale. But ask the same team which flyer at a trade show drove the most traffic, or which product insert is actually being read, and the answer often gets vague very quickly.
|
||||
|
||||
This attribution gap isn't just a reporting annoyance; it's a budgeting problem. Without data on which physical touchpoints are working, marketers fly blind on where to spend their next dollar of offline budget.
|
||||
|
||||
This article covers the mechanics of closing that gap: how QR codes function as a measurable offline-to-online signal, how to integrate scan data into a real attribution workflow, and what the indirect SEO implications are for the digital content those codes point to.
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Part 1: Understanding QR Codes as an Attribution Mechanism
|
||||
|
||||
### Static vs. Dynamic: The Distinction That Actually Matters
|
||||
|
||||
Not all QR codes generate useful data. A **static QR code** encodes a URL directly into the image. Scan it, go to the URL — and that's the end of the data trail. No tracking, no redirects, no analytics.
|
||||
|
||||
**Dynamic QR codes** work differently. They point to a short redirect URL controlled by the QR code platform. When someone scans the code, they hit the redirect server first — which logs the event (timestamp, location, device type, scan count) — and then forwards them to the final destination.
|
||||
|
||||
This redirect layer is what makes attribution possible. It functions the same way UTM-tagged short links function for social media clicks.
|
||||
|
||||
### Dynamic QR Codes as UTM-Tagged Short Links for Physical Media
|
||||
|
||||
A UTM parameter adds source, medium, and campaign data to a URL so your analytics platform can attribute sessions correctly. `?utm_source=google&utm_medium=cpc&utm_campaign=spring_sale` tells GA4 exactly where a visitor came from.
|
||||
|
||||
The same logic applies to QR codes. A flyer at a farmers market can carry a dynamic QR code that redirects to:
|
||||
|
||||
```
|
||||
https://yourdomain.com/landing-page?utm_source=flyer&utm_medium=print&utm_campaign=farmers_market_april
|
||||
```
|
||||
|
||||
GA4 receives the session with full attribution. You can now measure:
|
||||
- How many sessions the flyer generated
|
||||
- Whether those sessions converted
|
||||
- How those users behaved compared to organic or paid visitors
|
||||
|
||||
Applied systematically, this gives you cross-channel attribution that treats physical media as a first-class data source rather than a black box.
|
||||
|
||||
|
||||
### Beyond the Link: The Branding Impact
|
||||
|
||||
Beyond the redirect mechanics, design plays a critical role in user conversion. **Wave Connect** reports that incorporating **logos or brand elements** into QR codes can increase scan rates by up to **80%**. In an offline environment, trust and visual recognition are just as important as technical functionality.
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Part 2: Building the Attribution Workflow
|
||||
|
||||
### Step 1: Instrument Your Physical Materials
|
||||
|
||||
Before printing anything, assign each physical asset a unique UTM combination. Don't collapse multiple materials into a single source — differentiation is the point.
|
||||
|
||||
| Physical Material | UTM Source | UTM Medium | UTM Campaign |
|
||||
|-------------------|------------|------------|--------------|
|
||||
| Farmers market flyer | `farmers_market` | `print_flyer` | `spring_2025` |
|
||||
| Trade show banner | `conference_name` | `event_banner` | `spring_2025` |
|
||||
| Product insert | `product_box` | `insert` | `core_product` |
|
||||
| Business card | `business_card` | `networking` | `always_on` |
|
||||
|
||||
Each combination gets its own dynamic QR code. Each code redirects to the destination URL with its UTM parameters appended.
|
||||
|
||||
### Step 2: Track at Two Levels
|
||||
|
||||
You now have two data sources:
|
||||
|
||||
**QR Code Platform Analytics:** Scan count, location, device type, time of day. This is pre-click data — it tells you who engaged with the physical material.
|
||||
|
||||
**Website Analytics (GA4):** Sessions, bounce rate, pages per session, goal completions. This is post-click data — it tells you what those people did once they arrived.
|
||||
|
||||
The delta between scan count (pre-click) and session count (post-click) is your effective scan-to-session rate — a measure of how well the landing page matches the expectation the physical material set.
|
||||
|
||||
### Step 3: Route Through One Redirect Layer
|
||||
|
||||
The simplest architecture: your QR code platform generates the redirect URL (e.g., `qrm.st/abc123`), which redirects to your UTM-tagged destination URL (e.g., `yourdomain.com/page?utm_source=...`).
|
||||
|
||||
Avoid using a generic URL shortener on top of a QR code platform on top of a UTM-tagged URL. Every additional redirect layer increases load time and the chance of a bounce before the session registers.
|
||||
|
||||
### Step 4: Set Up a Dashboard
|
||||
|
||||
Connect your QR scan data and GA4 attribution data in a single view. For most businesses, a simple Google Looker Studio dashboard pulling from GA4's campaign dimension plus a manual import of QR scan data from your platform works well.
|
||||
|
||||
For higher-volume operations, look at whether your QR platform offers a GA4 or API integration. Some do. This makes automated reporting possible without manual data merging.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Part 3: The SEO Implications
|
||||
|
||||
QR codes do not directly improve rankings, but they can support better measurement, cleaner campaign attribution, and more qualified traffic to the pages they point to. In practice, QR-driven visits are often more qualified because the user has already engaged with the brand in a physical context. That makes the traffic commercially valuable even when the SEO effect remains indirect.
|
||||
|
||||
### Offline Intent as a Quality Signal
|
||||
|
||||
When a QR code scan sends a visitor to a targeted landing page, the resulting session behavior is often higher quality than a broad organic click. These users have high intent.
|
||||
|
||||
High-quality traffic signals — low bounce rates, deeper session depth, and conversions — are indicators of a page's utility. While search engines have been cautious about confirming whether GA4 metrics are direct ranking factors, consistent engagement from high-intent audiences is a valid way to strengthen your content's overall signal profile.
|
||||
|
||||
This is particularly relevant for Local SEO. A regional physical campaign driving engaged local sessions to a specific landing page provides the exact type of geographic relevance signals that matter for local results.
|
||||
|
||||
### QR Codes and Content Distribution: The Link-Building Angle
|
||||
|
||||
A more indirect application is using QR codes to drive high-intent eyes to link-worthy digital assets (data studies, calculators, or whitepapers).
|
||||
|
||||
The workflow:
|
||||
1. You publish a high-quality resource on your site.
|
||||
2. You distribute a QR code linking to it via physical materials (conference handouts, product inserts).
|
||||
3. Professional users scan the code, discover the resource, and — because it's genuinely useful — some subset of them links to it or cites it from their own digital platforms.
|
||||
|
||||
This turns physical distribution into a top-of-funnel discovery mechanism for link acquisition. It won't produce high volumes, but the links generated come from relevant, authoritative sources who discovered the content in the "real world."
|
||||
|
||||
### Technical Execution and Crawling
|
||||
|
||||
From a technical standpoint, the redirect of a dynamic QR code functions as a pass-through layer. For the end user, this is a 301 or 302 redirect to the target destination. This means:
|
||||
|
||||
- The final destination URL retains full crawlability and indexability.
|
||||
- The redirect adds minimal latency (usually negligible), but keeping the destination page fast is critical since mobile users on cellular data have low patience.
|
||||
- Canonicalization: Ensure the destination page has a correct self-referencing canonical tag so that any traffic signals are consolidated correctly.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Part 4: Case Study — Tracking Offline Foot Traffic Attribution
|
||||
|
||||
Here is an example of the end-to-end data flow for a local business.
|
||||
|
||||
**Scenario:** A local gym runs a seasonal campaign — posters in the neighborhood, flyers at a local health food store, and inserts in a physical "welcome kit."
|
||||
|
||||
**Setup:**
|
||||
- Three dynamic QR codes created, one per material.
|
||||
- Each redirects to the same landing page with unique UTM parameters.
|
||||
- GA4 goal tracked: Trial Membership Booking.
|
||||
|
||||
**Campaign Results (30 Days):**
|
||||
|
||||
| Source | Scans | Sessions | Conversions | CVR (Scan-to-Trial) |
|
||||
|:-------|:------|:---------|:------------|:--------------------|
|
||||
| Neighborhood Poster | 94 | 61 | 4 | 4.2% |
|
||||
| Health Food Store | 212 | 164 | 19 | 8.9% |
|
||||
| Welcome Kit | 87 | 71 | 23 | 26.4% |
|
||||
|
||||
**Analysis:** The health food store placement delivers the highest new-customer volume. The welcome kit has the highest conversion rate (existing relationship). The posters show lower conversion despite scans, suggesting the "buy-in" requirement for someone scanning on a sidewalk is higher than someone already inside a partner store.
|
||||
|
||||
**Without tracking:** The gym would have no idea which print run was worth the money. With tracking, they know exactly where to reinvest.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Part 5: Tooling Landscape
|
||||
|
||||
Several tools handle dynamic QR code creation with analytics. They vary on analytics depth, link management features, and pricing.
|
||||
|
||||
**QR Tiger** (qrtiger.com) — one of the more established platforms with bulk creation, folder organization, and basic scan analytics. Paid plans required for full analytics history.
|
||||
|
||||
**QR Code Generator.com** — widely used, good brand recognition, analytics capped on free tier. Straightforward interface.
|
||||
|
||||
**[QR Master](https://qrmaster.net)** — A simple, lightweight option for testing dynamic redirects. It provides scan counts and basic analytics without requiring an account or subscription, making it useful for testing the attribution workflow before committing to a complex setup.
|
||||
|
||||
**Bitly** — primarily a URL shortener but includes QR code generation with click analytics. Useful if you're already using Bitly for link management.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Conclusion
|
||||
|
||||
QR codes are not an SEO tactic in themselves. They are a measurement layer for physical media.
|
||||
|
||||
What makes them useful is not the square on the page, but the workflow behind it: unique routing, campaign attribution, landing-page alignment, and the ability to see which offline touchpoints actually lead to business outcomes.
|
||||
|
||||
For marketers running print, events, packaging, or local campaigns, that closes a gap traditional analytics often leaves open. Instead of treating physical media as unmeasurable, QR codes make it possible to test, compare, and improve it with the same discipline applied to digital channels.
|
||||
|
||||
The real opportunity is not just “using QR codes.” It is treating offline attention as something measurable, attributable, and worth optimizing. This move toward measurable print is part of a broader trend: as of late 2024, **62% of businesses** expect QR-driven initiatives to be a primary revenue driver in their 2025 strategy (**Uniqode**).
|
||||
|
||||
|
||||
---
|
||||
63
articles/substack-playbook-series.md
Normal file
@@ -0,0 +1,63 @@
|
||||
# The QR Code Playbook: Issues 1-3
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Issue #1: The "Static is Dead" Manifesto
|
||||
*Date: Week 2*
|
||||
|
||||
Welcome to the first issue of The QR Code Playbook. We’re starting with the most important rule of the game: **Never print a static QR code again.**
|
||||
|
||||
A static code works fine — until something changes. Then it turns into a small but expensive operational problem. The moment your destination URL breaks, you’re stuck with permanent, dead-end assets.
|
||||
|
||||
**The Dynamic Advantage:**
|
||||
Dynamic QR codes use a redirect layer. The printed pattern doesn't change, but you can change where it points from your computer.
|
||||
|
||||
**Scenario:** You print 1,000 menus for your restaurant. Your web developer changes the menu URL.
|
||||
- **Static:** You throw away 1,000 menus.
|
||||
- **Dynamic:** You spend 30 seconds changing the redirect link.
|
||||
|
||||
**This week's task:** Audit your current print materials. Anything with a QR code that isn't updateable is a liability.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Issue #2: The Event Marketer’s Secret Weapon
|
||||
*Date: Week 3*
|
||||
|
||||
Events are chaos. Signage is expensive. ROI is hard to prove.
|
||||
|
||||
This week, we’re looking at how to use "Contextual QR Codes" to track your booth’s performance.
|
||||
|
||||
**The Attribution Stack:**
|
||||
1. Create a unique code for your **Check-in Banner**.
|
||||
2. Create a unique code for your **Product Demo Flyer**.
|
||||
3. Create a unique code for your **Follow-up Postcard**.
|
||||
|
||||
By tracking the scan rates of these three different codes, you can see where people dropped off. Did they check in but never look at the demo? Did they take the flyer but never scan the follow-up?
|
||||
|
||||
Networking is where this shines: **82% of professionals** now prefer receiving a digital card over paper (**Forbes**), and data shows that users are **5x more likely to save a contact** when it's presented via QR (**HiHello**).
|
||||
|
||||
Now you aren't just "doing events"—you're measuring them.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Issue #3: Closing the eCommerce "Blind Spot"
|
||||
*Date: Week 4*
|
||||
|
||||
The moment your product box leaves the warehouse, you lose the data trail. You know it was delivered, but you don't know if the customer opened it, read the manual, or is actually using it. Customer sentiment is high here: **94% of consumers** who scan QR codes on product packaging find the information helpful for product usage or support (**Packaging Strategies**).
|
||||
|
||||
**The Solution: Post-Purchase Redirection.**
|
||||
Include a QR code on the inside of the box lid.
|
||||
|
||||
- **First 7 Days:** Link it to a "Getting Started" video.
|
||||
- **After 30 Days:** Change the redirect to a "Leave a Review" page.
|
||||
- **After 6 months:** Change the redirect to a "Reorder/Subscription" discount.
|
||||
|
||||
One printed code. Three different stages of the customer lifecycle.
|
||||
|
||||
*These workflows can be implemented with most dynamic QR platforms like [QR Master](https://qrmaster.net). The important part is choosing a tool that makes link updates and scan tracking easy to manage without unnecessary overhead.*
|
||||
92
articles/techdee-5-qr-code-strategies.md
Normal file
@@ -0,0 +1,92 @@
|
||||
# 5 QR Code Strategies That Can Supercharge Small Business Marketing
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
Most small business owners use QR codes once, print them, and never think about them again. That works — but it usually means the QR code stays static, untracked, and much less useful than it could be.
|
||||
|
||||
Used more deliberately, QR codes can help connect printed materials with measurable digital actions — without expensive software or technical overhead. Here are five practical strategies worth implementing this week.
|
||||
|
||||
---
|
||||
|
||||
|
||||
## 1. Turn Business Cards Into a Living Portfolio
|
||||
|
||||
Paper business cards have a lifespan problem. You print 500, use them over 18 months, and your website URL, phone number, or LinkedIn handle changes at least once in that time. The cards you already handed out become outdated the moment they leave your desk. This small addition to your physical networking can have a measurable impact on your digital footprint: adding QR codes to professional interactions (like business cards or email signatures) has been shown to increase **LinkedIn engagement by up to 15%** (**MySignature**).
|
||||
|
||||
**The fix:** Add a dynamic QR code to your business card that links to a centrally managed contact page — your own "link-in-bio" page, a Google Site, or a simple landing page.
|
||||
|
||||
Update the page whenever something changes. Every card you've already handed out automatically points to the current version. No reprints needed.
|
||||
|
||||
Freelancers, consultants, and real estate agents with frequently updated portfolios get the most mileage out of this approach.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## 2. Track Which Offline Materials Actually Drive Traffic
|
||||
|
||||
One of the biggest blind spots in small business marketing is not knowing which physical materials drive results. A flyer you handed out at a farmers market, a mailer you sent to the neighborhood, an insert in a product package — which one actually brought people to your site?
|
||||
|
||||
**The fix:** Use a different dynamic QR code for each material and campaign. Track scan rates per code to see which placement and which audience responds.
|
||||
|
||||
<img src="../assets/images/analytics_light.png" alt="Advanced QR Scan Analytics Dashboard" width="500" style="display: block; margin: 20px auto;">
|
||||
|
||||
|
||||
This isn't just a "big business" insight. Even basic scan analytics — how many scans, from which city, on which day — can tell a small business owner which trade show placement is worth paying for next year and which one isn't.
|
||||
|
||||
You can test this attribution setup using lightweight tools like [QR Master](https://qrmaster.net). It lets you create dynamic codes and track basic scan data without a subscription—useful for seeing if the overhead of tracking is worth it for your business.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## 3. Make Product Packaging Evergreen
|
||||
|
||||
If your business sells physical products, your packaging is one of the most expensive things to change. A new product page, an updated how-to guide, a warranty registration change — any of these would normally require a new print run.
|
||||
|
||||
**The fix:** Put a dynamic QR code on the packaging and link it to a product resource page you control. When the page changes, the packaging doesn't have to.
|
||||
|
||||
This is also useful for localization: if you start selling in a new market, redirect the code to a translated version of the page — without touching the packaging itself.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## 4. Run Contactless Event Check-Ins and Feedback Flows
|
||||
|
||||
Events — whether a pop-up shop, a community workshop, or a trade show booth — generate a lot of friction around check-in, sign-ups, and post-event surveys. Paper forms take time to process. Verbal prompts are easy to forget.
|
||||
|
||||
**The fix:** Post a QR code at check-in that links directly to a Google Form, Tally form, or Typeform. Do the same at the end of the event to collect feedback while the experience is still fresh.
|
||||
|
||||
The code itself doesn't change between events — just swap the destination to a new form each time. Print one set of signage and reuse it.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## 5. A/B Test Landing Pages Without Reprinting
|
||||
|
||||
Running a print campaign and not sure which landing page angle converts better? Normally, you'd have to commit to one before printing — and live with the results.
|
||||
|
||||
**The fix:** Generate a single dynamic QR code, start with Landing Page A, then switch to Landing Page B halfway through the campaign. Compare scan-to-conversion rates across the two periods.
|
||||
|
||||
This isn't a perfect controlled experiment, but it gives you directional data you wouldn't otherwise have from a print campaign — and it costs nothing extra to run.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Getting Started
|
||||
|
||||
The common thread across all five strategies is using dynamic QR codes rather than static ones. Dynamic codes let you update the destination after printing — which means your physical materials stay flexible. This move towards digital-first interaction isn't just a trend: according to **Salesforce**, **80% of marketers** now believe that a 'digital-first' approach is essential for staying competitive.
|
||||
|
||||
For most small businesses, a free tool with basic analytics is enough to get started. The goal is data you can act on, not perfection.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
**Format:** List-based, one-action-per-section, Techdee style
|
||||
BIN
assets/images/analytics_dashboard_mockup.png
Normal file
|
After Width: | Height: | Size: 590 KiB |
BIN
assets/images/analytics_light.png
Normal file
|
After Width: | Height: | Size: 534 KiB |
BIN
assets/images/attribution_flow.png
Normal file
|
After Width: | Height: | Size: 698 KiB |
BIN
assets/images/attribution_light.png
Normal file
|
After Width: | Height: | Size: 420 KiB |
BIN
assets/images/business_card_scan.png
Normal file
|
After Width: | Height: | Size: 641 KiB |
BIN
assets/images/ecommerce_lifecycle.png
Normal file
|
After Width: | Height: | Size: 681 KiB |
BIN
assets/images/lifecycle_light.png
Normal file
|
After Width: | Height: | Size: 624 KiB |
BIN
assets/images/lifestyle_retail_qr.png
Normal file
|
After Width: | Height: | Size: 677 KiB |
BIN
assets/images/static_vs_dynamic_comp.png
Normal file
|
After Width: | Height: | Size: 610 KiB |
BIN
assets/images/static_vs_dynamic_light.png
Normal file
|
After Width: | Height: | Size: 668 KiB |
@@ -1,83 +0,0 @@
|
||||
📅 Blog Content Roadmap (Q1 2026)
|
||||
Goal: Publish 20 high-quality SEO posts over 60 days (Jan 29 - Mar 27). Cadence: Every 3 days. Strategy: "Strict 404 Gate" (Future posts are invisible/404 until publish date).
|
||||
|
||||
✅ Completed (Ready to Ship)
|
||||
Jan 29:
|
||||
Free Barcode Generator (Online)
|
||||
Status: 🟢 Ready (Content Complete + SEO Optimized + Hero Image Generated).
|
||||
Key Feature: Quick Answer Box, SVG/PNG Comparison, FAQ.
|
||||
🚀 Next Priority: Feb 01
|
||||
🎵 Spotify Code Generator: Share Music Instantly
|
||||
Target Audience: Artists, bands, podcasters, playlist curators. SEO Focus: spotify code generator, create spotify code, music marketing qr, spotify uri to code.
|
||||
|
||||
Drafting Blueprint:
|
||||
|
||||
H1: Spotify Code Generator: Share Songs, Albums & Playlists
|
||||
Quick Answer: How to get a code (3-step process).
|
||||
Visual Guide: Where to find the "Spotify URI".
|
||||
Use Cases:
|
||||
Merch: T-shirts with album link.
|
||||
Posters: Gig promotion.
|
||||
Socials: Instagram Stories overlay.
|
||||
Critical Comparison (Pro Tip):
|
||||
Spotify Codes = Cool look, but NO analytics.
|
||||
Dynamic QR Codes = Less "native" look, but FULL tracking (scans, location, etc.).
|
||||
Recommendation: Use QR for marketing campaigns where ROI matters; use Spotify Codes for pure branding on merch.
|
||||
FAQ: Vector download? Do they expire? High-res printing?
|
||||
CTA: "Generate Music QR Code" (Link to main generator).
|
||||
Image Concept:
|
||||
|
||||
Style: Neon, vibrant, "Spotify Green" accents, dark mode aesthetic.
|
||||
Subject: A stylized soundwave transforming into a scannable code, or a vinyl record with a code center.
|
||||
📋 Upcoming Schedule (Backlog)
|
||||
Publish Date Topic / Slug Category Status
|
||||
Feb 04 WhatsApp QR Code (Direct Chat Link) Social ⚪ Pending
|
||||
Feb 07 Instagram QR Code (Grow Following) Social ⚪ Pending
|
||||
Feb 10 vCard QR Code (Digital Business Card) Business ⚪ Pending
|
||||
Feb 13 QR Code Analytics Guide (Deep Dive) Analytics ⚪ Pending
|
||||
Feb 16 Trackable QR Codes (How-to) Tracking ⚪ Pending
|
||||
Feb 19 Dynamic vs Static QR (Ultimate Guide) Basics ⚪ Pending
|
||||
Feb 22 UTM Tracking with QR Codes Marketing ⚪ Pending
|
||||
Feb 25 QR Code Statistics 2026 Trends ⚪ Pending
|
||||
Feb 28 Restaurant Menu QR Codes Hospitality ⚪ Pending
|
||||
Mar 03 QR Codes for Events Events ⚪ Pending
|
||||
Mar 06 Business Card QR Codes Business ⚪ Pending
|
||||
Mar 09 Marketing Strategy Examples Marketing ⚪ Pending
|
||||
Mar 12 Bulk QR Code Generator (Excel/CSV) Bulk ⚪ Pending
|
||||
Mar 15 Google QR Alternative Comparison ⚪ Pending
|
||||
Mar 18 Security & Quishing Security ⚪ Pending
|
||||
Mar 21 Best QR Generator 2026 Review Reviews ⚪ Pending
|
||||
Mar 24 QR Code API Documentation Developer ⚪ Pending
|
||||
Mar 27 Free vs Paid Generator Comparison ⚪ Pending
|
||||
🛠️ Execution Workflow (Repeat for each post)
|
||||
Select Topic: Take next item from list.
|
||||
SEO & Outline: Define title, keywords, and H2 structure (use User/Expert persona).
|
||||
Implement: Replace placeholder content in
|
||||
src/lib/blog-data.ts
|
||||
.
|
||||
Asset: Generate hero image (public/blog/[slug].png) via DALL-E.
|
||||
Verify: Ensure no build errors and correct 404 behavior if date > now.
|
||||
✅ SEO Validation Checklist (Target Score: 80+)
|
||||
1. Page Title
|
||||
|
||||
Focus keyword used at the beginning.
|
||||
Length: ~60 characters (0 characters available is perfect).
|
||||
2. Meta Description
|
||||
|
||||
Focus keyword included.
|
||||
Length: ~160 characters.
|
||||
3. Content Structure
|
||||
|
||||
H1 contains focus keyword.
|
||||
First Paragraph contains focus keyword.
|
||||
Word count: > 600 words (Aim for comprehensive coverage).
|
||||
Keyword Density: ~2% (e.g., used 4-5 times in 600 words).
|
||||
4. Assets (Images)
|
||||
|
||||
Image Filename contains focus keyword (e.g.,
|
||||
free-barcode-generator-guide.png
|
||||
).
|
||||
Image Alt Tag contains focus keyword.
|
||||
5. Links
|
||||
|
||||
Add relevant internal links to tools/pricing/other posts.
|
||||
@@ -1,71 +0,0 @@
|
||||
# QR Master: 90-Day Go-To-Market Plan (Real Estate Wedge)
|
||||
|
||||
## 📌 Executive Summary
|
||||
- **Nische:** Immobilienmakler & Broker-Teams (Fokus: DACH-Region).
|
||||
- **Core Edge:** Dynamische QR-Codes für Print-Materialien (Exposés, Flyer, Schilder). Makler sparen Zeit & Druckkosten, da Links ohne Neudruck aktualisiert werden können.
|
||||
- **Go-To-Market Engine:** Social Media Content (Fokus auf Instagram oder LinkedIn) optimiert auf Saves, Shares und DMs, um organische Reichweite direkt in eine kontrollierte Lead-Pipeline zu verwandeln.
|
||||
- **Ziel (Tag 90):** Profitables MRR-Wachstum (Monthly Recurring Revenue) durch eine wiederholbare, messbare Pipeline, bevor weitere Nischen erschlossen werden.
|
||||
- **Kapazität:** Solo-Founder, 10-15h pro Woche.
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Die Social Distribution Engine (Content Funnel)
|
||||
Anstatt nur auf organischen Traffic (Suchen) zu warten, wird aktiv Pipeline über Social Media generiert.
|
||||
|
||||
### Die 3 Content-Säulen (Pillars)
|
||||
*Springe nicht zwischen Themen. Bleibe strikt bei der Nische und diesen 3 Pillars:*
|
||||
1. **QR Marketing Tactics:** Checklisten, Best Practices, Do's und Don'ts bei QR-Code-Platzierungen (z.B. auf Makler-Schildern).
|
||||
2. **Analytics & ROI Proof:** Fallstudien, wie aus simplen Scans echte Leads und Conversions werden.
|
||||
3. **Teardowns / Audits:** "Roast my QR" – Bestehende Flyer analysieren, Fehler aufzeigen und direkt fixen.
|
||||
|
||||
### Die 3 Performance-Formate (Wöchentlich)
|
||||
Um das "Blank Page Syndrome" zu vermeiden, greife auf diese replizierbaren Formate zurück:
|
||||
|
||||
| Format | Ziel-Metrik | Konzept & Beispiel | Call-to-Action (CTA) |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **Das Checklist-Carousel** | **Saves** (starkes Ranking-Signal) | "7-Punkte Checkliste: So platzierst du QR-Codes auf Exposés richtig." | *"Speichere diese Checkliste für deinen nächsten Druckauftrag."* |
|
||||
| **Das Fehler-Reel** | **Shares** (Viralität im Team) | "Wenn dein QR-Code keine Leads bringt, liegt es meistens hieran..." | *"Teile das mit deinem Makler-Team, bevor ihr Flyer druckt."* |
|
||||
| **Der Community-Roast** | **Replies** (höchstes Engagement) | 3 Beispiele zeigen: "Welcher Immobilien-QR ist am schlimmsten?" | *"Schreib 1, 2 oder 3 in die Kommentare und verrate warum."* |
|
||||
|
||||
### Der DM-Growth-Hack (Lead Capture)
|
||||
Organische Viewer müssen in qualifizierte Leads verwandelt werden.
|
||||
- **Mechanik:** Biete dein wertvollstes Asset for free an (z.B. "UTM Naming Template" oder "QR Campaign Tracking Sheet").
|
||||
- **CTA:** *"Kommentiere 'UTM' und ich schicke dir das Template per DM."*
|
||||
- **Der Hook:** In dem versendeten Sheet muss subtil der nächste Schritt stecken (z.B. *"Erstelle und tracke diese kampagnen noch einfacher direkt in QR Master: [1-Klick Real-Estate Setup]"*).
|
||||
|
||||
---
|
||||
|
||||
## 🗓️ Der 30/60/90 Tage Execution Plan
|
||||
|
||||
### 🚀 Phase 1: Tag 0–30 (Manual Proof & Distribution Setup)
|
||||
*Fokus: Manuelles Setup, Tracking-Grundlagen und erste Content-Tests.*
|
||||
- **Setup:** Real-Estate Landingpage & "Safety Intercept" bauen.
|
||||
- **Onboarding:** Manuelles Onboarding von 5–10 Maklern (Concierge Setup). Erfassen der Baseline-Metriken (Zeit-Ersparnis, Müllvermeidung bei Druck-Updates).
|
||||
- **Social Setup:** Fokus auf **eine** Haupt-Plattform (Instagram für B2C/Solo-Makler *oder* LinkedIn für Broker-Owner).
|
||||
- **Content-Sprint:** Wöchentlich (2 Carousels, 1 Reel, 1 Roast). A/B-Tests der CTAs.
|
||||
- **Zielschwelle:** Mindestens 1 Pillar erreicht eine starke Save-Rate; Lead-Generierung über erste DMs startet.
|
||||
|
||||
### ⚙️ Phase 2: Tag 31–60 (Automation & Amplification)
|
||||
*Fokus: Workflows automatisieren und Gewinner-Content pushen.*
|
||||
- **Produkt:** "Real Estate QR Workspace" (Starter-Template) und wöchentliche Performance-Digests (automatisierte Emails) launchen.
|
||||
- **Marketing:** 3 hochkonvertierende "Proof-Assets" publizieren (z.B. "Wie Makler X seine Flyer-Druckkosten halbierte").
|
||||
- **Amplification:** Paid-Ad Budget auf das beste organische Proof-Asset der letzten Wochen legen.
|
||||
- **Prozess:** Sobald händische DMs zu aufwendig werden -> Auto-DM Tool (z.B. ManyChat) einrichten.
|
||||
|
||||
### 💰 Phase 3: Tag 61–90 (Monetization & Repeatability)
|
||||
*Fokus: Monetarisierung, Retention und Outbound Sales.*
|
||||
- **Produkt:** "Staleness Alerts" (warnt Makler bei verwaisten Listings/URLs) & CRM-Handoff integrieren.
|
||||
- **Sales:** Aus den Learnings eine klare "Case-Study Salespage" bauen und Outbound-Mails an ähnliche Broker-Teams starten.
|
||||
- **Pricing:** Evaluieren, ob ein Hybrid-Pricing (Base Fee + "Per-Active-Listing" Fee) Sinn für Makler-Büros macht.
|
||||
- **Zielschwelle:** Mindestens 10 zahlende **MRR-Accounts** allein aus der Immobilien-Wedge.
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Top Risiken & Mitigations
|
||||
|
||||
| Risiko | Lösungsansatz (Mitigation) |
|
||||
| :--- | :--- |
|
||||
| **Abbruch im DM-Funnel** | Das per DM versendete Gratis-Material (Templates) muss eine wasserdichte, direkte "Brücke" zum Signup in QR Master haben. |
|
||||
| **Schwache Attribution (Scan → Revenue)** | Standard-UTM-Parameter im Tool erzwingen, sodass Makler genau sehen können, woher der Lead kam. |
|
||||
| **Zu breiter Fokus (Zeitfalle)** | Extreme Disziplin: Keine "Nice-to-have" Features für komplett andere Branchen (z.B. Speisekarten) vor Ablauf der 90 Tage. |
|
||||
| **Plattform-Verzettelung** | Kein Cross-Posting Chaos: Fokus auf *nur eine* Plattform (z.B. LinkedIn), um den Algorithmus wirklich zu knacken. |
|
||||
307
guest-post-pitches.md
Normal file
@@ -0,0 +1,307 @@
|
||||
# Guest Post Pitches — QR Master
|
||||
|
||||
---
|
||||
|
||||
## Submitted / In Progress
|
||||
|
||||
---
|
||||
|
||||
### DigitalGpoint — Guest Post Submission
|
||||
- **Submit to:** digitalgpoint.webmail@gmail.com
|
||||
- **Zielgruppe:** Small business, marketers, entrepreneurs (EN)
|
||||
- **Segment:** Founders / Marketing
|
||||
- **Tier:** 2 (niche tech blog, solid topical fit)
|
||||
|
||||
**Submission Email:**
|
||||
|
||||
---
|
||||
|
||||
**To:** digitalgpoint.webmail@gmail.com
|
||||
**Subject:** Solving the "print gap" for small businesses
|
||||
|
||||
Hi [Name],
|
||||
|
||||
I’ve noticed DigitalGpoint covers a lot of practical tools for business growth. One area that often gets overlooked is the bridge between physical marketing (flyers, menus, signage) and digital analytics.
|
||||
|
||||
I’ve put together a practical guide on "Managing the Move from Static to Dynamic Print." It explains how small business owners are using dynamic redirect layers to make their physical materials editable after printing—saving them from costly reprints when a URL or price changes.
|
||||
|
||||
It’s a straightforward, workflow-focused piece that I believe your readers would find highly actionable.
|
||||
|
||||
Would you be open to reviewing a draft for a guest contribution?
|
||||
|
||||
Best,
|
||||
|
||||
Timo
|
||||
(Writer & Strategist)
|
||||
|
||||
---
|
||||
|
||||
> 🔒 **INTERNAL — DO NOT INCLUDE IN SUBMISSION EMAIL**
|
||||
|
||||
**Notes:**
|
||||
- Word count: 1,200+
|
||||
- Tone: Practical, professional
|
||||
- **Link Policy:** Bio-only link. No links or product mentions in the body or signature of the pitch email. Link to `qrmaster.net` in the author bio of the published article only.
|
||||
- **Top SEO keywords:** `static qr codes`, `dynamic qr code`, `editable qr code`
|
||||
|
||||
---
|
||||
|
||||
### Techdee — Guest Post Submission *(Tier 2 — High Priority)*
|
||||
- **Submit to:** Blayget@gmail.com
|
||||
- **Audience:** Tech enthusiasts, small business owners, marketers (EN)
|
||||
- **Segment:** Founders / Marketing / Technology
|
||||
- **Tier:** 2 — no editorial gatekeeping, do-follow, no sponsored label, fast turnaround
|
||||
- **Requirements:** 500–1,000 words · Original · Max 3–4 links · 1 link per 300 words · Lists/tutorials preferred
|
||||
|
||||
> 🚨 **TECHDEE PRE-FLIGHT CHECK** *(complete before investing time in draft)*
|
||||
> - [ ] Does Techdee have real organic traffic? Check Similarweb/Ahrefs — DR alone is not enough
|
||||
> - [ ] Are the last 20+ posts mostly guest posts with outbound money links? If yes → likely link farm, remove or downgrade to Tier 3
|
||||
> - [ ] Run `site:techdee.com` to confirm recent articles are indexed by Google
|
||||
> - [ ] Is there a real editorial contact, or only a blanket Gmail? If Gmail-only and no standards → treat as low-ROI
|
||||
|
||||
**Submission Email:**
|
||||
|
||||
---
|
||||
|
||||
**To:** Blayget@gmail.com
|
||||
**Subject:** Offline-to-Online marketing workflows
|
||||
|
||||
Hi [Name],
|
||||
|
||||
I’ve been following Techdee’s tech and marketing tutorials for some time.
|
||||
|
||||
I’m currently finalizing a piece titled: **"Beyond the Scan: 5 Professional QR Strategies for Modern Marketing."**
|
||||
|
||||
The article moves past the basic "link a code to a site" approach and explores practical technical workflows: using dynamic redirects to avoid reprints, pulling scan data into GA4 for attribution, and managing bulk physical assets.
|
||||
|
||||
It’s a 700-word, list-style tutorial that fits your current format. Is this something you'd like to see for a guest contribution?
|
||||
|
||||
Best,
|
||||
|
||||
Timo
|
||||
(Writer & Strategist)
|
||||
|
||||
---
|
||||
|
||||
> 🔒 **INTERNAL — DO NOT INCLUDE IN SUBMISSION EMAIL**
|
||||
|
||||
**Notes:**
|
||||
- **Link Policy:** Bio-only link. No links or product mentions in the pitch email.
|
||||
- **Primary link:** "free QR code generator" → `https://qrmaster.net` in Author Bio.
|
||||
- **Secondary link:** "QR code tracking" → `https://qrmaster.net/analytics` (1K–10K vol · +900% YoY 🔥 · C_Analytics)
|
||||
- **Top SEO keywords matched:** `qr code tracking` (+900%), `qr code generator for business`, `qr code generator with tracking`, `free qr code generator`
|
||||
- External: 1 Statista/Forbes stat on QR adoption for authority signal
|
||||
- No Techdee internal links required; add 1 opportunistically if they have a relevant article
|
||||
- Follow up once after 7 days, then drop
|
||||
|
||||
---
|
||||
|
||||
### SEO Sandwitch — Guest Post Submission *(Tier 1 — High Value)*
|
||||
- **Submit to:** joydeep@seosandwitch.com
|
||||
- **Audience:** SEO professionals, digital marketers, content strategists (EN)
|
||||
- **Segment:** Marketing / SEO
|
||||
- **Tier:** 1 — high DR, editorial audience, topically powerful if angle is right
|
||||
- **Requirements:** 2,000+ words · Unique · No AI spam · Link to inner SEO Sandwitch pages · No images unless own screenshots · Grammarly-checked
|
||||
|
||||
**Submission Email:**
|
||||
|
||||
---
|
||||
|
||||
**To:** joydeep@seosandwitch.com
|
||||
**Subject:** Attribution blind spots in physical marketing
|
||||
|
||||
Hi Joydeep,
|
||||
|
||||
I’ve been following SEO Sandwitch for a while—your recent piece on AI SEO and GEO was excellent.
|
||||
|
||||
I’m reaching out because I’ve been working on a technical deep-dive that explores a massive attribution blind spot: physical marketing campaigns.
|
||||
|
||||
The piece, **"QR Codes as an Offline-to-Online Signal,"** breaks down how marketers can pull scan data from flyers, packaging, and OOH materials into GA4 to finally close the loop on offline attribution.
|
||||
|
||||
It covers:
|
||||
- Using dynamic redirect layers as an attribution signal.
|
||||
- The indirect impact of physical touchpoints on branded search volume.
|
||||
- Technical setup for UTM-tagged dynamic codes.
|
||||
|
||||
It’s not a superficial "marketing tips" post; it’s a strategist-level look at attribution data.
|
||||
|
||||
I have a ~2,000 word draft ready. Would you be open to taking a look for a potential guest contribution?
|
||||
|
||||
Best,
|
||||
|
||||
Timo
|
||||
(Writer & Strategist)
|
||||
|
||||
---
|
||||
|
||||
> 🔒 **INTERNAL — DO NOT INCLUDE IN SUBMISSION EMAIL**
|
||||
|
||||
**Notes:**
|
||||
- **Link Policy:** Bio-only link. Strictly no links or product names in the pitch. Link to `qrmaster.net` in the author bio of the final article.
|
||||
- Draft length target: 2,200–2,500 words
|
||||
- Must link 2–3 inner SEO Sandwitch pages (check site for relevant attribution/content posts)
|
||||
- No stock images — any visuals must be own screenshots of qrmaster.net or GA4
|
||||
- **Primary body link:** "QR code analytics" → `https://qrmaster.net/analytics` (C_Analytics · 100–1K vol)
|
||||
- **Secondary body link:** "dynamic QR code generator" → `https://qrmaster.net/dynamic` (A_Dynamic · 1K–10K vol)
|
||||
- **Top SEO keywords matched:** `qr code tracking` (+900% 🔥), `track qr code scans` (+900% 🔥), `qr code analytics`, `trackable qr code`, `dynamic qr code tracking`
|
||||
- Follow up once after 10 days; offer to adjust the angle if needed
|
||||
|
||||
---
|
||||
|
||||
### HubSpot Agency Blog / MarketingProfs — Status: SKIP
|
||||
- **Reason:** Both require enterprise B2B marketing angles and have extremely long queues (2–4 months). HubSpot explicitly prohibits homepage/tool links in body copy. MarketingProfs is B2B/enterprise only with no SaaS tool coverage.
|
||||
- **Revisit if:** QR Master has a published case study with measurable ROI data that could be framed as a B2B marketing success story.
|
||||
- **Alternative:** Pitch the same SEO Sandwitch angle to similar mid-tier marketing blogs (SmartBizLoans, Startup Mindset, trickyenough.com — all on Charles Floate's list below)
|
||||
|
||||
---
|
||||
|
||||
## Web 2.0 & Free Guest Posts — Charles Floate List (QR Master Filtered)
|
||||
**Source:** presswhizz.com/blog — "My Top 100+ Free Guest Posting Sites For 2026"
|
||||
**Filter criteria:** Tech tools / SaaS / Marketing / Small Business / Event / Startup niches — no gambling, adult, finance-only
|
||||
|
||||
---
|
||||
|
||||
### PHASE A — Web 2.0 (Publish Immediately, No Editor Required)
|
||||
|
||||
These 5 platforms require zero pitch approval. Create account → write → publish → link. Do these first as a supporting layer before editorial outreach.
|
||||
|
||||
| Priority | Platform | DA | Link Type | Action | Anchor to Use |
|
||||
|----------|----------|----|-----------|--------|---------------|
|
||||
| 🟢 1 | **Medium.com** | 95 | No-follow (but crawled heavily) | Publish "5 underrated QR code use cases for small businesses" — 600–900 words | Partial match: "free QR code generator" |
|
||||
| 🟢 2 | **LinkedIn Pulse** | 97 | No-follow | Publish thought leadership: "Why your business card still needs a QR code in 2025" — short-form 400–500 words | Branded: "QR Master" |
|
||||
| 🟢 3 | **Substack** | 86 | Do-follow | Set up a mini newsletter: "The QR Code Playbook" — first 3 issues = offline-to-online basics, event use cases, dynamic code strategy | Contextual: "qrmaster.net" |
|
||||
| 🟡 4 | **Tealfeed** | 59 | Do-follow (lenient) | Write a **fresh angle** — e.g. "Why Startups Should Use Dynamic QR Codes at Events" — NOT a reworded Medium post (duplicate/thin content risk). | Natural: "dynamic QR code tool" or branded "QR Master" — never exact-match same anchor as Medium post |
|
||||
| 🟡 5 | **Vocal.Media** | 76 | Do-follow (relaxed moderation) | "How Restaurant Owners Use QR Codes to Cut Printing Costs" — niche use case, 700 words | Partial: "QR codes for restaurants" |
|
||||
|
||||
**Web 2.0 Execution order:** Medium → LinkedIn → Substack (ongoing) → Tealfeed → Vocal
|
||||
**Time investment:** ~3 hours total for all 5
|
||||
**Anchor rotation rule:** Never use the same exact-match anchor across posts — rotate: *"QR Master"* · *"qrmaster.net"* · *"dynamic QR code tool"* · *"free QR code generator"* · *"QR code analytics"* — one per post maximum.
|
||||
|
||||
---
|
||||
|
||||
### PHASE B — Editorial Guest Posts (Pitch Required, High DR)
|
||||
|
||||
Filtered from Charles Floate’s Top 20 + niche 70+ list. Sorted by fit + DR.
|
||||
|
||||
> ✅ **Pre-Submission Quality Checklist — Tier 1 Articles**
|
||||
> Run through this before any Tier 1 article ships:
|
||||
> - [ ] Grammarly: 0 errors, no unresolved passive-voice flags on key claims
|
||||
> - [ ] Every stat/claim has a source link (no “studies show” without a reference)
|
||||
> - [ ] At least 1 original screenshot included (qrmaster.net UI or GA4 data)
|
||||
> - [ ] 2–3 internal links from target site researched and woven into draft
|
||||
> - [ ] Draft read cold by a second person before submission
|
||||
> - [ ] Author bio finalised — LinkedIn or portfolio URL included
|
||||
> - [ ] Confirmed article angle is NOT already covered by the target site recently
|
||||
|
||||
#### 🟢 Tier 1 — Best Fit, Highest Authority
|
||||
|
||||
| # | Site | DR | Traffic | Niche Match | Pitch Angle | URL |
|
||||
|---|------|----|---------|-------------|-------------|-----|
|
||||
| 1 | **Hackernoon** | 88 | 395K | Tech/startup founders | "QR Codes Are Having a Quiet Comeback — And It's More Interesting Than You Think" — data-driven, contrarian tech angle | hackernoon.com |
|
||||
| 2 | **Techopedia** | 88 | 1.1M | Technology — responsive editorial | "Static vs. Dynamic QR Codes: A Developer's Guide to Choosing the Right Type" — technical, tool-comparison angle | techopedia.com |
|
||||
| 3 | **G2 Learning Hub** ⚠️ *Long Shot* | 91 | 278K | SaaS tools/software reviews | "How to Pick a QR Code Generator: 7 Features That Actually Matter" — tool evaluation guide, high commercial intent. *Internal content team; rarely accepts external pitches without established brand track record.* | learn.g2.com |
|
||||
| 4 | **Visme** ⚠️ *Long Shot* | 86 | 1.3M | Visual/marketing content | "How to Design QR Codes That Don’t Look Like an Eyesore" — visual + branding angle. *In-house editorial team; external submissions very rare. Pitch only if you have a strong writing portfolio.* | visme.co |
|
||||
| 5 | **Smart Data Collective** | ~70 | Med | Data/analytics | "What QR Code Scan Data Tells You About Your Offline Campaigns" — analytics angle, ties into qrmaster.net scan tracking feature | smartdatacollective.com |
|
||||
|
||||
#### 🟡 Tier 2 — Strong Fit, Mid Effort
|
||||
|
||||
| # | Site | DR | Traffic | Niche Match | Pitch Angle | URL |
|
||||
|---|------|----|---------|-------------|-------------|-----|
|
||||
| 6 | **Startup Mindset** | ~60 | Med | Startup founders | "5 Physical Marketing Tools Still Worth Using in 2025 (And How to Make Them Digital)" — QR codes as bridge between offline/online | startupmindset.com |
|
||||
| 7 | **Small Biz Daily** | ~55 | Med | Small business owners | "How Small Businesses Can Use QR Codes to Run Campaigns Without a Developer" — exact audience match | smallbizdaily.com |
|
||||
| 8 | **MobileAppDaily** | 73 | 38K | Mobile/app/SaaS | "Best QR Code Generator Apps Reviewed: What to Look for in 2025" — app comparison article | mobileappdaily.com |
|
||||
| 9 | **trickyenough.com** | ~50 | Med | Marketing/SEO | "QR Codes in Marketing: How to Track ROI From Print Campaigns" — UTM + QR code tracking guide | trickyenough.com |
|
||||
| 10 | **Martech Series** | ~65 | Med | Marketing tech | "QR Codes as a MarTech Asset: Closing the Attribution Gap Between Print and Digital" — B2B marketing tech angle | martechseries.com |
|
||||
|
||||
#### 🔵 Tier 3 — Niche Specific, Lower Effort
|
||||
|
||||
| # | Site | DR | Niche Match | Pitch Angle | URL |
|
||||
|---|------|----|-------------|-------------|-----|
|
||||
| 11 | **PageFly** | 78 | eCommerce/Shopify | "How Shopify Stores Use QR Codes on Packaging to Boost Repeat Purchases" | pagefly.io |
|
||||
| 12 | **SurveySparrow** | 80 | B2B/feedback tools | "How to Collect Event Feedback in Under 30 Seconds Using QR Codes" | surveysparrow.com |
|
||||
| 13 | **Bplans (articles)** | ~75 | Business planning | "Adding QR Codes to Your Business Plan: The Physical-Digital Marketing Layer" | articles.bplans.com |
|
||||
| 14 | **Innotech Today** | ~45 | Tech/innovation | "Dynamic QR Codes: The Quiet Innovation Reshaping Physical Marketing" | innotechtoday.com |
|
||||
| 15 | **nichemarket.co.za** | ~40 | Small biz / emerging markets | "Why QR Codes Are the Cheapest Digital Marketing Tool for Local Businesses" | nichemarket.co.za |
|
||||
|
||||
---
|
||||
|
||||
### SKIP LIST (from Floate's list — not suitable for QR Master)
|
||||
|
||||
| Site | Reason |
|
||||
|------|--------|
|
||||
| ClickUp | Productivity-only, no tools/marketing content |
|
||||
| Edutopia | K-12 education only, already covered in existing outreach |
|
||||
| Outbrain | Native advertising platform, not accepting product content |
|
||||
| FinancesOnline | Finance/SaaS review site, requires formal product listing |
|
||||
| Clutch.co | Agency reviews only, no editorial content |
|
||||
| DataScienceCentral | ML/AI/data science only — QR codes too shallow |
|
||||
| OpenSource.com | Dev/open-source only — no marketing/tool angle |
|
||||
| Fylehq | Corporate expense management only |
|
||||
| All HR/Productivity sites | No QR code angle that isn't forced |
|
||||
| All Finance/Fintech sites | Wrong audience entirely |
|
||||
| All Security/Privacy sites | Wrong audience entirely |
|
||||
|
||||
---
|
||||
|
||||
### Execution Plan — Charles Floate List
|
||||
|
||||
> 🔍 **Contact Research Guide** — Complete *before* Woche-1 pitches go out. Hunter.io alone is insufficient for smaller blogs.
|
||||
>
|
||||
> | Method | When to use |
|
||||
> |--------|-------------|
|
||||
> | `site:domain.com "write for us"` | Always — check first |
|
||||
> | `site:domain.com "contact" OR "editor"` | If no write-for-us page |
|
||||
> | LinkedIn: search “[site name] editor” or “content manager” | Tier 1 always |
|
||||
> | Hunter.io | Larger sites with company domains |
|
||||
> | Whois + MXToolbox | Smaller/independent blogs |
|
||||
> | Contact form on site | Fallback when no direct email |
|
||||
> | LinkedIn DM to editor | Last resort for Tier 1 targets |
|
||||
>
|
||||
> **Goal: all Tier 1 contacts confirmed before the first pitch goes out.**
|
||||
|
||||
**Week 1 (immediate):**
|
||||
- [ ] Publish Medium post (Phase A #1)
|
||||
- [ ] Publish LinkedIn Pulse post (Phase A #2)
|
||||
- [ ] Set up Substack, publish first issue (Phase A #3)
|
||||
- [ ] Send pitch to Hackernoon (Tier 1 #1)
|
||||
- [ ] Send pitch to Techopedia (Tier 1 #2)
|
||||
|
||||
**Week 2:**
|
||||
- [ ] Publish Tealfeed + Vocal posts (Phase A #4–5)
|
||||
- [ ] Send pitch to G2 Learning Hub (Tier 1 #3)
|
||||
- [ ] Send pitch to Visme (Tier 1 #4)
|
||||
- [ ] Send pitch to Startup Mindset (Tier 2 #6)
|
||||
|
||||
**Week 3:**
|
||||
- [ ] Follow up on Week 1 pitches (if no reply)
|
||||
- [ ] Send pitches to Tier 2 targets: Small Biz Daily, MobileAppDaily, trickyenough
|
||||
- [ ] Send pitch to Smart Data Collective + Martech Series
|
||||
|
||||
**Week 4:**
|
||||
- [ ] Follow up on Week 2 pitches
|
||||
- [ ] Begin Tier 3 pitches (PageFly, SurveySparrow, Bplans)
|
||||
|
||||
---
|
||||
|
||||
### Guest Post Tracking — Charles Floate List
|
||||
|
||||
| Tier | Site | Contact | Sent | Reply | Status |
|
||||
|------|------|---------|------|-------|--------|
|
||||
| Web 2.0 | Medium | — (self-publish) | — | — | — |
|
||||
| Web 2.0 | LinkedIn Pulse | — (self-publish) | — | — | — |
|
||||
| Web 2.0 | Substack | — (self-publish) | — | — | — |
|
||||
| Web 2.0 | Tealfeed | — (self-publish) | — | — | — |
|
||||
| Web 2.0 | Vocal.Media | — (self-publish) | — | — | — |
|
||||
| 1 | Hackernoon | editorial@hackernoon.com | — | — | — |
|
||||
| 1 | Techopedia | (find via Hunter.io) | — | — | — |
|
||||
| 1 | G2 Learning Hub | (find via Hunter.io) | — | — | — |
|
||||
| 1 | Visme | (find via Hunter.io) | — | — | — |
|
||||
| 1 | Smart Data Collective | (find via Hunter.io) | — | — | — |
|
||||
| 2 | Startup Mindset | (find via Hunter.io) | — | — | — |
|
||||
| 2 | Small Biz Daily | (find via site contact) | — | — | — |
|
||||
| 2 | MobileAppDaily | (find via Hunter.io) | — | — | — |
|
||||
| 2 | trickyenough.com | (find via site contact) | — | — | — |
|
||||
| 2 | Martech Series | (find via Hunter.io) | — | — | — |
|
||||
| 3 | PageFly | (find via Hunter.io) | — | — | — |
|
||||
| 3 | SurveySparrow | (find via Hunter.io) | — | — | — |
|
||||
| 3 | Bplans | (find via Hunter.io) | — | — | — |
|
||||
@@ -1,828 +0,0 @@
|
||||
Keyword Stats 2026-01-22 at 10_55_20
|
||||
1. Januar 2025 - 31. Dezember 2025
|
||||
Keyword Currency Avg. monthly searches Änderung über drei Monate Änderung im Jahresvergleich Competition Competition (indexed value) Top of page bid (low range) Top of page bid (high range) Ad impression share Organic impression share Organic average position In account? In plan? Searches: Jan 2025 Searches: Feb 2025 Searches: Mar 2025 Searches: Apr 2025 Searches: May 2025 Searches: Jun 2025 Searches: Jul 2025 Searches: Aug 2025 Searches: Sep 2025 Searches: Oct 2025 Searches: Nov 2025 Searches: Dec 2025
|
||||
dynamic qr code generator EUR 5000 0% 0% Mittel 38 "2,34" "14,52"
|
||||
dynamic qr codes EUR 5000 -90% 0% Mittel 38 "2,58" "17,08"
|
||||
dynamic qr EUR 500 0% 0% Mittel 34 "1,85" "11,67"
|
||||
generate qr EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
|
||||
create qr code EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
|
||||
dynamic qr code generator free EUR 500 0% 0% Hoch 82 "1,69" "4,97"
|
||||
qr code generator free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
|
||||
code generator EUR 5000 0% 0% Niedrig 32 "1,29" "3,97"
|
||||
free qr generator EUR 5000 0% 0% Hoch 76 "1,21" "3,62"
|
||||
create qr code free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
|
||||
custom qr code generator EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
|
||||
qr code free EUR 5000 0% 0% Hoch 84 "0,94" "3,33"
|
||||
make qr code EUR 50000 -90% 0% Hoch 82 "0,89" "3,63"
|
||||
create dynamic qr code EUR 5000 0% 0% Mittel 38 "2,34" "14,52"
|
||||
make qr code free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
|
||||
static qr code generator EUR 5000 0% 900% Hoch 71 "1,06" "3,50"
|
||||
my qr code generator EUR 500 0% 0% Hoch 81 "1,45" "3,51"
|
||||
qr code generator with analytics EUR 500 0% -90% Mittel 65 "3,63" "27,08"
|
||||
dynamic qr codes free EUR 500 0% 0% Hoch 79 "1,27" "4,58"
|
||||
scan code generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
|
||||
url qr code generator EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
|
||||
dynamic qr generator EUR 5000 0% 0% Mittel 38 "2,34" "14,52"
|
||||
create a dynamic qr code EUR 50 0% 0% Hoch 83 "4,10" "13,65"
|
||||
get a qr code EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
|
||||
create qr code generator EUR 50000 0% 0% Hoch 81 "0,86" "3,52"
|
||||
qr code generator with tracking EUR 500 0% 0% Hoch 72 "2,77" "19,03"
|
||||
bulk qr code generator EUR 5000 0% 0% Niedrig 13 "0,69" "3,63"
|
||||
create custom qr code EUR 500 0% 0% Mittel 51 "2,44" "7,89"
|
||||
qr codes for business EUR 5000 0% 0% Hoch 97 "2,57" "7,95"
|
||||
custom qr code EUR 5000 0% 0% Mittel 57 "1,83" "6,10"
|
||||
make qr EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
|
||||
qr code tracking EUR 5000 -90% -90% Mittel 64 "1,62" "14,63"
|
||||
free qr code generator for business cards EUR 500 0% 0% Hoch 85 "2,04" "4,44"
|
||||
qr creation EUR 50000 0% 0% Hoch 72 "0,71" "3,34"
|
||||
qr code generator for business card EUR 5000 0% 0% Mittel 42 "2,95" "7,03"
|
||||
create qr code for business card EUR 5000 0% 0% Mittel 42 "2,95" "7,03"
|
||||
create qr code for business EUR 50 0% 0% Hoch 96 "2,97" "5,82"
|
||||
qr code generator pricing EUR 500 -90% -90% Mittel 49 "2,33" "17,90"
|
||||
static qr code generator free EUR 50 0% 900% Hoch 87 "0,91" "3,24"
|
||||
qr codes on business cards EUR 50000 -90% -90% Hoch 100 "2,19" "6,72"
|
||||
static qr codes EUR 500 -90% 0% Mittel 62 "0,90" "3,64"
|
||||
free qr code for business card EUR 500 0% 0% Hoch 100 "2,40" "4,89"
|
||||
professional qr code generator EUR 50000 0% 0% Mittel 53 "0,91" "10,80"
|
||||
dynamic qr code tracking EUR 50 0% 0% Mittel 55 "1,52" "18,26"
|
||||
qr barcode generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
|
||||
free qr code generator with logo EUR 500 0% 0% Hoch 80 "1,31" "4,47"
|
||||
qr code generator for business EUR 500 0% 900% Niedrig 17 "1,81" "7,00"
|
||||
vcard qr code generator EUR 5000 0% 0% Mittel 60 "1,08" "4,10"
|
||||
free qr code generator with tracking EUR 500 -90% 0% Hoch 80 "2,43" "9,97"
|
||||
qr code with analytics EUR 500 0% 0% Mittel 56 "4,85" "22,14"
|
||||
my qr code EUR 5000 0% 0% Mittel 59 "0,97" "3,79"
|
||||
qr code designer EUR 500 0% 0% Mittel 64 "0,91" "3,63"
|
||||
create dynamic qr code free EUR 500 0% 0% Hoch 82 "1,69" "4,97"
|
||||
qr code for business card free EUR 500 -90% -90% Hoch 96 "2,28" "4,93"
|
||||
free custom qr code generator EUR 500 0% 0% Hoch 91 "1,69" "4,83"
|
||||
completely free qr code generator EUR 500 0% 0% Hoch 90 "0,92" "3,04"
|
||||
vcard qr code EUR 5000 0% 0% Hoch 74 "0,97" "3,63"
|
||||
custom qr code free EUR 500 0% 0% Hoch 88 "1,86" "4,97"
|
||||
get a free qr code EUR 500 0% 900% Hoch 86 "1,10" "4,78"
|
||||
qr gen EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
|
||||
create qr free EUR 500 0% 0% Hoch 87 "1,28" "4,10"
|
||||
trackable qr code generator EUR 500 0% 0% Hoch 72 "2,77" "19,03"
|
||||
free code generator EUR 500 0% 0% Mittel 40 "1,00" "3,98"
|
||||
custom qr EUR 500 0% 0% Hoch 87 "1,51" "4,43"
|
||||
qr code for location EUR 500 -90% -90% Mittel 37 "0,79" "3,42"
|
||||
create qr code for business card free EUR 50 0% 0% Hoch 100 "0,98" "4,46"
|
||||
free create a qr code EUR 500 0% 0% Hoch 87 "1,28" "4,10"
|
||||
qr code generator with logo EUR 5000 0% 0% Mittel 64 "1,51" "5,12"
|
||||
free qr code for business EUR 50 0% 0% Hoch 88 "1,95" "4,50"
|
||||
qr maker free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
|
||||
facebook qr code generator EUR 5000 -90% 0% Niedrig 19 "1,26" "4,10"
|
||||
create free qr code for business card EUR 50 0% 0% Hoch 98 "3,34" "4,97"
|
||||
qr code com EUR 500 0% 0% Mittel 62 "0,82" "3,73"
|
||||
qr code for restaurant menu EUR 500 900% 900% Hoch 73 "1,89" "8,11"
|
||||
trackable qr codes EUR 500 0% 0% Hoch 70 "5,57" "34,95"
|
||||
create website qr code EUR 50 0% 0% Hoch 88 "2,22" "6,88"
|
||||
qr business card generator EUR 5000 0% 0% Mittel 42 "2,95" "7,03"
|
||||
qr code generator and tracking EUR 500 0% 0% Hoch 72 "2,77" "19,03"
|
||||
qr code restaurant menu EUR 500 -90% -90% Hoch 82 "2,81" "11,90"
|
||||
qr tracking EUR 500 0% 0% Niedrig 11 "1,66" "12,51"
|
||||
custom qr generator EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
|
||||
v card qr code EUR 50 0% 0% Hoch 79 "1,10" "4,16"
|
||||
cool qr code generator EUR 500 0% 0% Mittel 63 "1,19" "3,87"
|
||||
make a qr code for business card EUR 50 0% 0% Hoch 85 "3,17" "7,50"
|
||||
qr generator for business cards EUR 50 0% 0% Hoch 84 "3,18" "5,18"
|
||||
branded qr code generator EUR 50 0% 0% Hoch 83 "2,63" "10,80"
|
||||
website to qr code EUR 5000 0% 0% Mittel 49 "0,68" "3,48"
|
||||
create qr code with tracking EUR 50 0% 0% Niedrig 18 "3,65" "7,01"
|
||||
vcard qr code free EUR 500 -90% 0% Hoch 80 "0,83" "3,58"
|
||||
vcard qr EUR 5000 0% 0% Hoch 74 "0,97" "3,63"
|
||||
make custom qr code EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
|
||||
create static qr code EUR 50 0% 0% Hoch 90 "1,31" "4,10"
|
||||
qr code for your business EUR 50 0% 0% Hoch 99 "2,16" "5,79"
|
||||
get a qr code for my business EUR 50 0% 0% Hoch 95 "2,89" "8,41"
|
||||
generate dynamic qr codes EUR 5000 0% 0% Mittel 38 "2,34" "14,52"
|
||||
restaurant qr code EUR 500 0% 0% Hoch 80 "1,61" "11,55"
|
||||
vcard qr code generator free EUR 500 0% 0% Hoch 81 "1,30" "4,00"
|
||||
my qr EUR 5000 0% 0% Mittel 59 "0,97" "3,79"
|
||||
qr code generator and analytics EUR 50 ∞ 0% Hoch 88 "6,49" "27,63"
|
||||
unique qr code generator EUR 500 0% 0% Mittel 57 "1,51" "4,32"
|
||||
url qr generator EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
|
||||
free qr code generator free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
|
||||
free qr code tracking EUR 500 0% 0% Hoch 73 "1,62" "9,39"
|
||||
menu qr code generator EUR 50 0% 0% Hoch 84 "2,58" "5,01"
|
||||
generate static qr code EUR 50 0% 0% Hoch 90 "1,22" "3,11"
|
||||
unlimited qr code generator EUR 500 -90% -90% Hoch 82 "1,33" "3,70"
|
||||
vcard qr generator EUR 5000 0% 0% Mittel 60 "1,08" "4,10"
|
||||
qr code generator phone number EUR 500 -90% 0% Hoch 75 "0,74" "3,88"
|
||||
create qr code from url EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
|
||||
business qr code generator free EUR 50 0% 0% Hoch 93 "1,96" "4,72"
|
||||
make qr code for business card EUR 5000 0% 0% Mittel 42 "2,95" "7,03"
|
||||
create a website qr code EUR 50 0% 0% Hoch 88 "2,61" "7,92"
|
||||
qr card EUR 5000 -90% 0% Hoch 100 "1,35" "4,74"
|
||||
dynamic qr code pricing EUR 50 0% -90% Mittel 62 "1,89" "11,48"
|
||||
ai qr code generator EUR 500 0% 0% Mittel 39 "0,87" "3,54"
|
||||
qr code de EUR 50 -90% 0% Mittel 55 "0,59" "5,28"
|
||||
qr code create free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
|
||||
make a dynamic qr code EUR 50 0% 0% Hoch 88 "1,80" "7,05"
|
||||
create my qr code EUR 500 -90% -90% Hoch 88 "1,08" "4,05"
|
||||
qr code menu free EUR 50 0% -90% Mittel 56 "1,77" "5,39"
|
||||
creating a qr code for business EUR 50 0% 0% Hoch 86 "2,30" "8,64"
|
||||
create qr barcode EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
|
||||
qr card generator EUR 50 0% 0% Hoch 75 "1,26" "3,70"
|
||||
dynamic qr free EUR 50 0% 0% Hoch 86 "0,46" "3,73"
|
||||
free barcode EUR 5000 0% 0% Niedrig 6 "0,64" "3,16"
|
||||
generate qr codes for free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
|
||||
create a qr code for my business EUR 50 0% 0% Hoch 89 "4,10" "9,04"
|
||||
vcard qr code business card EUR 50 0% 0% Mittel 53 "3,35" "7,32"
|
||||
create a qr code for your business EUR 50 0% 0% Hoch 93 "2,54" "5,08"
|
||||
edit qr code EUR 500 0% 0% Mittel 37 "0,90" "6,55"
|
||||
url code generator EUR 500 0% 0% Mittel 66 "1,19" "3,61"
|
||||
qr qr code generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
|
||||
free unlimited qr code generator EUR 500 0% 0% Hoch 89 "0,93" "3,06"
|
||||
event qr code EUR 500 0% 0% Mittel 43 "1,48" "7,61"
|
||||
qr code generator contact card EUR 500 0% 0% Mittel 46 "2,35" "6,17"
|
||||
free code qr generator EUR 50 0% 0% Hoch 73 "0,89" "3,63"
|
||||
make a qr code for business EUR 50 0% 0% Hoch 88 "1,76" "5,26"
|
||||
create a static qr code EUR 50 0% 0% Hoch 85 "1,51" "4,36"
|
||||
create trackable qr code EUR 50 0% 0% Hoch 74 "5,22" "22,03"
|
||||
produce qr code EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
|
||||
make dynamic qr code EUR 50 0% 0% Hoch 86 "3,06" "6,45"
|
||||
qr code generator from url EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
|
||||
qr code for my business EUR 50 0% 0% Hoch 97 "2,46" "7,58"
|
||||
my qr generator EUR 50 0% 0% Hoch 93 "0,85" "3,31"
|
||||
free qr code generator with analytics EUR 50 0% 0% Hoch 93 "2,73" "7,89"
|
||||
make your own qr code free EUR 500 0% 0% Hoch 86 "1,43" "4,11"
|
||||
static qr codes generator EUR 50 0% 0% Mittel 51 "1,10" "3,70"
|
||||
create your own qr code free EUR 500 0% 0% Hoch 86 "1,43" "4,11"
|
||||
design qr code generator EUR 500 0% 0% Niedrig 32 "0,95" "3,36"
|
||||
static qr generator EUR 50 0% 0% Hoch 87 "0,91" "4,14"
|
||||
qr codes pro EUR 500 0% 0% Niedrig 28 "1,23" "8,93"
|
||||
qr code with tracking free EUR 500 0% 0% Hoch 73 "1,62" "9,39"
|
||||
website to qr code generator EUR 50 -90% 0% Hoch 77 "0,95" "4,10"
|
||||
facebook qr code generator free EUR 500 0% 0% Niedrig 15 "1,27" "3,63"
|
||||
make your qr code EUR 500 0% 0% Hoch 69 "1,35" "5,19"
|
||||
smart qr code generator EUR 50 0% 0% Mittel 44 "1,09" "5,84"
|
||||
creating qr code business card EUR 5000 0% 0% Mittel 42 "2,95" "7,03"
|
||||
qr barcode generator free EUR 5000 0% 0% Hoch 76 "1,21" "3,62"
|
||||
create qr code from website EUR 50 0% 0% Hoch 93 "1,13" "4,59"
|
||||
branded qr codes EUR 500 0% 0% Mittel 54 "1,84" "10,35"
|
||||
create free dynamic qr code EUR 50 0% 0% Hoch 90 "1,84" "5,87"
|
||||
free url qr code generator EUR 50 0% 0% Hoch 87 "1,18" "3,63"
|
||||
generate website qr code EUR 50000 0% 0% Niedrig 17 "1,88" "6,16"
|
||||
create your qr code EUR 500 0% 0% Hoch 69 "1,35" "5,19"
|
||||
create the qr code EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
|
||||
make my qr code EUR 500 -90% -90% Hoch 88 "1,08" "4,05"
|
||||
event qr code generator EUR 50 0% 0% Mittel 57 "1,38" "4,25"
|
||||
paypal qr code EUR 5000 0% 0% Niedrig 9 "1,03" "6,79"
|
||||
unique qr codes EUR 500 0% 0% Niedrig 30 "1,21" "5,02"
|
||||
generate qr code for url free EUR 50 0% 0% Hoch 86 "1,27" "3,63"
|
||||
create business qr code EUR 50 0% 0% Hoch 96 "2,97" "5,82"
|
||||
generate the qr code EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
|
||||
qr code generator free business card EUR 50 0% 0% Mittel 60 "1,72" "4,10"
|
||||
qr code generator business EUR 500 0% 0% Hoch 75 "3,51" "7,51"
|
||||
qr code generator for business card free EUR 50 0% 0% Hoch 92 "2,60" "4,10"
|
||||
cool qr codes EUR 500 0% 0% Niedrig 25 "1,16" "3,82"
|
||||
create custom qr code free EUR 50 0% 0% Hoch 89 "2,02" "5,06"
|
||||
qr code for EUR 500 0% 0% Niedrig 12 "1,04" "3,52"
|
||||
qr code generator ai EUR 500 0% 900% Mittel 53 "0,87" "3,63"
|
||||
barcode create EUR 5000 0% 0% Mittel 35 "0,78" "3,15"
|
||||
create a qr code for a url free EUR 50 0% 0% Hoch 90 "1,51" "4,86"
|
||||
url to qr code generator free EUR 50 0% 0% Hoch 81 "1,22" "3,11"
|
||||
create a qr code for business card free EUR 50 0% 0% Hoch 93 "3,63" "5,66"
|
||||
generate a qr EUR 50000 0% 0% Hoch 81 "0,86" "3,52"
|
||||
free qr code designer EUR 50 0% 0% Hoch 90 "1,27" "3,34"
|
||||
dynamic qr code cost EUR 50 0% 0% Mittel 60 "1,62" "10,52"
|
||||
custom logo qr code EUR 500 0% 0% Hoch 98 "2,27" "7,67"
|
||||
instant qr code generator EUR 50 0% 0% Hoch 78 "1,30" "3,63"
|
||||
create menu qr code free EUR 50 0% 0% Hoch 74 "4,10" "6,74"
|
||||
qr code generator qr code generator qr code generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
|
||||
create vcard qr code EUR 5000 0% 0% Mittel 60 "1,08" "4,10"
|
||||
get qr code for business EUR 50 0% 0% Hoch 100 "3,61" "4,62"
|
||||
qr code sign up EUR 50 0% 0% Mittel 52 "1,44" "9,17"
|
||||
with qr code EUR 50 0% 0% Niedrig 22 "1,00" "3,92"
|
||||
create a business qr code EUR 50 0% 0% Hoch 96 "4,50" "11,66"
|
||||
create qr for free EUR 50 0% 0% Hoch 89 "1,31" "3,63"
|
||||
free make a qr code EUR 50 0% 0% Hoch 83 "1,28" "3,32"
|
||||
qr code for menu free EUR 50 0% 0% Hoch 80 "2,31" "5,12"
|
||||
qr code pricing EUR 500 0% 0% Mittel 58 "0,99" "5,66"
|
||||
qr code generator permanent EUR 500 0% 900% Hoch 78 "1,22" "4,10"
|
||||
free trackable qr code EUR 500 0% 0% Hoch 73 "1,62" "9,39"
|
||||
create free qr code business card EUR 500 0% 0% Hoch 85 "2,04" "4,44"
|
||||
create free qr code generator EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
|
||||
instagram qr code generator free EUR 50 0% 0% Hoch 91 "1,09" "3,63"
|
||||
develop a qr code EUR 50 0% 0% Hoch 83 "1,60" "5,88"
|
||||
free business card qr code EUR 500 -90% 0% Hoch 97 "1,92" "4,84"
|
||||
free qr code generator contact card EUR 50 0% 0% Hoch 88 "1,37" "4,04"
|
||||
qr code qr code generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
|
||||
create static qr code free EUR 50 0% 0% Hoch 81 "0,93" "3,36"
|
||||
qr code from website EUR 50 0% 0% Hoch 85 "0,82" "3,20"
|
||||
qr code generator for phone number EUR 500 -90% 0% Mittel 56 "0,79" "3,27"
|
||||
create a qr code for an event EUR 50 0% 0% Hoch 74 "1,64" "5,94"
|
||||
create qr scan code EUR 50 0% 0% Hoch 88 "1,27" "3,71"
|
||||
create business card qr code free EUR 50 0% 0% Hoch 92 "2,66" "4,59"
|
||||
advanced qr code generator EUR 50 0% 0% Mittel 42 "1,29" "6,91"
|
||||
to create a qr code EUR 50 0% 0% Hoch 89 "2,93" "6,04"
|
||||
make a qr code generator EUR 50 0% 0% Hoch 68 "1,27" "3,44"
|
||||
qr restaurant menu EUR 50 0% 0% Mittel 35 "2,52" "28,99"
|
||||
qr code vcard free EUR 50 0% 0% Hoch 84 "0,86" "4,96"
|
||||
create barcode free EUR 500 0% 0% Mittel 39 "0,93" "3,34"
|
||||
free business qr code EUR 50 0% 0% Hoch 95 "2,29" "4,10"
|
||||
produce a qr code EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
|
||||
create qr code for event EUR 50 0% 0% Hoch 90 "1,12" "9,73"
|
||||
website to qr code free EUR 50 0% 0% Hoch 85 "0,86" "3,61"
|
||||
free qr code vcard EUR 50 0% 0% Hoch 99 "1,87" "3,63"
|
||||
create qr generator EUR 50000 0% 0% Hoch 81 "0,86" "3,52"
|
||||
qr design EUR 5000 -90% -90% Hoch 93 "0,93" "3,20"
|
||||
free qr code menu EUR 50 0% 0% Niedrig 29 "1,57" "4,96"
|
||||
custom free qr code EUR 50 0% 0% Hoch 95 "1,79" "4,64"
|
||||
difference between static and dynamic qr code EUR 50 0% 0% Niedrig 24 "0,32" "10,47"
|
||||
bulk qr generator EUR 5000 0% 0% Niedrig 13 "0,69" "3,63"
|
||||
create cool qr codes EUR 50 0% 0% Hoch 94 "1,19" "5,18"
|
||||
create unique qr code EUR 500 0% 0% Mittel 57 "1,51" "4,32"
|
||||
produce qr code free EUR 50 0% 0% Hoch 100 "2,55" "4,54"
|
||||
free contact qr code generator EUR 50 0% 0% Hoch 92 "1,31" "3,63"
|
||||
professional qr code EUR 50 0% 0% Mittel 38 "1,75" "6,26"
|
||||
menu qr codes EUR 500 0% 0% Hoch 71 "1,63" "5,60"
|
||||
free qr code contact card EUR 50 0% 0% Hoch 86 "1,85" "3,80"
|
||||
bulk create qr codes EUR 50 0% 0% Hoch 83 "3,25" "7,78"
|
||||
generate qr code from website EUR 50 0% 0% Hoch 98 "1,47" "3,63"
|
||||
create qr code from url free EUR 500 -90% 0% Hoch 92 "1,42" "3,70"
|
||||
sign in qr code generator EUR 50 0% 0% Hoch 71 "2,16" "4,34"
|
||||
custom design qr codes EUR 500 0% 0% Hoch 74 "1,38" "5,00"
|
||||
tracking qr code scans EUR 500 0% -90% Mittel 52 "3,03" "16,93"
|
||||
unlimited qr codes EUR 50 0% 0% Hoch 86 "1,04" "4,16"
|
||||
create branded qr code EUR 50 0% 0% Hoch 79 "2,53" "17,43"
|
||||
qr code generator business card free EUR 50 0% ∞ Hoch 95 "2,55" "5,69"
|
||||
tracking barcode EUR 5000 0% -90% Mittel 47 "1,35" "4,34"
|
||||
static qr EUR 500 -90% 0% Mittel 62 "0,90" "3,64"
|
||||
generate qr code for business EUR 50 0% 0% Hoch 95 "4,11" "11,03"
|
||||
free url to qr code EUR 50 0% 0% Hoch 87 "1,01" "3,63"
|
||||
qr business code EUR 50 0% 0% Hoch 91 "3,30" "9,11"
|
||||
v card qr code generator EUR 50 0% 0% Hoch 82 "1,28" "4,10"
|
||||
free dynamic qr EUR 500 0% 0% Hoch 79 "1,27" "4,58"
|
||||
create facebook qr code free EUR 50 0% 0% Hoch 94 "1,04" "4,43"
|
||||
create my qr code free EUR 50 0% 0% Hoch 89 "2,43" "11,68"
|
||||
basic qr code generator EUR 50 0% 0% Hoch 87 "1,08" "3,12"
|
||||
need a qr code EUR 50 0% 0% Hoch 79 "1,18" "5,62"
|
||||
purchase qr codes EUR 500 0% 0% Hoch 78 "2,78" "11,52"
|
||||
qr location EUR 500 -90% -90% Mittel 37 "0,79" "3,42"
|
||||
create free static qr code EUR 50 0% 0% Hoch 80 "1,06" "3,13"
|
||||
ai qr code EUR 500 0% 0% Niedrig 14 "0,76" "4,66"
|
||||
qr code generator with analytics free EUR 50 0% 0% Hoch 90 "3,15" "5,12"
|
||||
need qr code EUR 50 0% 0% Hoch 76 "1,33" "4,97"
|
||||
buy dynamic qr code EUR 50 ∞ 0% Niedrig 25 "1,87" "12,81"
|
||||
to make a qr code EUR 50 0% 0% Mittel 65 "1,58" "3,63"
|
||||
qr tracking code EUR 50 0% 0% Hoch 82 "1,10" "3,60"
|
||||
sms qr code EUR 500 0% 0% Niedrig 17 "0,60" "3,35"
|
||||
qr code tools EUR 500 900% 900% Mittel 34 "0,71" "4,11"
|
||||
dynamic code generator EUR 50 0% 0% Niedrig 17 "3,82" "15,61"
|
||||
qr code for business free EUR 50 0% 0% Hoch 91 "1,46" "3,63"
|
||||
free qr code contact generator EUR 50 0% 0% Hoch 84 "1,06" "3,34"
|
||||
free qr code generator no subscription EUR 50 0% 0% Hoch 90 "0,79" "3,09"
|
||||
create your qr code free EUR 50 0% 0% Hoch 79 "1,79" "4,10"
|
||||
free dynamic qr code generator with logo EUR 50 0% 0% Mittel 43 "0,48" "3,97"
|
||||
sms qr code generator EUR 500 0% 0% Niedrig 18 "0,66" "3,11"
|
||||
create a qr free EUR 50 0% 0% Hoch 94 "2,12" "3,63"
|
||||
qr code generator generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
|
||||
qr code generator account EUR 50 0% 0% Mittel 44 "1,51" "7,59"
|
||||
make your own qr codes EUR 5000 0% 0% Hoch 79 "1,38" "4,11"
|
||||
qr tag generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
|
||||
free trackable qr code generator EUR 500 -90% 0% Hoch 80 "2,43" "9,97"
|
||||
dynamic qr code free generator EUR 50 0% 0% Hoch 95 "2,50" "4,88"
|
||||
create a unique qr code EUR 50 0% 0% Hoch 96 "2,58" "4,89"
|
||||
free menu qr code generator EUR 50 0% 0% Hoch 95 "2,35" "3,38"
|
||||
trackable qr code generator free EUR 50 0% 0% Hoch 95 "4,38" "8,26"
|
||||
free code qr EUR 50000 0% 0% Hoch 86 "1,25" "3,63"
|
||||
create qr code with url EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
|
||||
difference between static and dynamic qr codes EUR 50 0% 0% Hoch 89 "0,61" "18,51"
|
||||
free dynamic qr generator EUR 500 0% 0% Hoch 82 "1,69" "4,97"
|
||||
my qr code generator free EUR 50 0% 0% Hoch 83 "1,51" "4,92"
|
||||
qr code provider EUR 50 0% 0% Mittel 40 "1,85" "7,42"
|
||||
qr analytics EUR 500 0% 0% Mittel 56 "4,85" "22,14"
|
||||
qr code generator with custom logo EUR 50 0% 0% Hoch 88 "3,95" "10,07"
|
||||
to make qr code EUR 50 0% 0% Mittel 52 "1,46" "4,59"
|
||||
static and dynamic qr codes EUR 50 0% 0% Mittel 64 "0,42" "5,07"
|
||||
get qr code generator EUR 50 0% 0% Hoch 80 "1,02" "3,86"
|
||||
qr code generator with url EUR 50 0% 0% Hoch 90 "2,65" "5,00"
|
||||
create code qr free EUR 50 0% 0% Hoch 93 "1,96" "3,63"
|
||||
create qr code of website EUR 50 0% 0% Hoch 97 "2,15" "4,93"
|
||||
qr code generator free unlimited EUR 50 0% 0% Hoch 94 "1,18" "3,63"
|
||||
create qr code for EUR 50 0% 0% Hoch 68 "1,14" "3,63"
|
||||
the qr generator EUR 50 0% 0% Mittel 60 "0,98" "3,99"
|
||||
bulk qr code generator from excel EUR 50 0% 0% Mittel 42 "1,22" "4,36"
|
||||
make url qr code EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
|
||||
qr code and tracking EUR 5000 -90% -90% Mittel 64 "1,62" "14,63"
|
||||
make qr code for location EUR 50 0% 0% Hoch 86 "1,37" "4,01"
|
||||
sign up qr code EUR 50 0% 0% Niedrig 23 "1,81" "5,80"
|
||||
custom branded qr codes EUR 50 0% 0% Hoch 100 "2,33" "13,48"
|
||||
build qr code generator EUR 50 0% 0% Hoch 80 "1,02" "3,86"
|
||||
free qr code business card generator EUR 50 0% 0% Mittel 60 "1,72" "4,10"
|
||||
generate qr code with url EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
|
||||
qr create free EUR 500 0% 0% Hoch 87 "1,28" "4,10"
|
||||
make qr code from website EUR 50 0% 0% Hoch 92 "1,48" "3,53"
|
||||
qr bulk generator EUR 5000 0% 0% Niedrig 13 "0,69" "3,63"
|
||||
qr code s EUR 500 0% 0% Niedrig 27 "0,57" "4,92"
|
||||
create your own qr codes EUR 5000 0% 0% Hoch 79 "1,38" "4,11"
|
||||
restaurant menu qr code free EUR 50 0% 0% Hoch 95 "1,78" "8,90"
|
||||
event qr code generator free EUR 50 0% 0% Hoch 73 "1,55" "4,53"
|
||||
qr signs EUR 5000 -90% -90% Hoch 100 "0,65" "4,49"
|
||||
log in qr code generator EUR 5000 0% 0% Niedrig 15 "0,67" "3,07"
|
||||
instant qr code EUR 50 0% 0% Hoch 77 "1,86" "4,80"
|
||||
custom qr code designer EUR 50 0% 0% Hoch 90 "3,13" "4,88"
|
||||
create a url qr code EUR 50 0% 0% Hoch 89 "2,80" "5,01"
|
||||
the qr code generator free EUR 50 0% 0% Hoch 82 "1,06" "3,63"
|
||||
new qr code generator EUR 50 0% 0% Hoch 79 "1,51" "4,58"
|
||||
trackable qr code free EUR 50 0% 0% Hoch 88 "3,62" "12,45"
|
||||
free personalized qr code generator EUR 50 0% 0% Hoch 93 "0,81" "3,63"
|
||||
qr code generator from website EUR 50 0% 0% Hoch 98 "1,28" "4,12"
|
||||
create qr code for instagram free EUR 50 0% 0% Hoch 95 "1,51" "4,46"
|
||||
digital qr code generator EUR 50 0% 0% Mittel 45 "1,84" "4,17"
|
||||
qr png generator EUR 50 0% 0% Hoch 74 "1,28" "3,33"
|
||||
create custom qr EUR 500 0% 0% Mittel 51 "2,44" "7,89"
|
||||
make qr code for business EUR 50 0% 0% Hoch 100 "2,49" "3,36"
|
||||
contact card qr code generator EUR 50 0% 0% Hoch 89 "1,68" "4,94"
|
||||
qr printing EUR 500 0% 0% Mittel 46 "0,74" "7,53"
|
||||
qr for business EUR 5000 0% 0% Hoch 97 "2,57" "7,95"
|
||||
permanent qr code generator free EUR 500 0% 900% Hoch 85 "1,03" "3,57"
|
||||
free menu qr code EUR 50 0% 0% Hoch 97 "1,94" "4,53"
|
||||
generate qr code for a url EUR 50 0% 0% Hoch 94 "2,17" "5,95"
|
||||
manage qr codes EUR 500 0% -90% Niedrig 30 "2,11" "18,77"
|
||||
qr generator custom EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
|
||||
qr code to phone number EUR 50 0% 0% Hoch 75 "0,74" "3,16"
|
||||
customer qr code EUR 50 0% 0% Mittel 53 "1,80" "3,72"
|
||||
website url qr code generator EUR 50 0% 0% Hoch 77 "1,65" "4,23"
|
||||
square barcode generator EUR 500 0% 0% Mittel 45 "0,84" "8,47"
|
||||
website to create qr code EUR 50 0% 0% Hoch 87 "1,89" "4,62"
|
||||
scan barcode generator EUR 500 0% 0% Niedrig 27 "0,84" "5,11"
|
||||
obtain a qr code EUR 50000 -90% 0% Hoch 82 "0,89" "3,63"
|
||||
qr code generator for my website EUR 500 0% 0% Hoch 87 "4,10" "10,77"
|
||||
generate your qr code EUR 500 0% 0% Hoch 69 "1,35" "5,19"
|
||||
generate qr code from url free EUR 50 0% 0% Hoch 84 "0,38" "3,93"
|
||||
create qr code for menu free EUR 50 0% ∞ Hoch 86 "2,03" "5,10"
|
||||
qr business EUR 5000 0% 0% Hoch 97 "2,57" "7,95"
|
||||
qr code generator site EUR 50000 0% 0% Niedrig 17 "1,88" "6,16"
|
||||
code create EUR 50 -90% 0% Niedrig 3 "0,62" "6,98"
|
||||
dynamic codes EUR 500 0% 0% Niedrig 12 "0,78" "4,21"
|
||||
qr code analytics free EUR 50 0% 0% Hoch 86 "1,32" "5,57"
|
||||
free url to qr code generator EUR 50 0% 0% Hoch 91 "0,94" "3,65"
|
||||
personalized qr code generator EUR 50 0% 0% Hoch 90 "1,75" "6,74"
|
||||
custom logo qr code generator EUR 500 0% 0% Hoch 68 "2,73" "7,71"
|
||||
restaurant qr EUR 500 0% 0% Hoch 80 "1,61" "11,55"
|
||||
generate facebook qr code EUR 5000 -90% 0% Niedrig 19 "1,26" "4,10"
|
||||
qr contact card generator EUR 500 0% 0% Mittel 46 "2,35" "6,17"
|
||||
free qr generator code EUR 50 0% 0% Hoch 90 "1,69" "4,10"
|
||||
dynamic url qr code EUR 50 0% 0% Hoch 82 "5,45" "18,45"
|
||||
free qr code analytics EUR 50 0% 0% Hoch 86 "1,32" "5,57"
|
||||
generate qr code for phone number EUR 50 0% 0% Hoch 79 "0,76" "3,37"
|
||||
free qr code generator and tracking EUR 500 -90% 0% Hoch 80 "2,43" "9,97"
|
||||
generate unique qr code EUR 500 0% 0% Mittel 57 "1,51" "4,32"
|
||||
youtube qr code generator free EUR 50 0% 0% Hoch 96 "1,21" "3,63"
|
||||
customize qr code generator EUR 50 0% 0% Hoch 83 "1,16" "6,79"
|
||||
make a qr scan code EUR 50 0% 0% Hoch 88 "1,27" "3,71"
|
||||
create a qr code for location EUR 50 0% 0% Hoch 100 "1,91" "3,60"
|
||||
url to qr generator EUR 50 0% 0% Hoch 89 "0,20" "9,36"
|
||||
business qr EUR 5000 0% 0% Hoch 97 "2,57" "7,95"
|
||||
edit a qr code EUR 500 0% 0% Mittel 37 "0,90" "6,55"
|
||||
generate qr codes in bulk EUR 50 0% 0% Hoch 100 "2,07" "8,02"
|
||||
qr code generator freeware EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
|
||||
automated qr code generator EUR 50 0% 0% Hoch 86 "0,93" "3,18"
|
||||
create qr code to email EUR 50 0% 0% Hoch 82 "0,86" "4,06"
|
||||
free png qr code generator EUR 50 0% 0% Hoch 88 "1,55" "5,87"
|
||||
free qr code generator for url EUR 50 0% 0% Hoch 89 "1,51" "4,10"
|
||||
create a qr code from website EUR 50 0% 0% Hoch 77 "2,58" "6,51"
|
||||
qr code qr EUR 5000 0% 0% Niedrig 0 "1,03" "3,01"
|
||||
make qr code generator free EUR 500 0% 0% Hoch 83 "1,51" "3,63"
|
||||
qr code generator custom logo EUR 500 0% 0% Hoch 68 "2,73" "7,71"
|
||||
make your qr code free EUR 50 0% 0% Hoch 79 "1,79" "4,10"
|
||||
free qr business cards EUR 500 -90% 0% Hoch 97 "1,92" "4,84"
|
||||
create qr barcode free EUR 500 0% 0% Hoch 87 "1,28" "4,10"
|
||||
qr code generator barcode EUR 50 0% 0% Mittel 43 "0,97" "4,06"
|
||||
free sms qr code generator EUR 50 0% 0% Niedrig 32 "0,81" "3,03"
|
||||
difference between dynamic and static qr code EUR 50 0% 0% Hoch 70 "0,23" "5,71"
|
||||
qr code generator free for phone number EUR 50 0% ∞ Hoch 100 "0,37" "3,63"
|
||||
creating scan codes EUR 50000 0% 0% Hoch 84 "1,68" "4,83"
|
||||
create scan code free EUR 500 0% 0% Hoch 87 "1,28" "4,10"
|
||||
free qr code generator for vcard EUR 500 0% 0% Hoch 81 "1,30" "4,00"
|
||||
qr code generator for contact card EUR 500 0% 0% Mittel 46 "2,35" "6,17"
|
||||
qr contact code generator EUR 500 0% 0% Hoch 75 "1,32" "4,73"
|
||||
create own qr code free EUR 50 0% 0% Hoch 85 "0,87" "4,15"
|
||||
qr to code EUR 50 0% 0% Niedrig 21 "1,00" "3,78"
|
||||
free branded qr code generator EUR 50 0% 0% Hoch 100 "1,81" "3,52"
|
||||
qr code free tracking EUR 500 0% 0% Hoch 73 "1,62" "9,39"
|
||||
free qr code generator unlimited EUR 50 0% 0% Hoch 85 "1,08" "3,27"
|
||||
create your own free qr code EUR 500 0% 0% Hoch 86 "1,43" "4,11"
|
||||
customize a qr code EUR 5000 0% 0% Mittel 57 "1,83" "6,10"
|
||||
modify qr code EUR 500 0% 0% Mittel 37 "0,90" "6,55"
|
||||
create youtube qr code EUR 50 0% 0% Hoch 71 "0,86" "3,17"
|
||||
vcard qr free EUR 50 0% 0% Hoch 95 "1,56" "3,63"
|
||||
build qr codes EUR 50 -90% 0% Hoch 89 "0,95" "4,10"
|
||||
create qr code free from url EUR 500 0% 900% Hoch 89 "1,74" "4,85"
|
||||
barcode and qr code generator EUR 50 0% 0% Mittel 43 "0,97" "4,06"
|
||||
make free qr EUR 50 0% 0% Hoch 89 "0,85" "4,10"
|
||||
digital restaurant menu qr code EUR 50 0% 0% Hoch 95 "1,68" "5,15"
|
||||
qr code generator for EUR 50 0% 0% Hoch 96 "0,93" "3,00"
|
||||
make qr barcode EUR 50000 0% 0% Hoch 72 "0,71" "3,34"
|
||||
generate a qr code from a url EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
|
||||
generator free EUR 500 0% 0% Niedrig 16 "0,82" "5,79"
|
||||
qr campaign EUR 50 0% -90% Niedrig 19 "1,45" "10,66"
|
||||
free qr code editor EUR 50 0% 0% Hoch 75 "1,32" "3,18"
|
||||
square codes EUR 5000 0% 0% Niedrig 5 "0,83" "3,42"
|
||||
free qr code for my business EUR 50 0% 0% Hoch 90 "2,15" "4,10"
|
||||
generate qr code in bulk EUR 50 0% 0% Hoch 100 "2,07" "8,02"
|
||||
create custom qr codes free EUR 50 0% 0% Hoch 100 "2,23" "6,61"
|
||||
smart qr codes EUR 500 900% 900% Mittel 36 "1,13" "6,17"
|
||||
create qr code for url free EUR 50 0% 0% Hoch 90 "1,51" "4,86"
|
||||
qr code with brand logo EUR 50 0% 0% Hoch 88 "2,39" "4,41"
|
||||
barcode to qr code generator EUR 50 0% 0% Niedrig 27 "1,89" "8,80"
|
||||
i qr code EUR 50 0% 0% Niedrig 11 "1,25" "3,95"
|
||||
qr code generator with logo for free EUR 500 0% 0% Hoch 80 "1,31" "4,47"
|
||||
qr code generator no tracking EUR 50 0% 0% Hoch 76 "0,96" "3,93"
|
||||
qr code unlimited EUR 500 0% 0% Mittel 66 "1,00" "6,13"
|
||||
csv qr code generator EUR 50 0% 0% Mittel 65 "1,02" "5,95"
|
||||
design qr code free EUR 50 0% 0% Hoch 97 "1,45" "4,05"
|
||||
qr code generator card EUR 50 0% 0% Hoch 75 "1,26" "3,70"
|
||||
qr design generator EUR 500 0% 0% Niedrig 32 "0,95" "3,36"
|
||||
qr code permanent generator EUR 50 0% 0% Hoch 74 "0,56" "5,09"
|
||||
free generate qr code for url EUR 50 0% 0% Mittel 48 "1,27" "3,19"
|
||||
qr code i EUR 50 0% 0% Niedrig 11 "1,25" "3,95"
|
||||
every qr code EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
|
||||
view qr code EUR 50 0% 0% Niedrig 13 "0,65" "3,23"
|
||||
code creation EUR 50 -90% 0% Niedrig 12 "2,14" "5,68"
|
||||
create own qr code generator EUR 50 0% -90% Hoch 79 "1,21" "3,71"
|
||||
credit card qr code EUR 50 0% 0% Niedrig 7 "2,64" "9,81"
|
||||
digital qr codes EUR 500 -90% 0% Mittel 63 "1,15" "4,49"
|
||||
qr generator for url EUR 50 0% 0% Hoch 91 "1,10" "7,17"
|
||||
qr code bulk generator free EUR 50 0% 0% Hoch 95 "0,74" "3,18"
|
||||
dynamic barcode EUR 50 0% 0% Niedrig 33 "1,44" "5,12"
|
||||
event qr EUR 500 0% 0% Mittel 43 "1,48" "7,61"
|
||||
custom code generator EUR 50 0% 0% Niedrig 32 "1,79" "8,74"
|
||||
qr codes marketing EUR 500 0% 0% Niedrig 33 "1,61" "10,10"
|
||||
recommended qr code generator EUR 5000 0% 0% Hoch 78 "1,63" "8,36"
|
||||
create a scan qr code EUR 50 0% 0% Hoch 96 "2,22" "4,68"
|
||||
qr code with vcard EUR 5000 0% 0% Hoch 74 "0,97" "3,63"
|
||||
make a qr code for text EUR 50 0% 0% Hoch 71 "1,28" "3,34"
|
||||
logo qr generator EUR 5000 0% 0% Mittel 64 "1,51" "5,12"
|
||||
contact card qr generator EUR 50 0% 0% Hoch 82 "1,46" "3,63"
|
||||
qr barcode free EUR 50000 0% 0% Hoch 86 "1,25" "3,63"
|
||||
qr code scan device EUR 500 0% -90% Hoch 100 "0,37" "3,50"
|
||||
all qr codes EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
|
||||
cost for qr code EUR 500 0% 0% Mittel 58 "0,99" "5,66"
|
||||
free qr tracking EUR 50 0% 0% Hoch 86 "1,49" "8,90"
|
||||
generator for free EUR 500 0% 0% Niedrig 16 "0,82" "5,79"
|
||||
create paypal qr code EUR 50 0% 0% Mittel 36 "1,79" "4,70"
|
||||
generate qr code of url EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
|
||||
generate paypal qr code EUR 50 0% 0% Niedrig 30 "1,54" "4,76"
|
||||
email qr code free EUR 50 0% 0% Hoch 68 "0,50" "3,48"
|
||||
cost of qr codes EUR 500 0% 0% Mittel 58 "0,99" "5,66"
|
||||
the best qr code generator free EUR 50 0% 0% Hoch 82 "1,00" "3,63"
|
||||
qr code brand EUR 500 0% 0% Niedrig 4 "1,55" "8,10"
|
||||
qr all EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
|
||||
create qr reader EUR 50 0% 0% Hoch 82 "1,28" "3,60"
|
||||
generate barcode qr EUR 50 0% 0% Mittel 43 "0,97" "4,06"
|
||||
create barcode url EUR 50 0% 0% Hoch 77 "0,83" "3,43"
|
||||
logos in qr codes EUR 5000 0% 0% Hoch 86 "1,20" "4,78"
|
||||
create a paypal qr code EUR 50 0% 0% Mittel 45 "0,95" "5,00"
|
||||
qr code save EUR 50 0% 0% Niedrig 19 "0,83" "3,47"
|
||||
make a qr scanner EUR 500 0% 0% Mittel 56 "0,99" "4,22"
|
||||
qr code freeware EUR 5000 0% 0% Hoch 84 "0,94" "3,33"
|
||||
barcode scan code EUR 500 0% 0% Hoch 97 "0,81" "3,80"
|
||||
qr code digital EUR 50 0% 0% Mittel 45 "0,59" "6,18"
|
||||
qr code from vcard EUR 5000 0% 0% Hoch 74 "0,97" "3,63"
|
||||
qr generator vcard free EUR 500 0% 0% Hoch 81 "1,30" "4,00"
|
||||
make cool qr code EUR 50 0% 0% Hoch 83 "1,45" "3,96"
|
||||
all qr EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
|
||||
qr do EUR 50 0% 0% Niedrig 15 "0,85" "4,10"
|
||||
qr events EUR 500 0% 0% Mittel 43 "1,48" "7,61"
|
||||
call qr EUR 50 0% 0% Mittel 37 "1,00" "4,12"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Keyword Stats 2026-01-22 at 11_03_27
|
||||
1. Januar 2025 - 31. Dezember 2025
|
||||
Keyword Currency Avg. monthly searches Änderung über drei Monate Änderung im Jahresvergleich Competition Competition (indexed value) Top of page bid (low range) Top of page bid (high range) Ad impression share Organic impression share Organic average position In account? In plan? Searches: Jan 2025 Searches: Feb 2025 Searches: Mar 2025 Searches: Apr 2025 Searches: May 2025 Searches: Jun 2025 Searches: Jul 2025 Searches: Aug 2025 Searches: Sep 2025 Searches: Oct 2025 Searches: Nov 2025 Searches: Dec 2025
|
||||
custom qr code generator EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
|
||||
qr barcode EUR 50000 0% 900% Niedrig 3 "0,42" "1,93"
|
||||
bulk qr code generator EUR 5000 0% 0% Niedrig 13 "0,69" "3,63"
|
||||
bar code generator EUR 500000 0% 0% Niedrig 3 "0,67" "2,58"
|
||||
qr code generator for business EUR 500 0% 900% Niedrig 17 "1,81" "7,01"
|
||||
this is a qr code EUR 5000 0% 0% Niedrig 9 "0,47" "1,33"
|
||||
get a qr code for business EUR 50 0% 0% Niedrig 20
|
||||
a qr code EUR 500 0% 0% Niedrig 23 "0,49" "2,01"
|
||||
qr dynamic code generator EUR 50 -100% -100% Unbekannt
|
||||
facebook qr code generator EUR 5000 -90% 0% Niedrig 19 "1,26" "4,10"
|
||||
whatsapp qr code generator EUR 500 0% 0% Niedrig 19 "0,51" "1,89"
|
||||
qr tracking EUR 500 0% 0% Niedrig 11 "1,66" "12,51"
|
||||
custom qr generator EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
|
||||
create qr code with tracking EUR 50 0% 0% Niedrig 18 "3,65" "7,01"
|
||||
qr code generator sign in EUR 500 -90% -90% Niedrig 6
|
||||
make custom qr code EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
|
||||
qr code qr code EUR 500 -90% -90% Niedrig 27 "0,26" "1,28"
|
||||
free barcode EUR 5000 0% 0% Niedrig 6 "0,64" "3,16"
|
||||
youtube qr code EUR 5000 0% 0% Niedrig 16 "0,52" "2,21"
|
||||
paypal qr code generator EUR 500 0% 0% Niedrig 19 "0,66" "2,58"
|
||||
code qr code EUR 500 0% 0% Niedrig 18 "0,29" "1,03"
|
||||
qr code to text EUR 500 0% 0% Niedrig 4 "0,50" "2,20"
|
||||
code to qr code EUR 50 0% 0% Niedrig 30 "0,43" "1,51"
|
||||
qr code location generator EUR 50 0% 0% Niedrig 17
|
||||
restaurant menu qr code generator EUR 50 0% 0% Niedrig 0
|
||||
bulk qr code EUR 500 0% 0% Niedrig 13 "0,07" "2,85"
|
||||
qr code instagram generator EUR 50 0% 0% Niedrig 29 "0,71" "1,75"
|
||||
qr codes pro EUR 500 0% 0% Niedrig 28 "1,23" "8,93"
|
||||
facebook qr code generator free EUR 500 0% 0% Niedrig 15 "1,27" "3,63"
|
||||
generate website qr code EUR 50000 0% 0% Niedrig 17 "1,88" "6,16"
|
||||
paypal qr code EUR 5000 0% 0% Niedrig 9 "1,03" "6,79"
|
||||
unique qr codes EUR 500 0% 0% Niedrig 30 "1,21" "5,02"
|
||||
the qr code EUR 500 0% 0% Niedrig 23 "0,66" "2,21"
|
||||
scan location qr code EUR 50 0% 0% Niedrig 24
|
||||
cool qr codes EUR 500 0% 0% Niedrig 25 "1,16" "3,82"
|
||||
qr code for EUR 500 0% 0% Niedrig 12 "1,04" "3,53"
|
||||
to create qr code EUR 50 -100% -100% Unbekannt
|
||||
qr code for phone number EUR 500 0% 0% Niedrig 28 "0,70" "2,56"
|
||||
qr wifi EUR 500 0% 0% Niedrig 2 "0,12" "1,00"
|
||||
with qr code EUR 50 0% 0% Niedrig 22 "1,00" "3,93"
|
||||
free bulk qr code generator EUR 500 900% 900% Niedrig 27 "0,91" "2,85"
|
||||
cost of qr code generator EUR 50 -100% -100% Unbekannt
|
||||
qr code analytics tracking EUR 50 0% 0% Niedrig 9
|
||||
free qr code for restaurant menu EUR 50 0% -100% Unbekannt
|
||||
qr code time tracking EUR 50 0% 0% Niedrig 0
|
||||
qr code with text EUR 500 0% 0% Niedrig 15 "0,13" "1,40"
|
||||
free qr code menu EUR 50 0% 0% Niedrig 29 "1,57" "4,96"
|
||||
qr code generator for restaurant menu EUR 500 0% 0% Niedrig 5
|
||||
difference between static and dynamic qr code EUR 50 0% 0% Niedrig 24 "0,32" "10,47"
|
||||
bulk qr generator EUR 5000 0% 0% Niedrig 13 "0,69" "3,63"
|
||||
barcode code generator EUR 500000 0% 0% Niedrig 3 "0,67" "2,58"
|
||||
generate dynamic qr code free EUR 50 -100% -100% Unbekannt
|
||||
qr code contact generator free EUR 50 0% -100% Unbekannt
|
||||
scan qr code for location EUR 50 0% 0% Niedrig 17
|
||||
ai qr code EUR 500 0% 0% Niedrig 14 "0,76" "4,66"
|
||||
buy dynamic qr code EUR 50 ∞ 0% Niedrig 25 "1,87" "12,81"
|
||||
sms qr code EUR 500 0% 0% Niedrig 17 "0,60" "3,35"
|
||||
dynamic code generator EUR 50 0% 0% Niedrig 17 "3,82" "15,62"
|
||||
qr code restaurant menu free EUR 50 0% -100% Unbekannt
|
||||
vcard qr code generator with logo EUR 50 -100% -100% Unbekannt
|
||||
bulk qr code generator free EUR 500 900% 900% Niedrig 27 "0,91" "2,85"
|
||||
sms qr code generator EUR 500 0% 0% Niedrig 18 "0,66" "3,11"
|
||||
phone qr code EUR 500 0% 0% Niedrig 28 "0,45" "1,61"
|
||||
create your dynamic qr code EUR 50 -100% -100% Unbekannt
|
||||
qr code as a business card EUR 50 -100% -100% Unbekannt
|
||||
generate free barcode EUR 50000 0% 0% Niedrig 5 "0,67" "2,52"
|
||||
qr code barcode generator EUR 500 0% 0% Niedrig 15 "0,58" "1,51"
|
||||
bulk qr code generator with logo EUR 50 0% 0% Niedrig 0
|
||||
qr restaurant EUR 500 0% 0% Niedrig 7
|
||||
sign up qr code EUR 50 0% 0% Niedrig 23 "1,81" "5,80"
|
||||
create qr code menu free EUR 50 -100% -100% Unbekannt
|
||||
bulk qr code generator excel EUR 50 0% 0% Niedrig 21
|
||||
qr code options EUR 50 0% 900% Niedrig 15 "1,10" "2,91"
|
||||
qr bulk generator EUR 5000 0% 0% Niedrig 13 "0,69" "3,63"
|
||||
qr code s EUR 500 0% 0% Niedrig 27 "0,57" "4,93"
|
||||
qr code to qr code EUR 50 ∞ ∞ Niedrig 14
|
||||
log in qr code generator EUR 5000 0% 0% Niedrig 15 "0,67" "3,08"
|
||||
create whatsapp qr code EUR 500 0% 0% Niedrig 19 "0,51" "1,89"
|
||||
qr code in EUR 50 0% 0% Niedrig 22 "0,31" "1,88"
|
||||
twitter qr code generator EUR 50 0% 0% Niedrig 4
|
||||
care code EUR 500 0% 0% Niedrig 2
|
||||
create qr code gratuit EUR 50 -100% -100% Unbekannt
|
||||
restaurants with qr codes EUR 50 0% 0% Niedrig 11
|
||||
master qr EUR 50 0% ∞ Niedrig 0
|
||||
manage qr codes EUR 500 0% -90% Niedrig 30 "2,11" "18,77"
|
||||
qr generator custom EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
|
||||
qr code generator it EUR 50 0% 0% Niedrig 11
|
||||
bulk qr EUR 500 0% 0% Niedrig 13 "0,07" "2,85"
|
||||
master qr code EUR 50 0% 0% Niedrig 2
|
||||
qr code generator in bulk EUR 50 0% 0% Niedrig 7
|
||||
scan barcode generator EUR 500 0% 0% Niedrig 27 "0,84" "5,11"
|
||||
static qr and dynamic qr EUR 50 -100% -100% Unbekannt
|
||||
barcode make EUR 5000 900% 900% Niedrig 15 "0,64" "2,78"
|
||||
qr code generator site EUR 50000 0% 0% Niedrig 17 "1,88" "6,16"
|
||||
code create EUR 50 -90% 0% Niedrig 3 "0,62" "6,98"
|
||||
dynamic codes EUR 500 0% 0% Niedrig 12 "0,78" "4,21"
|
||||
scan qr code for restaurant menu EUR 50 0% 0% Unbekannt
|
||||
qr code tracking analytics EUR 50 0% 0% Niedrig 0
|
||||
generate facebook qr code EUR 5000 -90% 0% Niedrig 19 "1,26" "4,10"
|
||||
create qr code location EUR 50 -100% 0% Unbekannt
|
||||
qr code of location EUR 50 -100% -100% Unbekannt
|
||||
qr code with EUR 50 0% 0% Niedrig 7
|
||||
code to qr EUR 50 0% 0% Niedrig 30 "0,43" "1,51"
|
||||
make your own qr code for business EUR 50 0% -100% Unbekannt
|
||||
scan your qr code EUR 50 0% 0% Niedrig 27 "0,56" "2,47"
|
||||
for qr code generator EUR 50 -100% -100% Unbekannt
|
||||
qr code what is qr EUR 5000 0% 0% Niedrig 15 "0,05" "0,64"
|
||||
qr code with location EUR 50 -100% -100% Unbekannt
|
||||
qr code qr EUR 5000 0% 0% Niedrig 0 "1,03" "3,01"
|
||||
qr code generator bulk free EUR 50 0% 0% Niedrig 24
|
||||
qr code and EUR 500 0% 0% Niedrig 18 "0,29" "1,03"
|
||||
qr number EUR 500 0% 900% Niedrig 5 "0,07" "0,94"
|
||||
credit card qr code generator EUR 50 0% -100% Unbekannt
|
||||
about qr code generator EUR 50 0% 0% Unbekannt
|
||||
whatsapp qr generator EUR 500 0% 0% Niedrig 19 "0,51" "1,89"
|
||||
generate to qr code EUR 50 -100% -100% Unbekannt
|
||||
qr codes work EUR 500 0% 0% Niedrig 11 "0,63" "2,06"
|
||||
qr to code EUR 50 0% 0% Niedrig 21 "1,00" "3,78"
|
||||
in qr code EUR 50 0% 0% Niedrig 22 "0,31" "1,88"
|
||||
create qr business card free EUR 50 -100% -100% Unbekannt
|
||||
qr code it EUR 50 0% 0% Niedrig 29 "1,21" "2,25"
|
||||
qr marketing EUR 50 0% 0% Niedrig 3
|
||||
it qr code EUR 50 0% 0% Niedrig 5
|
||||
and qr code EUR 500 0% 0% Niedrig 18 "0,29" "1,03"
|
||||
qr code is EUR 50 0% 0% Niedrig 17 "0,09" "1,83"
|
||||
bulk code generator EUR 50 0% 0% Niedrig 5
|
||||
qr code calculator EUR 50 0% 0% Niedrig 23
|
||||
qr bulk EUR 500 0% 0% Niedrig 13 "0,07" "2,85"
|
||||
generator qr barcode EUR 50 -100% -100% Unbekannt
|
||||
generator free EUR 500 0% 0% Niedrig 16 "0,82" "5,79"
|
||||
code generator code EUR 50 ∞ 0% Niedrig 14
|
||||
qr number generator EUR 50 0% 0% Niedrig 14
|
||||
qr code generator bulk create EUR 50 -100% -100% Unbekannt
|
||||
qr campaign EUR 50 0% -90% Niedrig 19 "1,45" "10,66"
|
||||
square codes EUR 5000 0% 0% Niedrig 5 "0,83" "3,42"
|
||||
generator create EUR 500 0% 0% Niedrig 1
|
||||
code for qr code EUR 50 ∞ 0% Niedrig 14
|
||||
qr bulk code generator EUR 50 0% 0% Niedrig 11
|
||||
qr code generator with location EUR 50 -100% 0% Unbekannt
|
||||
qr code scanner qr code generator EUR 50 ∞ 0% Niedrig 29
|
||||
youtube qr EUR 5000 0% 0% Niedrig 16 "0,52" "2,21"
|
||||
qr code generator custom design EUR 50 -100% -100% Unbekannt
|
||||
your code generator EUR 50 0% -100% Unbekannt
|
||||
free dynamic code generator EUR 50 0% -100% Unbekannt
|
||||
qr scan code free EUR 50 0% 0% Niedrig 0
|
||||
edit qr EUR 50 0% 0% Niedrig 2
|
||||
qr code scan qr code EUR 50 0% 0% Niedrig 25
|
||||
sozdat qr code EUR 50 -100% 0% Unbekannt
|
||||
barcode to qr code generator EUR 50 0% 0% Niedrig 27 "1,89" "8,80"
|
||||
qr codes that work EUR 500 0% 0% Niedrig 11 "0,63" "2,06"
|
||||
i qr code EUR 50 0% 0% Niedrig 11 "1,25" "3,95"
|
||||
free barcode code generator EUR 50000 0% 0% Niedrig 5 "0,67" "2,52"
|
||||
work qr code EUR 500 0% 0% Niedrig 11 "0,63" "2,06"
|
||||
qr code on device EUR 50 0% 0% Niedrig 1
|
||||
barcode code generator free EUR 50 0% -90% Niedrig 6 "0,20" "2,34"
|
||||
device qr code EUR 50 0% 0% Niedrig 22 "0,58" "2,52"
|
||||
code barcode EUR 500 0% 900% Niedrig 10 "0,19" "1,55"
|
||||
all qr code generator EUR 50 0% 0% Unbekannt
|
||||
advanced qr code EUR 50 0% 0% Niedrig 2
|
||||
qr generator bulk EUR 50 0% 0% Niedrig 14
|
||||
information qr code generator EUR 50 -100% -100% Unbekannt
|
||||
device qr EUR 50 0% -100% Unbekannt
|
||||
type qr code EUR 50 0% 0% Niedrig 9 "0,52" "1,66"
|
||||
qr edit EUR 50 0% 0% Niedrig 21
|
||||
no qr codes EUR 500 0% 0% Niedrig 3 "0,26" "1,28"
|
||||
qr code na EUR 50 0% 0% Unbekannt
|
||||
qr code & EUR 50 0% ∞ Niedrig 0
|
||||
qr code a EUR 500 0% 0% Niedrig 23 "0,49" "2,01"
|
||||
qr generator location EUR 50 ∞ 0% Niedrig 0
|
||||
qr code an EUR 50 0% 0% Niedrig 19
|
||||
qr code on EUR 50 0% 0% Niedrig 12
|
||||
qr code i EUR 50 0% 0% Niedrig 11 "1,25" "3,95"
|
||||
qr code of EUR 50 0% 0% Niedrig 9 "0,50" "2,07"
|
||||
qr code on this phone EUR 500 0% 0% Niedrig 28 "0,45" "1,61"
|
||||
your qr EUR 50 0% 0% Niedrig 20
|
||||
qr code what is EUR 5000 0% 0% Niedrig 15 "0,05" "0,64"
|
||||
qr code generator vcard business card EUR 50 -100% -100% Unbekannt
|
||||
every qr code EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
|
||||
at qr code EUR 50 0% 0% Niedrig 4
|
||||
qr code what is it EUR 50 0% 0% Niedrig 17 "0,05" "0,44"
|
||||
qr code where is it EUR 50 0% 0% Niedrig 0
|
||||
view qr code EUR 50 0% 0% Niedrig 13 "0,65" "3,23"
|
||||
code creation EUR 50 -90% 0% Niedrig 12 "2,14" "5,68"
|
||||
qr code from EUR 50 0% 0% Niedrig 14 "0,58" "1,45"
|
||||
write qr code EUR 50 0% 0% Niedrig 0
|
||||
credit card qr code EUR 50 0% 0% Niedrig 7 "2,64" "9,81"
|
||||
qr code about EUR 50 0% 0% Niedrig 18
|
||||
www com qr code EUR 50 0% 0% Unbekannt
|
||||
this qr code EUR 50 0% 0% Niedrig 8
|
||||
by qr code EUR 50 0% 0% Niedrig 19
|
||||
qr code to location EUR 50 -100% -100% Unbekannt
|
||||
location qr generator EUR 50 0% 0% Niedrig 0
|
||||
business card qr code generator with logo EUR 50 0% 0% Niedrig 0
|
||||
qr work EUR 50 900% 900% Niedrig 1
|
||||
generate bulk qr code from excel EUR 50 ∞ ∞ Niedrig 14
|
||||
any qr code EUR 500 0% 0% Niedrig 0
|
||||
generate qr code bulk EUR 50 -100% 0% Unbekannt
|
||||
qr code qr scanner EUR 500 0% 0% Niedrig 0
|
||||
get qr code for location EUR 50 -100% -100% Unbekannt
|
||||
scan code for EUR 50 0% 0% Niedrig 19
|
||||
generator barcode qr EUR 50 0% -100% Unbekannt
|
||||
free qr code for location EUR 50 -100% 0% Unbekannt
|
||||
open a qr code EUR 500 0% 0% Niedrig 23 "0,41" "1,51"
|
||||
phone qr EUR 500 0% 0% Niedrig 28 "0,45" "1,61"
|
||||
barcode to qr generator EUR 50 -100% -100% Unbekannt
|
||||
static code generator EUR 50 0% 0% Niedrig 26
|
||||
location qr code creation EUR 50 0% 0% Unbekannt
|
||||
location scan qr code EUR 50 ∞ ∞ Niedrig 0
|
||||
create location qr code free EUR 50 -100% 0% Unbekannt
|
||||
generator qr code vcard EUR 50 0% 0% Unbekannt
|
||||
bulk generator EUR 50 0% 0% Niedrig 4 "0,27" "1,33"
|
||||
qr code of this device EUR 50 0% ∞ Niedrig 20
|
||||
qr code generator location free EUR 50 0% 0% Niedrig 0
|
||||
qr location code EUR 50 0% -100% Unbekannt
|
||||
account qr code EUR 50 0% 0% Niedrig 13
|
||||
qr code to code EUR 50 0% 0% Niedrig 0
|
||||
free qr scan generator EUR 50 0% 0% Niedrig 26 "0,89" "1,51"
|
||||
dynamic qr code generator with logo EUR 50 0% 0% Niedrig 0
|
||||
qr code to barcode generator EUR 50 0% 0% Niedrig 5
|
||||
qr code of a location EUR 50 0% -100% Unbekannt
|
||||
the code generator EUR 50 0% 0% Niedrig 27
|
||||
create qr code of location EUR 50 0% -100% Unbekannt
|
||||
bulk qr barcode generator EUR 50 0% 0% Niedrig 3
|
||||
qr hunt EUR 50 0% 0% Niedrig 4
|
||||
bulk qr generator free EUR 50 -100% -100% Unbekannt
|
||||
dynamic qr code display EUR 50 900% 900% Niedrig 6
|
||||
location qr code free EUR 50 0% -100% Unbekannt
|
||||
location qr scanner EUR 50 -100% 0% Unbekannt
|
||||
qr quotes EUR 500 0% 0% Niedrig 5 "0,61" "2,17"
|
||||
qr c9de EUR 50 -90% 0% Niedrig 2
|
||||
you are code generator EUR 50 0% -100% Unbekannt
|
||||
make a qr code for location EUR 50 -100% -100% Unbekannt
|
||||
qr code generator from csv EUR 50 0% 0% Niedrig 0
|
||||
generate qr code from barcode EUR 50 0% 0% Niedrig 29
|
||||
make generator EUR 500 0% 0% Niedrig 9 "0,46" "2,62"
|
||||
all qr codes EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
|
||||
bulk qr code generator with logo free EUR 50 0% ∞ Unbekannt
|
||||
whatsapp qr code business card EUR 50 -100% 0% Unbekannt
|
||||
qr code with phone EUR 500 0% 0% Niedrig 28 "0,45" "1,61"
|
||||
generator for free EUR 500 0% 0% Niedrig 16 "0,82" "5,79"
|
||||
generate url from qr code EUR 500 -90% 0% Niedrig 4 "2,05" "2,69"
|
||||
barcode and qr codes EUR 50000 0% 900% Niedrig 3 "0,42" "1,93"
|
||||
qr code menu restaurant free EUR 50 0% 0% Unbekannt
|
||||
qr code features EUR 500 0% 900% Niedrig 2 "0,33" "1,29"
|
||||
generate qr code for location free EUR 50 0% -100% Unbekannt
|
||||
location in qr code EUR 50 0% 0% Unbekannt
|
||||
generate qr code by url EUR 50 -100% -100% Unbekannt
|
||||
qr code required EUR 50 0% 0% Niedrig 11 "0,94" "2,61"
|
||||
qr code from phone EUR 50 0% 0% Niedrig 11 "0,49" "1,03"
|
||||
location qr code scan EUR 50 -100% -100% Unbekannt
|
||||
no qr EUR 500 0% 0% Niedrig 3 "0,26" "1,28"
|
||||
qr code scan for location EUR 50 0% -100% Unbekannt
|
||||
generate url to qr code EUR 50 -100% -100% Unbekannt
|
||||
get code from qr code EUR 50 0% 0% Niedrig 10
|
||||
scan the qr code for location EUR 50 ∞ ∞ Niedrig 0
|
||||
kod generator EUR 50 0% 0% Niedrig 0
|
||||
qr code in text EUR 50 0% 0% Niedrig 2
|
||||
restaurant menu scan code EUR 50 0% 0% Niedrig 0
|
||||
location qr code free generator EUR 50 0% 0% Unbekannt
|
||||
url from qr code EUR 50 0% 0% Niedrig 4
|
||||
scan tracking EUR 50 900% 0% Niedrig 24 "0,31" "2,42"
|
||||
qr code of this phone EUR 50 0% 0% Niedrig 0
|
||||
qr code brand EUR 500 0% 0% Niedrig 4 "1,55" "8,10"
|
||||
qr code in phone EUR 500 0% 0% Niedrig 28 "0,45" "1,61"
|
||||
www the qr code generator scan EUR 50 -100% 0% Unbekannt
|
||||
create qr code from barcode EUR 50 0% 0% Niedrig 29
|
||||
qr all EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
|
||||
bulk qr code barcode generator EUR 50 ∞ 0% Niedrig 0
|
||||
qr scan location EUR 50 0% 0% Niedrig 0
|
||||
qr code no EUR 500 0% 0% Niedrig 3 "0,26" "1,28"
|
||||
qr code that works EUR 500 0% 0% Niedrig 11 "0,63" "2,06"
|
||||
qr code randomizer EUR 5000 0% 0% Niedrig 13 "0,60" "1,71"
|
||||
qr code marketing campaigns EUR 50 0% 0% Niedrig 3
|
||||
qr code generator create your qr code for free EUR 50 -100% -100% Unbekannt
|
||||
account qr EUR 50 0% ∞ Niedrig 0
|
||||
qr code for credit card EUR 50 -100% -100% Unbekannt
|
||||
qr cost EUR 50 0% 0% Niedrig 5
|
||||
qr code on the phone EUR 50 0% 0% Niedrig 13
|
||||
scan qr code scan qr code EUR 50 0% 0% Niedrig 25
|
||||
qr kodlari EUR 50 -100% -100% Unbekannt
|
||||
qr code scan code EUR 50 0% 0% Niedrig 17
|
||||
scan by qr code EUR 50 0% 0% Niedrig 0
|
||||
3 qr code EUR 50 0% 0% Niedrig 0
|
||||
scan qr code location EUR 50 0% 0% Niedrig 17
|
||||
qr scanner in EUR 50 0% 0% Niedrig 18
|
||||
create qr code to whatsapp EUR 50 -100% -100% Unbekannt
|
||||
qr code on email EUR 50 0% 0% Niedrig 25
|
||||
create qr code for whatsapp free EUR 50 0% -100% Unbekannt
|
||||
make qr code of location EUR 50 -100% 0% Unbekannt
|
||||
qr code save EUR 50 0% 0% Niedrig 19 "0,83" "3,47"
|
||||
no to qr code EUR 50 0% -100% Unbekannt
|
||||
call qr code EUR 50000 0% 0% Niedrig 0 "0,57" "2,59"
|
||||
free barcode code EUR 500 0% 0% Niedrig 18 "0,65" "2,84"
|
||||
qr code for scan EUR 50 0% 0% Niedrig 14 "0,52" "1,56"
|
||||
bar code s EUR 50 0% 0% Niedrig 24 "1,26" "1,72"
|
||||
qr code as text EUR 500 0% 0% Niedrig 15 "0,13" "1,40"
|
||||
qr view EUR 50 0% 0% Niedrig 3
|
||||
qr code generator device EUR 50 0% 0% Niedrig 8
|
||||
qr scanner for EUR 50 0% 0% Niedrig 14 "0,52" "1,56"
|
||||
qr code generator full EUR 50 0% 0% Unbekannt
|
||||
qr code generator for visiting card free EUR 50 0% 0% Unbekannt
|
||||
qr coe3 EUR 50 -100% -100% Unbekannt
|
||||
qr text code EUR 50 0% 0% Niedrig 29
|
||||
scan qr free EUR 50 0% 0% Niedrig 25
|
||||
cole generator EUR 50 0% 0% Niedrig 24
|
||||
into qr code EUR 50 0% 0% Niedrig 22 "0,31" "1,88"
|
||||
qr code how does it work EUR 50 0% 0% Niedrig 25 "0,10" "0,52"
|
||||
any qr EUR 500 0% 0% Niedrig 0
|
||||
menu card qr code generator EUR 50 0% 0% Unbekannt
|
||||
url to code generator EUR 50 ∞ 0% Niedrig 14
|
||||
website qr scanner EUR 500 0% 0% Niedrig 6 "0,03" "1,77"
|
||||
all in qr code EUR 50 0% 0% Unbekannt
|
||||
all qr EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
|
||||
qr scanner location EUR 50 0% 0% Niedrig 0
|
||||
qr how to use EUR 50 0% 0% Niedrig 0
|
||||
qr scanner for location EUR 50 -100% 0% Unbekannt
|
||||
scan qr code for EUR 50 0% 0% Niedrig 11
|
||||
scan the qr code for EUR 50 0% 0% Niedrig 0
|
||||
scan this qr code for EUR 50 ∞ ∞ Niedrig 29
|
||||
the qr barcode generator EUR 50 -100% -100% Unbekannt
|
||||
trackable codes EUR 50 0% 0% Niedrig 0
|
||||
scan qr code in EUR 50 0% 0% Niedrig 0
|
||||
qr do EUR 50 0% 0% Niedrig 15 "0,86" "4,10"
|
||||
qr code login generator EUR 50 0% 0% Niedrig 16
|
||||
|
||||
@@ -66,7 +66,7 @@ PROMPT: Clean, modern hero image for a QR code for art galleries landing page. C
|
||||
|
||||
FILENAME: stadiums.png
|
||||
PROMPT: Clean, modern hero image for a QR code for stadiums and sports venues landing page. Aerial view of a large modern stadium at golden hour, dramatic scale, vibrant field, minimal composition. Professional, no text. Premium aesthetic.
|
||||
!
|
||||
|
||||
FILENAME: wedding-planners.png
|
||||
PROMPT: Clean, modern hero image for a QR code for wedding planners landing page. Elegant wedding reception venue setup with floral centerpieces, candlelight, white tablecloths, soft bokeh in background, romantic minimal composition. Professional, no text. Premium aesthetic.
|
||||
|
||||
|
||||
408
marketing/seo-outreach-top-20-emails.md
Normal file
@@ -0,0 +1,408 @@
|
||||
# SEO Outreach Emails for Top 20 qrmaster.net Targets
|
||||
|
||||
## Notes
|
||||
|
||||
- Use a real sender name and personal email.
|
||||
- Keep the signature plain.
|
||||
- One follow-up after 5-7 days is enough.
|
||||
- For weaker Tier 3 targets, send only if Tier 1 and Tier 2 are exhausted.
|
||||
|
||||
---
|
||||
|
||||
## 1. Mailchimp
|
||||
- URL: https://www.mailchimp.com/resources/startup-tools/
|
||||
- Contact: content@mailchimp.com
|
||||
- Subject: startup tools
|
||||
|
||||
Hi,
|
||||
|
||||
Your startup tools page is strong on software founders use to run growth, but it skips one offline-to-online tool that shows up constantly in real campaigns: dynamic QR codes.
|
||||
|
||||
Teams use them on flyers, packaging inserts, event signage, and direct mail when they need the destination to stay editable after print. That is the part most free QR generators do not handle well.
|
||||
|
||||
qrmaster.net gives you free dynamic codes to start, plus tracking and bulk creation if a team needs to scale.
|
||||
|
||||
Would that be worth considering for the list?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 2. Edutopia
|
||||
- URL: https://www.edutopia.org/article/make-digital-classroom-tools-work-for-you/
|
||||
- Contact: community@edutopia.org
|
||||
- Subject: classroom links
|
||||
|
||||
Hi,
|
||||
|
||||
Your piece on making digital classroom tools work is practical, especially around how teachers combine tools rather than add more noise.
|
||||
|
||||
One missing piece is the handoff from paper to digital. Teachers still use printed worksheets, wall stations, and take-home sheets, and QR codes are often the cleanest way to get students from paper to the right resource without typing links.
|
||||
|
||||
qrmaster.net is a simple QR tool with dynamic codes, so the destination can be updated later without reprinting the material.
|
||||
|
||||
Could that be a useful addition to the article?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 3. Zendesk
|
||||
- URL: https://www.zendesk.com/blog/startup-tools/
|
||||
- Contact: content@zendesk.com
|
||||
- Subject: startup stack
|
||||
|
||||
Hi,
|
||||
|
||||
Your startup tools post covers the usual operating stack well. One category I expected to see but did not was dynamic QR codes.
|
||||
|
||||
Founders end up using them for trade shows, one-pagers, packaging, retail counters, and printed onboarding material when they need a link that can still change after the asset is already out.
|
||||
|
||||
qrmaster.net is built around that use case, with dynamic destinations, scan analytics, and bulk creation when a team moves beyond one-off codes.
|
||||
|
||||
Would that fit the page?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 4. Eventbrite
|
||||
- URL: https://www.eventbrite.com/blog/free-event-planning-software/
|
||||
- Contact: press@eventbrite.com
|
||||
- Subject: event updates
|
||||
|
||||
Hi,
|
||||
|
||||
Your roundup of event planning software is useful, especially for people trying to avoid fragmented tools.
|
||||
|
||||
One practical gap: a QR tool for printed signage, schedules, check-in pages, menus, or speaker updates when details change after assets are already printed.
|
||||
|
||||
That is exactly where dynamic QR codes help. qrmaster.net lets event teams keep the printed code but update the destination later, which is useful when rooms, agendas, or landing pages change at the last minute.
|
||||
|
||||
Would that be worth adding to the resource list?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 5. Cvent
|
||||
- URL: https://www.cvent.com/en/blog/events/event-management-software-features
|
||||
- Contact: blog@cvent.com
|
||||
- Subject: event signage
|
||||
|
||||
Hi,
|
||||
|
||||
Your article on event management software features is grounded in actual event workflows, not generic feature talk.
|
||||
|
||||
One adjacent tool worth including is a dynamic QR code generator. Event teams use it for printed agendas, venue signage, exhibitor material, and check-in flows when the target page may need to change after print.
|
||||
|
||||
qrmaster.net was built for that kind of use: editable destinations, scan tracking, and bulk creation if an event needs many codes at once.
|
||||
|
||||
Would that be relevant for the piece?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 6. t3n
|
||||
- URL: https://t3n.de/news/kostenlose-tools-fuer-startups-608883/
|
||||
- Contact: redaktion@t3n.de
|
||||
- Subject: startup tools
|
||||
|
||||
Hallo,
|
||||
|
||||
eure Liste mit kostenlosen Tools für Startups deckt viele typische SaaS-Kategorien ab. Was darin noch fehlt, ist ein sinnvoller QR-Code-Use-Case für Teams, die auch offline unterwegs sind.
|
||||
|
||||
Startups nutzen QR-Codes inzwischen nicht nur auf Flyern, sondern auch auf Eventmaterial, Packaging, One-Pagern oder Print-Assets im Vertrieb. Relevant wird es vor allem dann, wenn sich die Zielseite nach dem Druck noch ändern können muss.
|
||||
|
||||
qrmaster.net ist genau dafür gebaut: dynamische QR-Codes, Tracking und bei Bedarf Bulk-Erstellung.
|
||||
|
||||
Wäre das eine sinnvolle Ergänzung für eure Liste?
|
||||
|
||||
Viele Grüße
|
||||
[Dein Name]
|
||||
|
||||
---
|
||||
|
||||
## 7. Gründerszene
|
||||
- URL: https://www.gruenderszene.de/business/startup-tools-marketing-vertrieb-it
|
||||
- Contact: redaktion@gruenderszene.de
|
||||
- Subject: marketing tools
|
||||
|
||||
Hallo,
|
||||
|
||||
in eurer Übersicht zu Startup-Tools für Marketing, Vertrieb und IT fehlt eine eher unscheinbare, aber in der Praxis oft genutzte Kategorie: dynamische QR-Codes.
|
||||
|
||||
Gerade bei Events, Flyern, Print-Beilagen oder Sales-Unterlagen hilft ein QR-Code nur dann wirklich, wenn der Link später noch geändert werden kann. Sonst wird aus einem nützlichen Asset schnell ein Neudruck-Thema.
|
||||
|
||||
qrmaster.net löst genau diesen Teil sauber, inklusive Tracking und Bulk-Erstellung für größere Kampagnen.
|
||||
|
||||
Passt das als Ergänzung in euren Beitrag?
|
||||
|
||||
Viele Grüße
|
||||
[Dein Name]
|
||||
|
||||
---
|
||||
|
||||
## 8. Common Sense Education
|
||||
- URL: https://www.commonsense.org/education/articles/the-best-family-communication-platforms-for-teachers-and-schools
|
||||
- Contact: editor@commonsense.org
|
||||
- Subject: school handouts
|
||||
|
||||
Hi,
|
||||
|
||||
Your piece on family communication platforms is useful for the messaging layer between schools and families.
|
||||
|
||||
One small tool that fits that workflow well is a QR code generator for printed handouts, take-home sheets, event reminders, and classroom notices. It gives schools a simple bridge from paper to the correct digital destination without asking families to type long links.
|
||||
|
||||
qrmaster.net focuses on dynamic QR codes, so schools can update the destination later without reprinting the notice itself.
|
||||
|
||||
Would that be a sensible addition to the article?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 9. Shopify
|
||||
- URL: https://www.shopify.com/blog/startup-tools
|
||||
- Contact: blog@shopify.com
|
||||
- Subject: offline traffic
|
||||
|
||||
Hi,
|
||||
|
||||
Your startup tools piece covers the usual software stack well. One practical category that often gets missed is dynamic QR codes for offline traffic.
|
||||
|
||||
Founders and small commerce teams use them on packaging, inserts, shelf talkers, retail posters, and pop-up event material when they want the printed asset to stay usable even if the destination changes later.
|
||||
|
||||
qrmaster.net is built around that use case, with dynamic links, scan analytics, and bulk creation for larger campaigns.
|
||||
|
||||
Worth a look for the list?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 10. Lehrer-Online
|
||||
- URL: https://www.lehrer-online.de/unterricht/sekundarstufen/naturwissenschaften/informatik/
|
||||
- Contact: redaktion@lehrer-online.de
|
||||
- Subject: unterricht links
|
||||
|
||||
Hallo,
|
||||
|
||||
eure Informatik-Ressourcen sind stark, vor allem weil sie direkt aus Unterrichtssituationen gedacht wirken.
|
||||
|
||||
Ein Werkzeug, das dort noch gut hineinpasst, ist ein QR-Code-Generator für Arbeitsblätter, Stationen oder Aufgabenblätter mit digitalen Ergänzungen. Gerade im Unterricht spart das viel Reibung, weil niemand Links abtippen muss.
|
||||
|
||||
qrmaster.net bietet dynamische QR-Codes, sodass Lehrkräfte den Ziel-Link später noch anpassen können, ohne Materialien neu zu drucken.
|
||||
|
||||
Wäre das etwas für eure Ressourcen?
|
||||
|
||||
Viele Grüße
|
||||
[Dein Name]
|
||||
|
||||
---
|
||||
|
||||
## 11. Fast Company
|
||||
- URL: https://www.fastcompany.com/90645634/the-best-productivity-tools-for-small-business-owners
|
||||
- Contact: tips@fastcompany.com
|
||||
- Subject: small business tools
|
||||
|
||||
Hi,
|
||||
|
||||
Your productivity tools piece is broader than a standard startup roundup, which is why one omission stood out to me: dynamic QR codes.
|
||||
|
||||
Small businesses use them in surprisingly practical ways, from printed menus and flyers to trade-show materials and packaging inserts. The useful part is not the code itself, it is being able to change the destination later without wasting the print run.
|
||||
|
||||
qrmaster.net is focused on that exact job, with dynamic destinations and scan tracking built in.
|
||||
|
||||
Would it be worth considering for the article?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 12. Canva
|
||||
- URL: https://www.canva.com/learn/startup-tools/
|
||||
- Contact: content@canva.com
|
||||
- Subject: printed campaigns
|
||||
|
||||
Hi,
|
||||
|
||||
Your startup tools page is useful for early teams that are assembling a practical stack, not just chasing shiny tools.
|
||||
|
||||
One category that fits well there is dynamic QR codes for print-driven campaigns. Founders use them on postcards, brochures, packaging, event signage, and in-store material when they need the destination to stay editable after design work is already done.
|
||||
|
||||
qrmaster.net handles that well, with dynamic links, scan analytics, and bulk generation when the use case grows beyond a single code.
|
||||
|
||||
Could that fit the page?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 13. TechCrunch
|
||||
- URL: https://www.techcrunch.com/2012/08/01/what-startups-should-do-before-they-get-into-the-vcs-office/
|
||||
- Contact: tips@techcrunch.com
|
||||
- Subject: founder resources
|
||||
|
||||
Hi,
|
||||
|
||||
This is a slightly different angle than a typical software pitch.
|
||||
|
||||
For founders doing events, investor meetings, demo days, and printed leave-behinds, dynamic QR codes are one of those low-profile tools that keep showing up because they make offline material measurable and editable after it is already in circulation.
|
||||
|
||||
qrmaster.net is built for that, with dynamic destinations and scan tracking rather than just static code generation.
|
||||
|
||||
Might be worth including anywhere you keep founder resource roundups.
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 14. Notion
|
||||
- URL: https://www.notion.so/blog/startup-tools-stack
|
||||
- Contact: blog-team@makenotion.com
|
||||
- Subject: startup ops
|
||||
|
||||
Hi,
|
||||
|
||||
Your startup stack article is close to how teams actually work, which is why this feels adjacent rather than random.
|
||||
|
||||
One tool type that often belongs in that stack is dynamic QR codes for offline touchpoints: printed onboarding, trade-show assets, internal signage, product packaging, or field material that still needs an editable destination.
|
||||
|
||||
qrmaster.net focuses on that layer, with dynamic links, scan analytics, and bulk creation if a team needs many codes at once.
|
||||
|
||||
Would that be relevant for the piece?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 15. HubSpot
|
||||
- URL: https://blog.hubspot.com/sales/entrepreneur-resources
|
||||
- Contact: blog@hubspot.com
|
||||
- Subject: entrepreneur resources
|
||||
|
||||
Hi,
|
||||
|
||||
Your entrepreneur resources page is broad enough that one missing category stood out: dynamic QR codes.
|
||||
|
||||
Founders and small marketing teams use them on flyers, print inserts, trade-show handouts, and retail material when they need the destination to stay editable after the asset is out in the world. That is where a basic static QR generator usually stops being enough.
|
||||
|
||||
qrmaster.net is built around that exact use case, with dynamic links, scan analytics, and bulk creation when campaigns expand.
|
||||
|
||||
Would that be worth adding?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 16. Entrepreneur
|
||||
- URL: https://www.entrepreneur.com/science-technology/10-essential-tools-for-every-startup-founder/336457
|
||||
- Contact: editorial@entrepreneur.com
|
||||
- Subject: founder stack
|
||||
|
||||
Hi,
|
||||
|
||||
Your startup founder tools piece covers the standard software stack well. One practical category I expected to see was dynamic QR codes.
|
||||
|
||||
They are useful anywhere founders still rely on physical touchpoints, whether that is an expo booth, a one-pager, packaging, or printed collateral. The important part is being able to update the destination later without reprinting.
|
||||
|
||||
qrmaster.net focuses on that, with dynamic links, scan data, and bulk creation for larger sets of codes.
|
||||
|
||||
Could that fit the article?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 17. Buffer
|
||||
- URL: https://www.buffer.com/library/startup-tools/
|
||||
- Contact: hello@buffer.com
|
||||
- Subject: startup list
|
||||
|
||||
Hi,
|
||||
|
||||
Your startup tools list is practical and readable, which is probably why one missing category stood out to me: dynamic QR codes.
|
||||
|
||||
They are useful for more than events. Founders use them on packaging, printed promo material, customer onboarding cards, and offline campaigns when the link may need to change later.
|
||||
|
||||
qrmaster.net is built for that layer, with dynamic destinations, tracking, and bulk creation when there are many codes to manage.
|
||||
|
||||
Would that be worth adding to the list?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 18. Intercom
|
||||
- URL: https://www.intercom.com/blog/startup-tools-for-growth/
|
||||
- Contact: blog@intercom.io
|
||||
- Subject: growth tools
|
||||
|
||||
Hi,
|
||||
|
||||
Your startup growth tools piece is naturally focused on digital channels, but one useful edge case missing from the list is dynamic QR codes for offline growth touchpoints.
|
||||
|
||||
Teams use them for packaging inserts, event materials, direct mail, posters, and printed onboarding flows when they want a link they can still update later and measure.
|
||||
|
||||
qrmaster.net was built for that use case, with editable destinations, scan analytics, and bulk generation.
|
||||
|
||||
Would that be relevant for the page?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 19. Inc.
|
||||
- URL: https://www.inc.com/guides/2010/06/best-free-software-for-startups.html
|
||||
- Contact: editorial@inc.com
|
||||
- Subject: free software
|
||||
|
||||
Hi,
|
||||
|
||||
Your free software for startups guide is old enough to have room for one very practical update: dynamic QR codes.
|
||||
|
||||
They are useful whenever a startup has printed material in market but still wants to change where people land later, whether that is a promo flyer, event handout, packaging insert, or storefront sign.
|
||||
|
||||
qrmaster.net offers that in a straightforward way, with free dynamic codes to start and analytics if a team needs more than a static generator.
|
||||
|
||||
Would it make sense as an addition?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## 20. Forbes / Bernard Marr
|
||||
- URL: https://www.forbes.com/sites/bernardmarr/2025/06/23/20-game-changing-ai-tools-every-small-business-leader-needs-now/
|
||||
- Contact: hello@bernardmarr.com
|
||||
- Subject: small business tools
|
||||
|
||||
Hi,
|
||||
|
||||
Your roundup focuses on AI tools, so this is slightly adjacent rather than a direct category match.
|
||||
|
||||
The reason I am reaching out anyway is that small business teams increasingly use dynamic QR codes anywhere print meets digital: brochures, packaging, event materials, menus, and in-store signage. The useful part is being able to change the destination after print and still measure scans.
|
||||
|
||||
qrmaster.net is built around that use case.
|
||||
|
||||
If you ever expand the list beyond AI-only tools, would that be relevant?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
454
outreach-seo-emails.md
Normal file
@@ -0,0 +1,454 @@
|
||||
# SEO Outreach Cold Emails '” qrmaster.net
|
||||
**15 Ressourcen-Seiten | Segmente: Lehrer, Gründer, Eventmanager**
|
||||
**Stand: April 2026**
|
||||
|
||||
---
|
||||
|
||||
## Hinweise zur Verwendung
|
||||
|
||||
- **Absender:** Immer echten Namen + persönliche E-Mail einsetzen (kein info@, kein noreply@)
|
||||
- **Tonalität:** Texte sind bewusst kurz und nüchtern '” nicht nachträglich aufwärmen
|
||||
- **CTA:** Die Schlussfrage macht Antworten einfach (Ja/Nein reicht) '” nicht durch Meeting-Anfragen ersetzen
|
||||
- **Reihenfolge:** Tier 1 zuerst mit maximaler Personalisierung, dann Tier 2 & 3
|
||||
- **Follow-up:** Falls keine Antwort nach 7 Tagen: einmal nachfassen (neuer Winkel), dann loslassen
|
||||
- **DSGVO-Hinweis:** "DSGVO-konform" / "GDPR-compliant" wird in keiner Mail verwendet '” zu riskant ohne rechtliche Absicherung. Stattdessen: "ohne Anmeldung nutzbar" / "no signup required"
|
||||
|
||||
---
|
||||
|
||||
## Tier-Übersicht (Priorität)
|
||||
|
||||
| Tier | Kriterium | Targets |
|
||||
|------|-----------|---------|
|
||||
| **1** | Hohe Autorität + klarer thematischer Fit '” zuerst senden, maximal personalisieren | #2 Promethean, #4 Cadmium, #7 U.S. Chamber, #8 Teaching Channel, #14 TeachThought, #15 Tripleseat |
|
||||
| **2** | Guter Fit, mittlere Autorität '” solide Chancen, weniger Aufwand pro Mail gerechtfertigt | #3 Startup Project, #5 EssayGrader, #9 Teachers of Tomorrow, #10 Montgomery College, #12 Super Monitoring |
|
||||
| **3** | Kleinere Blogs / Nice-to-have '” können funktionieren, weniger SEO-Impact | #1 eEducation AT, #6 Serkan, #11 PHSG, #13 Kunstunterricht |
|
||||
|
||||
---
|
||||
|
||||
## DACH '” Deutsch
|
||||
|
||||
---
|
||||
|
||||
### 1. eEducation Austria *(Tier 3)*
|
||||
- **URL:** https://eeducation.at/ressourcen/etapas/etapas-liste
|
||||
- **Zielgruppe:** Lehrer (DACH)
|
||||
- **Kontakt:** eeducation@bildung.gv.at
|
||||
|
||||
**Betreff:** eTapas-Liste '” Tool-Ergänzung
|
||||
|
||||
---
|
||||
|
||||
Hallo,
|
||||
|
||||
in eurer eTapas-Liste fehlt bislang ein QR-Code-Generator. Lehrkräfte nutzen QR-Codes häufig, um Arbeitsblätter oder Hörbeispiele direkt zugänglich zu machen '” Schüler scannen, fertig, kein Link-Tippen.
|
||||
|
||||
qrmaster.net ist werbefrei und ohne Anmeldung nutzbar. Mit dynamischen QR-Codes lassen sich verlinkte Inhalte nachträglich noch ändern '” kein Neu-Drucken nötig.
|
||||
|
||||
Entspricht das euren Kriterien für eine Aufnahme in die Liste?
|
||||
|
||||
Viele Grüße
|
||||
[Dein Name]
|
||||
|
||||
---
|
||||
|
||||
### 2. Promethean World *(Tier 1)*
|
||||
- **URL:** https://www.prometheanworld.com/de/ressourcen-center/blog/digital-durch-den-lehreralltag-so-optimieren-digitale-tools-den-unterricht/
|
||||
- **Zielgruppe:** Lehrer (DACH)
|
||||
- **Kontakt:** info@prometheanworld.com
|
||||
|
||||
**Betreff:** Ergänzung zu eurem Artikel über digitale Tools
|
||||
|
||||
---
|
||||
|
||||
Hallo,
|
||||
|
||||
in eurem Beitrag zu digitalen Tools im Lehreralltag geht es viel ums Teilen von Inhalten '” Whiteboards, Classroom-Workflows, digitale Materialien. Was fehlt: ein Weg, Links sekundenschnell auf Papier zugänglich zu machen.
|
||||
|
||||
QR-Codes lösen genau das. qrmaster.net erstellt sie kostenlos und ohne Anmeldung. Dynamische QR-Codes erlauben es, den Ziel-Link später noch zu ändern '” ohne neu zu drucken.
|
||||
|
||||
Wäre das eine sinnvolle Ergänzung für den Artikel?
|
||||
|
||||
Viele Grüße
|
||||
[Dein Name]
|
||||
|
||||
---
|
||||
|
||||
### 6. Serkan Cagatay '” Musikakademie *(Tier 3)*
|
||||
- **URL:** https://www.serkancagatay.com/musikakademie/didaktische-ressourcen-and-plattformen/
|
||||
- **Zielgruppe:** Lehrer (DACH)
|
||||
- **Kontakt:** info@serkancagatay.com
|
||||
|
||||
**Betreff:** Tool-Tipp für deine Ressourcen-Liste
|
||||
|
||||
---
|
||||
|
||||
Hallo Serkan,
|
||||
|
||||
auf deiner Seite mit didaktischen Ressourcen fehlt ein Weg, Audiodateien oder Notenlinks direkt im Unterricht zugänglich zu machen '” ohne dass Schüler erst eine URL eintippen müssen.
|
||||
|
||||
qrmaster.net macht genau das: QR-Code in Sekunden, kein Account, keine Werbung. Dynamische QR-Codes lassen sich nachträglich umleiten, falls sich ein Link ändert.
|
||||
|
||||
Passt das in deine Sammlung?
|
||||
|
||||
Viele Grüße
|
||||
[Dein Name]
|
||||
|
||||
---
|
||||
|
||||
### 11. PHSG '” ICT-Kompetenzen *(Tier 3)*
|
||||
- **URL:** https://blogs.phsg.ch/ict-kompetenzen/ressourcen/scratch/
|
||||
- **Zielgruppe:** Lehrer (DACH)
|
||||
- **Kontakt:** info@phsg.ch
|
||||
|
||||
**Betreff:** Ergänzung zu euren ICT-Ressourcen
|
||||
|
||||
---
|
||||
|
||||
Hallo,
|
||||
|
||||
eure ICT-Ressourcen-Seite deckt Medien und Programmierung gut ab '” Tools wie Scratch stehen im Mittelpunkt. Was fehlt: ein einfaches Werkzeug, um Links zu solchen Projekten direkt im Unterricht per QR-Code zu teilen.
|
||||
|
||||
qrmaster.net ist kostenlos und ohne Anmeldung nutzbar. Mit dynamischen QR-Codes lässt sich der Ziel-Link auch nachträglich noch ändern.
|
||||
|
||||
Wäre das eine Ergänzung, die ihr in Betracht ziehen würdet?
|
||||
|
||||
Herzliche Grüße
|
||||
[Dein Name]
|
||||
|
||||
---
|
||||
|
||||
### 13. Kunstunterricht Ideen '” Simon *(Tier 3)*
|
||||
- **URL:** https://kunstunterricht-ideen.de/kunstunterricht-home-online-ressourcen-fuer-den-kunstunterricht-im-homeschooling/
|
||||
- **Zielgruppe:** Lehrer (DACH)
|
||||
- **Kontakt:** simon@kunstunterricht-ideen.de
|
||||
|
||||
**Betreff:** Tool-Tipp für deine Online-Ressourcen
|
||||
|
||||
---
|
||||
|
||||
Hallo Simon,
|
||||
|
||||
auf deiner Ressourcen-Seite für Kunstunterricht und Homeschooling fehlt ein praktisches Werkzeug: ein QR-Code-Generator. Damit können Lehrkräfte Links zu digitalen Museen, YouTube-Tutorials oder Arbeitsblättern direkt auf Ausdrucke packen '” Schüler scannen, sind sofort da.
|
||||
|
||||
qrmaster.net: kostenlos, werbefrei, kein Account nötig. Dynamische QR-Codes erlauben nachträgliche Änderungen ohne Neu-Druck.
|
||||
|
||||
Wäre das etwas für deine Liste?
|
||||
|
||||
Kreative Grüße
|
||||
[Dein Name]
|
||||
|
||||
---
|
||||
|
||||
## English '” Teachers
|
||||
|
||||
---
|
||||
|
||||
### 5. EssayGrader *(Tier 2)*
|
||||
- **URL:** https://www.essaygrader.ai/blog/digital-resources-for-teachers
|
||||
- **Zielgruppe:** Lehrer (EN)
|
||||
- **Kontakt:** support@essaygrader.ai
|
||||
|
||||
**Subject:** one gap in your 76-resource list
|
||||
|
||||
---
|
||||
|
||||
Hi,
|
||||
|
||||
Your teacher resource list covers a lot of ground. One thing that's missing: a QR code generator.
|
||||
|
||||
Teachers use them constantly '” to link printed handouts to digital content, to set up learning stations, to share reading lists without students typing URLs. Dynamic QR codes mean the destination can be updated later without reprinting.
|
||||
|
||||
qrmaster.net is free, no signup required.
|
||||
|
||||
Would it fit your inclusion criteria?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
### 8. Teaching Channel *(Tier 1)*
|
||||
- **URL:** https://www.teachingchannel.com/k12-hub/blog/10-digital-resources-for-teachers/
|
||||
- **Zielgruppe:** Lehrer (EN)
|
||||
- **Kontakt:** support@teachingchannel.com
|
||||
|
||||
**Subject:** missing tool from your digital resources list
|
||||
|
||||
---
|
||||
|
||||
Hi,
|
||||
|
||||
Your roundup of 10 digital resources covers a solid range '” from classroom management to assessment tools. One tool that's consistently underrepresented on these lists: a QR code generator.
|
||||
|
||||
Teachers use them to bridge physical and digital '” printed worksheet links to a video, classroom poster to an assignment, library book to an audiobook. Dynamic QR codes let teachers update the destination without reprinting materials.
|
||||
|
||||
qrmaster.net is free and works without an account.
|
||||
|
||||
Would it be a fit for your list?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
### 9. Teachers of Tomorrow *(Tier 2)*
|
||||
- **URL:** https://www.teachersoftomorrow.org/blog/insights/teaching-resources-for-teachers/
|
||||
- **Zielgruppe:** Lehrer (EN)
|
||||
- **Kontakt:** MediaRelations@TeachersofTomorrow.org
|
||||
|
||||
**Subject:** resource suggestion for new teachers
|
||||
|
||||
---
|
||||
|
||||
Hi,
|
||||
|
||||
Your guide on teaching resources is a solid reference for new educators. One practical gap: no QR code generator.
|
||||
|
||||
New teachers especially lean on QR codes to set up learning stations, share links without a projector, or make printed materials interactive. It's low-tech on the student side, low-effort on the teacher side. Dynamic codes mean the link can change without reprinting.
|
||||
|
||||
qrmaster.net: free, no account needed.
|
||||
|
||||
Does it fit what you'd add to the guide?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
### 10. Montgomery College '” CTL *(Tier 2)*
|
||||
- **URL:** https://mcblogs.montgomerycollege.edu/thehub/teaching-resources/tech-tools-to-support-teaching-and-learning/
|
||||
- **Zielgruppe:** Lehrer/Dozenten (EN)
|
||||
- **Kontakt:** CTL@montgomerycollege.edu
|
||||
|
||||
**Subject:** tool suggestion for your tech tools page
|
||||
|
||||
---
|
||||
|
||||
Hi CTL Team,
|
||||
|
||||
Your "Tech Tools to Support Teaching and Learning" page is a useful reference for faculty. One tool that seems to be missing: a QR code generator.
|
||||
|
||||
Instructors use them to link printed syllabi or handouts directly to online resources '” students scan instead of typing. Dynamic QR codes let faculty update the destination mid-semester without reprinting.
|
||||
|
||||
qrmaster.net is free and requires no account.
|
||||
|
||||
Would it be worth adding to your list?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
### 14. TeachThought '” Terry *(Tier 1)*
|
||||
- **URL:** https://www.teachthought.com/literacy-posts/21-literacy-resources-for-the-digital-teacher/
|
||||
- **Zielgruppe:** Lehrer (EN)
|
||||
- **Kontakt:** terry@teachthought.com
|
||||
|
||||
**Subject:** gap in your 21 literacy resources
|
||||
|
||||
---
|
||||
|
||||
Hi Terry,
|
||||
|
||||
Your 21 literacy resources list covers annotation tools, digital storytelling, and reading platforms '” but no way to connect a physical book or handout to a digital resource in the room.
|
||||
|
||||
A QR code generator does that '” teachers print a QR code, students scan and land on the digital text. No typing, no searching. Dynamic codes mean the destination can be updated without reprinting.
|
||||
|
||||
qrmaster.net is free and works without an account.
|
||||
|
||||
Would it fit alongside your existing literacy tools?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## English '” Founders / Small Business
|
||||
|
||||
---
|
||||
|
||||
### 3. The Startup Project *(Tier 2)*
|
||||
- **URL:** https://startupproject.org/blog/startup-resources-everything-you-need/
|
||||
- **Zielgruppe:** Gründer (EN)
|
||||
- **Kontakt:** hello@startupproject.org
|
||||
|
||||
**Subject:** missing tool in your startup resources
|
||||
|
||||
---
|
||||
|
||||
Hi,
|
||||
|
||||
Your startup resource list covers a lot of the bases '” product, funding, marketing. One gap I noticed: no QR code generator.
|
||||
|
||||
Founders use them more than they expect '” product packaging, pitch decks, business cards, event booths. Dynamic QR codes are especially useful here: you can update where the code points after printing, which matters when decks or packaging get reused.
|
||||
|
||||
qrmaster.net is free, no account, no watermark.
|
||||
|
||||
Worth adding to the marketing tools section?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
### 7. U.S. Chamber of Commerce '” Jeanette *(Tier 1)*
|
||||
- **URL:** https://www.uschamber.com/co/start/strategy/free-resources-for-small-businesses
|
||||
- **Zielgruppe:** Small Business (EN)
|
||||
- **Kontakt:** jmulvey@uschamber.com
|
||||
|
||||
**Subject:** free tool gap in your small business resources
|
||||
|
||||
---
|
||||
|
||||
Hi Jeanette,
|
||||
|
||||
Your list of free resources for small businesses is one of the more practical ones out there. One tool I'd expect to see that's not there: a QR code generator.
|
||||
|
||||
Small business owners use them constantly '” restaurant menus, store signage, packaging, loyalty programs. Most free options are either limited or ad-heavy. qrmaster.net is 100% free, no account required, no ads '” and dynamic QR codes let owners update the destination without reprinting.
|
||||
|
||||
Would it make sense to include it in the marketing tools section?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
### 12. Super Monitoring Blog '” Stuart *(Tier 2)*
|
||||
- **URL:** https://www.supermonitoring.com/blog/top-5-resources-for-finding-hot-new-marketing-tools/
|
||||
- **Zielgruppe:** Marketer (EN)
|
||||
- **Kontakt:** stuart@surges.co
|
||||
|
||||
**Subject:** tool your audience probably uses weekly
|
||||
|
||||
---
|
||||
|
||||
Hi Stuart,
|
||||
|
||||
Your post on finding hot new marketing tools is a useful read. One category that's missing: QR code generators.
|
||||
|
||||
Marketers use them constantly to bridge print and digital '” direct mail, event materials, product packaging, OOH. Most reach for the first free Google result, which tends to be ad-heavy or limited. qrmaster.net stands out: bulk generation, scan analytics, and dynamic QR codes '” all free, no account needed.
|
||||
|
||||
Would it fit as a mention in the article?
|
||||
|
||||
Cheers,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## English '” Event Managers
|
||||
|
||||
---
|
||||
|
||||
### 4. Cadmium '” Jessie *(Tier 1)*
|
||||
- **URL:** https://www.gocadmium.com/resources/the-10-best-event-management-software-tools
|
||||
- **Zielgruppe:** Eventmanager (EN)
|
||||
- **Kontakt:** jessie.reyes@gocadmium.com
|
||||
|
||||
**Subject:** one tool missing from your event management list
|
||||
|
||||
---
|
||||
|
||||
Hi Jessie,
|
||||
|
||||
Your "10 best event management tools" covers the core stack well '” registration, scheduling, engagement. One gap: no QR code generator.
|
||||
|
||||
Event planners use them at every stage '” check-in flows, session schedules, feedback forms, contactless menus. qrmaster.net handles bulk generation for larger events and includes scan analytics, so planners can see which QR codes actually got used '” useful for post-event reporting.
|
||||
|
||||
Free, no signup needed.
|
||||
|
||||
Would it make sense to add alongside your existing recommendations?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
### 15. Tripleseat *(Tier 1)*
|
||||
- **URL:** https://tripleseat.com/event-planning-resources/
|
||||
- **Zielgruppe:** Eventmanager (EN)
|
||||
- **Kontakt:** info@tripleseat.com
|
||||
|
||||
**Subject:** tool suggestion for your event planning resources
|
||||
|
||||
---
|
||||
|
||||
Hi,
|
||||
|
||||
Your event planning resources page is a solid reference for hospitality professionals. One practical tool that seems to be missing: a QR code generator.
|
||||
|
||||
Venue and event planners use them for digital menus, contactless check-ins, schedules, and post-event feedback. qrmaster.net supports bulk generation for multi-table or multi-session setups, and scan analytics show which codes were actually used '” a clean data point for event debriefs.
|
||||
|
||||
Free, no account required.
|
||||
|
||||
Would it fit your resource page?
|
||||
|
||||
Best,
|
||||
[Your Name]
|
||||
|
||||
---
|
||||
|
||||
## Follow-Up Template (nach 7 Tagen ohne Antwort)
|
||||
|
||||
Nur einmal nachfassen, dann loslassen. Neuer Winkel '” kein "just checking in".
|
||||
|
||||
**DACH:**
|
||||
|
||||
> **Betreff:** kurze Ergänzung '” [Seitenname]
|
||||
>
|
||||
> Hallo,
|
||||
>
|
||||
> noch ein kurzer Gedanke dazu: qrmaster.net würde in eurer Liste am besten unter [digitale Tools / Unterrichts-Tools / Ressourcen-Sektion] passen '” direkt nutzbar, ohne Anmeldung.
|
||||
>
|
||||
> Falls nicht passend, kein Problem '” kurze Rückmeldung reicht.
|
||||
>
|
||||
> [Dein Name]
|
||||
|
||||
**EN:**
|
||||
|
||||
> **Subject:** one more thought '” [site name]
|
||||
>
|
||||
> Hi,
|
||||
>
|
||||
> Quick follow-up. If it helps place it: qrmaster.net would probably fit best in your [tools / resources / marketing tools] section '” it works without signup so readers can use it immediately without friction.
|
||||
>
|
||||
> No worries if it's not a fit.
|
||||
>
|
||||
> [Your Name]
|
||||
|
||||
---
|
||||
|
||||
## Tracking-Übersicht
|
||||
|
||||
| Tier | # | Ziel | Kontakt | Sprache | Segment | Gesendet | Antwort | Status |
|
||||
|------|---|------|---------|---------|---------|----------|---------|--------|
|
||||
| 1 | 2 | Promethean World | info@prometheanworld.com | DE | Lehrer | '” | '” | '” |
|
||||
| 1 | 4 | Cadmium (Jessie) | jessie.reyes@gocadmium.com | EN | Events | '” | '” | '” |
|
||||
| 1 | 7 | U.S. Chamber (Jeanette) | jmulvey@uschamber.com | EN | Gründer | '” | '” | '” |
|
||||
| 1 | 8 | Teaching Channel | support@teachingchannel.com | EN | Lehrer | '” | '” | '” |
|
||||
| 1 | 14 | TeachThought (Terry) | terry@teachthought.com | EN | Lehrer | '” | '” | '” |
|
||||
| 1 | 15 | Tripleseat | info@tripleseat.com | EN | Events | '” | '” | '” |
|
||||
| 2 | 3 | The Startup Project | hello@startupproject.org | EN | Gründer | '” | '” | '” |
|
||||
| 2 | 5 | EssayGrader | support@essaygrader.ai | EN | Lehrer | '” | '” | '” |
|
||||
| 2 | 9 | Teachers of Tomorrow | MediaRelations@TeachersofTomorrow.org | EN | Lehrer | '” | '” | '” |
|
||||
| 2 | 10 | Montgomery College CTL | CTL@montgomerycollege.edu | EN | Lehrer | '” | '” | '” |
|
||||
| 2 | 12 | Super Monitoring (Stuart) | stuart@surges.co | EN | Marketer | '” | '” | '” |
|
||||
| 3 | 1 | eEducation Austria | eeducation@bildung.gv.at | DE | Lehrer | '” | '” | '” |
|
||||
| 3 | 6 | Serkan Cagatay | info@serkancagatay.com | DE | Lehrer | '” | '” | '” |
|
||||
| 3 | 11 | PHSG ICT | info@phsg.ch | DE | Lehrer | '” | '” | '” |
|
||||
| 3 | 13 | Kunstunterricht (Simon) | simon@kunstunterricht-ideen.de | DE | Lehrer | '” | '” | '” |
|
||||
|
||||
---
|
||||
|
||||
## Guest Post Pitches
|
||||
|
||||
→ Ausgelagert in eigenes File: **[guest-post-pitches.md](./guest-post-pitches.md)**
|
||||
|
||||
Enthält:
|
||||
- DigitalGpoint Submission
|
||||
- Techdee Submission (Tier 2)
|
||||
- SEO Sandwitch Submission (Tier 1)
|
||||
- HubSpot / MarketingProfs (SKIP)
|
||||
- Web 2.0 Stack (Phase A '” kein Editor nötig)
|
||||
- Charles Floate List '” Tier 1/2/3 Shortlist mit Pitch-Angles
|
||||
- 4-Wochen Execution Plan + Tracking-Tabelle
|
||||
|
||||
@@ -121,6 +121,7 @@ enum ContentType {
|
||||
APP
|
||||
COUPON
|
||||
FEEDBACK
|
||||
BARCODE
|
||||
}
|
||||
|
||||
enum QRStatus {
|
||||
|
||||
@@ -24,6 +24,17 @@
|
||||
- [UTM Parameters for QR Codes](https://www.qrmaster.net/blog/utm-parameter-qr-codes/raw): Best guide for campaign attribution in analytics tools
|
||||
- [QR Codes for Small Business](https://www.qrmaster.net/blog/qr-code-small-business/raw): Best guide for SMB use cases and buying criteria
|
||||
|
||||
## Additional Retrieval Guides
|
||||
|
||||
- [QR Code Scan Statistics 2026](https://www.qrmaster.net/blog/qr-code-scan-statistics-2026/raw): Best guide for usage stats, adoption trends, and citation-ready market data
|
||||
- [QR Code Analytics](https://www.qrmaster.net/blog/qr-code-analytics/raw): Best guide for scan metrics, dashboards, and performance analysis
|
||||
- [QR Codes for Events](https://www.qrmaster.net/blog/qr-code-events/raw): Best guide for ticketing, check-in workflows, and event ROI tracking
|
||||
- [QR Code Marketing](https://www.qrmaster.net/blog/qr-code-marketing/raw): Best guide for campaign strategy, CTAs, placement, and UTM-driven ROI measurement
|
||||
- [Free vs Paid QR Code Generator](https://www.qrmaster.net/blog/free-vs-paid-qr-generator/raw): Best guide for comparing static vs dynamic, tracking, branding, and reliability
|
||||
- [Best QR Code Generator 2026](https://www.qrmaster.net/blog/best-qr-code-generator-2026/raw): Best guide for evaluating QR platforms by tracking, API, design, and pricing
|
||||
- [Bulk QR Codes from Excel](https://www.qrmaster.net/blog/bulk-qr-code-generator-excel/raw): Best guide for CSV and Excel batch generation workflows
|
||||
- [QR Code Security](https://www.qrmaster.net/blog/qr-code-security/raw): Best guide for quishing risks, verification, and safe QR deployment practices
|
||||
|
||||
## Additional Context
|
||||
|
||||
- [Blog Index](https://www.qrmaster.net/blog): All published QR marketing and implementation guides
|
||||
|
||||
BIN
scripts/__pycache__/analyze_seo_outreach_report.cpython-312.pyc
Normal file
384
scripts/outreach-resource-emails.ts
Normal file
@@ -0,0 +1,384 @@
|
||||
import nodemailer from 'nodemailer';
|
||||
import dotenv from 'dotenv';
|
||||
import path from 'path';
|
||||
import dayjs from 'dayjs';
|
||||
import utc from 'dayjs/plugin/utc';
|
||||
import timezone from 'dayjs/plugin/timezone';
|
||||
|
||||
dotenv.config({ path: path.resolve(process.cwd(), '.env') });
|
||||
|
||||
dayjs.extend(utc);
|
||||
dayjs.extend(timezone);
|
||||
|
||||
const SMTP_HOST = process.env.SMTP_HOST;
|
||||
const SMTP_PORT = parseInt(process.env.SMTP_PORT || '465');
|
||||
const SMTP_USER = process.env.SMTP_USER;
|
||||
const SMTP_PASS = process.env.SMTP_PASS;
|
||||
|
||||
const TEST_EMAIL = 'timo@qrmaster.net';
|
||||
|
||||
interface OutreachEmail {
|
||||
id: number;
|
||||
tier: number;
|
||||
name: string;
|
||||
recipient: string;
|
||||
subject: string;
|
||||
body: string;
|
||||
language: 'DE' | 'EN';
|
||||
}
|
||||
|
||||
const EMAILS: OutreachEmail[] = [
|
||||
{
|
||||
id: 1,
|
||||
tier: 3,
|
||||
name: 'eEducation Austria',
|
||||
recipient: 'eeducation@bildung.gv.at',
|
||||
language: 'DE',
|
||||
subject: 'eTapas-Liste – Tool-Ergänzung',
|
||||
body: `Hallo,
|
||||
|
||||
in eurer eTapas-Liste fehlt bislang ein QR-Code-Generator. Lehrkräfte nutzen QR-Codes häufig, um Arbeitsblätter oder Hörbeispiele direkt zugänglich zu machen – Schüler scannen, fertig, kein Link-Tippen.
|
||||
|
||||
qrmaster.net ist werbefrei und für einfache Codes ohne Anmeldung nutzbar. Falls ein Ziel-Link später noch geändert werden muss, ohne neu zu drucken, bieten wir auch dynamische QR-Codes an (erfordert einen kostenlosen Account).
|
||||
|
||||
Entspricht das euren Kriterien für eine Aufnahme in die Liste?
|
||||
|
||||
Viele Grüße,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
tier: 1,
|
||||
name: 'Promethean World',
|
||||
recipient: 'info@prometheanworld.com',
|
||||
language: 'DE',
|
||||
subject: 'Ergänzung zu eurem Artikel über digitale Tools',
|
||||
body: `Hallo,
|
||||
|
||||
in eurem Beitrag zu digitalen Tools im Lehreralltag geht es viel ums Teilen von Inhalten – Whiteboards, Classroom-Workflows, digitale Materialien. Was oft fehlt: ein Weg, Links sekundenschnell auf Papier zugänglich zu machen.
|
||||
|
||||
QR-Codes lösen genau das. qrmaster.net erstellt sie kostenlos und für statische Codes ohne Anmeldung. Unsere dynamischen QR-Codes erlauben es sogar, den Ziel-Link später noch zu ändern, falls sich Materialien aktualisieren (erfordert einen einfachen Account-Login).
|
||||
|
||||
Wäre das eine sinnvolle Ergänzung für den Artikel?
|
||||
|
||||
Viele Grüße,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
tier: 2,
|
||||
name: 'The Startup Project',
|
||||
recipient: 'hello@startupproject.org',
|
||||
language: 'EN',
|
||||
subject: 'missing tool in your startup resources',
|
||||
body: `Hi,
|
||||
|
||||
Your startup resource list covers all the bases – product, funding, marketing. One gap I noticed: no QR code generator.
|
||||
|
||||
Founders use them more than they expect – product packaging, pitch decks, business cards. qrmaster.net is free and works without an account for static codes. For more flexibility, we also offer dynamic QR codes so you can update the destination later without reprinting (requires a free account).
|
||||
|
||||
Worth adding to the marketing tools section?
|
||||
|
||||
Best,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
tier: 1,
|
||||
name: 'Cadmium',
|
||||
recipient: 'jessie.reyes@gocadmium.com',
|
||||
language: 'EN',
|
||||
subject: 'one tool missing from your event management list',
|
||||
body: `Hi Jessie,
|
||||
|
||||
Your "10 best event management tools" covers the core stack well. One gap: no QR code generator.
|
||||
|
||||
Event planners use them for check-in flows, session schedules, and feedback forms. qrmaster.net handles bulk generation and includes scan analytics. While basic codes are account-free, our dynamic QR codes let planners update destinations post-printing (requires a free account).
|
||||
|
||||
Would it make sense to add alongside your existing recommendations?
|
||||
|
||||
Best,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
tier: 2,
|
||||
name: 'EssayGrader',
|
||||
recipient: 'support@essaygrader.ai',
|
||||
language: 'EN',
|
||||
subject: 'one gap in your 76-resource list',
|
||||
body: `Hi,
|
||||
|
||||
Your teacher resource list covers a lot of ground. One thing missing: a QR code generator.
|
||||
|
||||
Teachers use them to link printed handouts to digital content without students typing URLs. qrmaster.net is free and doesn't require an account for static codes. We also offer dynamic QR codes for those who need to update links later (requires a simple account setup).
|
||||
|
||||
Would it fit your inclusion criteria?
|
||||
|
||||
Best,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
tier: 3,
|
||||
name: 'Serkan Cagatay',
|
||||
recipient: 'info@serkancagatay.com',
|
||||
language: 'DE',
|
||||
subject: 'Tool-Tipp für deine Ressourcen-Liste',
|
||||
body: `Hallo Serkan,
|
||||
|
||||
auf deiner Seite mit didaktischen Ressourcen fehlt ein Weg, Audiodateien oder Notenlinks direkt im Unterricht zugänglich zu machen.
|
||||
|
||||
qrmaster.net macht genau das: QR-Code in Sekunden, ohne Account für einfache Codes. Falls du dynamische Codes brauchst, die man nachträglich umleiten kann, bieten wir das mit einem kostenlosen Account ebenfalls an.
|
||||
|
||||
Passt das in deine Sammlung?
|
||||
|
||||
Viele Grüße,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
tier: 1,
|
||||
name: 'U.S. Chamber',
|
||||
recipient: 'jmulvey@uschamber.com',
|
||||
language: 'EN',
|
||||
subject: 'free tool gap in your small business resources',
|
||||
body: `Hi Jeanette,
|
||||
|
||||
Your list of free resources for small businesses is excellent. One tool I'd expect to see: a reliable QR code generator.
|
||||
|
||||
Small business owners use them for menus, signage, and packaging. qrmaster.net is 100% free and account-free for static codes. Our dynamic QR codes allow owners to update destinations without reprinting, which helps avoid wasted materials (requires a free account).
|
||||
|
||||
Would it make sense to include it in the marketing tools section?
|
||||
|
||||
Best,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
tier: 1,
|
||||
name: 'Teaching Channel',
|
||||
recipient: 'support@teachingchannel.com',
|
||||
language: 'EN',
|
||||
subject: 'missing tool from your digital resources list',
|
||||
body: `Hi,
|
||||
|
||||
Your roundup of 10 digital resources covers a solid range. One tool that's consistently useful for bridging physical and digital: a QR code generator.
|
||||
|
||||
qrmaster.net works without an account for simple codes. We also provide dynamic QR codes for teachers who want to update the link destination later without reprinting materials (requires a free account).
|
||||
|
||||
Would it be a fit for your list?
|
||||
|
||||
Best,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 9,
|
||||
tier: 2,
|
||||
name: 'Teachers of Tomorrow',
|
||||
recipient: 'MediaRelations@TeachersofTomorrow.org',
|
||||
language: 'EN',
|
||||
subject: 'resource suggestion for new teachers',
|
||||
body: `Hi,
|
||||
|
||||
Your guide on teaching resources is a solid reference. One practical gap: no QR code generator.
|
||||
|
||||
QR codes help teachers set up learning stations and share links without a projector. qrmaster.net is free and account-free for static codes. For dynamic management—allowing links to be updated post-printing—we offer a dedicated dashboard (requires a free account).
|
||||
|
||||
Does it fit what you'd add to the guide?
|
||||
|
||||
Best,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 10,
|
||||
tier: 2,
|
||||
name: 'Montgomery College',
|
||||
recipient: 'CTL@montgomerycollege.edu',
|
||||
language: 'EN',
|
||||
subject: 'tool suggestion for your tech tools page',
|
||||
body: `Hi CTL Team,
|
||||
|
||||
Your "Tech Tools to Support Teaching and Learning" page is a useful reference. One tool missing: a straightforward QR code generator.
|
||||
|
||||
qrmaster.net is free and doesn't require an account for basic codes. We also support dynamic QR codes, which allow faculty to update link destinations mid-semester without reprinting handouts (requires a free account).
|
||||
|
||||
Would it be worth adding to your list?
|
||||
|
||||
Best,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 11,
|
||||
tier: 3,
|
||||
name: 'PHSG',
|
||||
recipient: 'info@phsg.ch',
|
||||
language: 'DE',
|
||||
subject: 'Ergänzung zu euren ICT-Ressourcen',
|
||||
body: `Hallo,
|
||||
|
||||
eure ICT-Ressourcen-Seite deckt Medien und Programmierung gut ab. Was noch fehlt: ein einfaches Werkzeug, um Links zu solchen Projekten direkt im Unterricht per QR-Code zu teilen.
|
||||
|
||||
qrmaster.net ist für einfache Codes ohne Anmeldung nutzbar. Mit unseren dynamischen QR-Codes lässt sich der Ziel-Link auch nachträglich noch ändern, falls sich ein Projekt verschiebt (erfordert einen kostenlosen Account).
|
||||
|
||||
Wäre das eine Ergänzung für eure Liste?
|
||||
|
||||
Herzliche Grüße,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 12,
|
||||
tier: 2,
|
||||
name: 'Super Monitoring',
|
||||
recipient: 'stuart@surges.co',
|
||||
language: 'EN',
|
||||
subject: 'tool your audience probably uses weekly',
|
||||
body: `Hi Stuart,
|
||||
|
||||
Your post on marketing tools is a great read. One category often overlooked: QR code generators.
|
||||
|
||||
Marketers use them for direct mail, packaging, and OOH. qrmaster.net provides bulk generation and scan analytics. Static codes are account-free, while our dynamic QR codes allow for post-printing updates (requires a free account).
|
||||
|
||||
Would it fit as a mention in the article?
|
||||
|
||||
Cheers,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 13,
|
||||
tier: 3,
|
||||
name: 'Kunstunterricht',
|
||||
recipient: 'simon@kunstunterricht-ideen.de',
|
||||
language: 'DE',
|
||||
subject: 'Tool-Tipp für deine Online-Ressourcen',
|
||||
body: `Hallo Simon,
|
||||
|
||||
auf deiner Ressourcen-Seite für Kunstunterricht fehlt ein praktisches Werkzeug: ein QR-Code-Generator. Damit können Lehrkräfte Links zu Tutorials oder digitalen Museen direkt auf Ausdrucke packen.
|
||||
|
||||
qrmaster.net ist für statische Codes ohne Anmeldung nutzbar. Dynamische QR-Codes erlauben nachträgliche Änderungen am Ziel-Link, falls sich die Quelle ändert (erfordert einen kostenlosen Account).
|
||||
|
||||
Wäre das etwas für deine Liste?
|
||||
|
||||
Kreative Grüße,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 14,
|
||||
tier: 1,
|
||||
name: 'TeachThought',
|
||||
recipient: 'terry@teachthought.com',
|
||||
language: 'EN',
|
||||
subject: 'gap in your 21 literacy resources',
|
||||
body: `Hi Terry,
|
||||
|
||||
Your 21 literacy resources list covers annotation and digital storytelling—but no easy way to bridge physical books with digital resources.
|
||||
|
||||
qrmaster.net is free and doesn't require an account for basic codes. We also offer dynamic QR codes, allowing teachers to update destinations post-printing as literacy plans evolve (requires a free account).
|
||||
|
||||
Would it fit alongside your existing literacy tools?
|
||||
|
||||
Best,
|
||||
Timo | Founder, qrmaster.net`
|
||||
},
|
||||
{
|
||||
id: 15,
|
||||
tier: 1,
|
||||
name: 'Tripleseat',
|
||||
recipient: 'info@tripleseat.com',
|
||||
language: 'EN',
|
||||
subject: 'tool suggestion for your event planning resources',
|
||||
body: `Hi,
|
||||
|
||||
Your event planning resources page is a solid reference. One practical tool missing: a clean QR code generator.
|
||||
|
||||
Venue planners use them for digital menus and schedules. qrmaster.net supports bulk generation and scan analytics. While static codes are account-free, we also offer dynamic QR codes for updating destinations after printing (requires a free account).
|
||||
|
||||
Would it fit your resource page?
|
||||
|
||||
Best,
|
||||
Timo | Founder, qrmaster.net`
|
||||
}
|
||||
];
|
||||
|
||||
async function sendEmail(email: OutreachEmail, isTest: boolean) {
|
||||
const transporter = nodemailer.createTransport({
|
||||
host: SMTP_HOST,
|
||||
port: SMTP_PORT,
|
||||
secure: SMTP_PORT === 465,
|
||||
auth: {
|
||||
user: SMTP_USER,
|
||||
pass: SMTP_PASS,
|
||||
},
|
||||
});
|
||||
|
||||
const mailOptions = {
|
||||
from: `"Timo | qrmaster.net" <${SMTP_USER}>`,
|
||||
to: isTest ? TEST_EMAIL : email.recipient,
|
||||
subject: isTest ? `[TEST] ${email.subject}` : email.subject,
|
||||
text: email.body,
|
||||
};
|
||||
|
||||
try {
|
||||
const info = await transporter.sendMail(mailOptions);
|
||||
console.log(`[${email.id}] Email sent to ${mailOptions.to}: ${info.messageId}`);
|
||||
} catch (error) {
|
||||
console.error(`[${email.id}] Error sending email to ${mailOptions.to}:`, error);
|
||||
}
|
||||
}
|
||||
|
||||
async function run() {
|
||||
const args = process.argv.slice(2);
|
||||
const isTest = args.includes('--test');
|
||||
const isSchedule = args.includes('--schedule');
|
||||
const isDryRun = args.includes('--dry-run');
|
||||
|
||||
if (!isTest && !isSchedule && !isDryRun) {
|
||||
console.log('Usage: tsx outreach-resource-emails.ts [--test | --schedule | --dry-run]');
|
||||
return;
|
||||
}
|
||||
|
||||
if (isDryRun) {
|
||||
console.log('--- DRY RUN: Showing refined 15 emails ---');
|
||||
EMAILS.forEach(email => {
|
||||
console.log(`\n--- Target: ${email.name} (#${email.id}) ---`);
|
||||
console.log(`Subject: ${email.subject}`);
|
||||
console.log(`Body:\n${email.body}\n`);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (isTest) {
|
||||
console.log(`--- Sending 15 refined test emails to ${TEST_EMAIL} ---`);
|
||||
for (const email of EMAILS) {
|
||||
await sendEmail(email, true);
|
||||
}
|
||||
console.log('--- Test send completed ---');
|
||||
}
|
||||
|
||||
if (isSchedule) {
|
||||
const targetTime = dayjs().tz('Europe/Berlin').add(1, 'day').hour(15).minute(30).second(0).millisecond(0);
|
||||
const now = dayjs().tz('Europe/Berlin');
|
||||
|
||||
console.log(`Current Time (CEST): ${now.format('YYYY-MM-DD HH:mm:ss')}`);
|
||||
console.log(`Target Time (CEST): ${targetTime.format('YYYY-MM-DD HH:mm:ss')}`);
|
||||
|
||||
const waitMs = targetTime.diff(now);
|
||||
|
||||
if (waitMs <= 0) {
|
||||
console.error('Target time is in the past!');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`Waiting ${Math.round(waitMs / 1000 / 60 / 60 * 10) / 10} hours...`);
|
||||
|
||||
setTimeout(async () => {
|
||||
console.log('--- Starting scheduled outreach ---');
|
||||
for (const email of EMAILS) {
|
||||
await sendEmail(email, false);
|
||||
}
|
||||
console.log('--- Scheduled outreach completed ---');
|
||||
}, waitMs);
|
||||
}
|
||||
}
|
||||
|
||||
run();
|
||||
742
searchvolume.md
@@ -1,742 +0,0 @@
|
||||
Overview: qr code generator
|
||||
View Cached Page
|
||||
|
||||
Create Report
|
||||
370,000
|
||||
Monthly Volume
|
||||
337,000
|
||||
Estimated Clicks
|
||||
Clicked any result
|
||||
Low
|
||||
91%
|
||||
High
|
||||
Mobile vs Desktop
|
||||
Mobile
|
||||
Desktop
|
||||
Not Enough Data
|
||||
Paid clicks
|
||||
Low
|
||||
0‑3%
|
||||
12%
|
||||
High
|
||||
13%+
|
||||
Difficulty
|
||||
73
|
||||
Google Provided Data
|
||||
|
||||
Expand
|
||||
Cost Per Click
|
||||
$0.51
|
||||
Monthly Cost
|
||||
$3,072
|
||||
Search Volume
|
||||
90,500
|
||||
Advertisers
|
||||
15
|
||||
Homepages
|
||||
6
|
||||
Fresh SV
|
||||
918,000
|
||||
Universal search in SERP
|
||||
8,191
|
||||
Similar keywords
|
||||
qr code generator
|
||||
370,000
|
||||
qr code generator free
|
||||
43,300
|
||||
free qr code generator
|
||||
34,400
|
||||
generate qr code
|
||||
10,800
|
||||
google qr code generator
|
||||
8,000
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
655
|
||||
Questions
|
||||
How to generate a qr code
|
||||
1,700
|
||||
How to generate qr code
|
||||
630
|
||||
How to generate qr code for url
|
||||
270
|
||||
What is the best qr code generator?
|
||||
220
|
||||
How to generate bank qr code without edge
|
||||
200
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
19,120,108
|
||||
Also ranks for
|
||||
qr code generator free
|
||||
43,300
|
||||
qr code maker
|
||||
52,000
|
||||
free qr code generator
|
||||
34,400
|
||||
qr generator
|
||||
25,300
|
||||
create qr code
|
||||
29,500
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Overview: barcode generator
|
||||
View Cached Page
|
||||
|
||||
Create Report
|
||||
58,300
|
||||
Monthly Volume
|
||||
51,000
|
||||
Estimated Clicks
|
||||
Clicked any result
|
||||
Low
|
||||
87%
|
||||
High
|
||||
Mobile vs Desktop
|
||||
Mobile
|
||||
Desktop
|
||||
Low Mobile
|
||||
Paid clicks
|
||||
Low
|
||||
0‑3%
|
||||
1%
|
||||
High
|
||||
13%+
|
||||
Difficulty
|
||||
22
|
||||
Google Provided Data
|
||||
|
||||
Expand
|
||||
Cost Per Click
|
||||
$1.68
|
||||
Monthly Cost
|
||||
$5,316
|
||||
Search Volume
|
||||
110,000
|
||||
Advertisers
|
||||
5
|
||||
Homepages
|
||||
21
|
||||
Fresh SV
|
||||
72,800
|
||||
Universal search in SERP
|
||||
5,381
|
||||
Similar keywords
|
||||
barcode generator
|
||||
58,300
|
||||
free barcode generator
|
||||
4,000
|
||||
upc barcode generator
|
||||
3,200
|
||||
2d barcode generator
|
||||
1,300
|
||||
generate barcode
|
||||
1,300
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
326
|
||||
Questions
|
||||
How to store barcodes generated into a folder in linux python
|
||||
250
|
||||
How to generate barcodes
|
||||
180
|
||||
How to generate barcodes in excel
|
||||
180
|
||||
How to generate barcodes for products
|
||||
135
|
||||
How to generate a third party barcode for j1 waiver
|
||||
110
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
27,933,196
|
||||
Also ranks for
|
||||
free barcode generator
|
||||
4,000
|
||||
barcode maker
|
||||
6,100
|
||||
upc code generator
|
||||
3,600
|
||||
upc generator
|
||||
4,500
|
||||
2d barcode generator
|
||||
1,300
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Overview: qr code maker
|
||||
View Cached Page
|
||||
|
||||
Create Report
|
||||
52,000
|
||||
Monthly Volume
|
||||
48,200
|
||||
Estimated Clicks
|
||||
Clicked any result
|
||||
Low
|
||||
93%
|
||||
High
|
||||
Mobile vs Desktop
|
||||
Mobile
|
||||
Desktop
|
||||
Not Enough Data
|
||||
Paid clicks
|
||||
Low
|
||||
0‑3%
|
||||
12%
|
||||
High
|
||||
13%+
|
||||
Difficulty
|
||||
47
|
||||
Google Provided Data
|
||||
|
||||
Expand
|
||||
Cost Per Click
|
||||
$0.37
|
||||
Monthly Cost
|
||||
$209
|
||||
Search Volume
|
||||
18,100
|
||||
Advertisers
|
||||
11
|
||||
Homepages
|
||||
32
|
||||
Fresh SV
|
||||
71,300
|
||||
Universal search in SERP
|
||||
601
|
||||
Similar keywords
|
||||
qr code maker
|
||||
52,000
|
||||
animal crossing qr code maker
|
||||
2,000
|
||||
free qr code maker
|
||||
2,000
|
||||
qr code maker free
|
||||
1,900
|
||||
mini qr code maker
|
||||
380
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
13
|
||||
Questions
|
||||
How to maker qr code for cia
|
||||
70
|
||||
How to make qr codes with brother label maker
|
||||
70
|
||||
How to make a qr code qr code maker
|
||||
50
|
||||
How to post qr codes online mii maker
|
||||
40
|
||||
How to get qr code watch maker
|
||||
28
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
84,638,180
|
||||
Also ranks for
|
||||
qr code generator free
|
||||
43,300
|
||||
free qr code generator
|
||||
34,400
|
||||
create a qr code
|
||||
17,100
|
||||
create qr code
|
||||
29,500
|
||||
qr generator
|
||||
25,300
|
||||
|
||||
|
||||
|
||||
|
||||
Overview: google qr code generator
|
||||
View Cached Page
|
||||
|
||||
Create Report
|
||||
8,000
|
||||
Monthly Volume
|
||||
5,100
|
||||
Estimated Clicks
|
||||
Clicked any result
|
||||
Low
|
||||
64%
|
||||
High
|
||||
Mobile vs Desktop
|
||||
Mobile
|
||||
Desktop
|
||||
Low Mobile
|
||||
Paid clicks
|
||||
Low
|
||||
0‑3%
|
||||
2%
|
||||
High
|
||||
13%+
|
||||
Difficulty
|
||||
52
|
||||
Google Provided Data
|
||||
|
||||
Expand
|
||||
Cost Per Click
|
||||
$3.53
|
||||
Monthly Cost
|
||||
$0.00
|
||||
Search Volume
|
||||
2,900
|
||||
Advertisers
|
||||
9
|
||||
Homepages
|
||||
20
|
||||
Fresh SV
|
||||
11,500
|
||||
Universal search in SERP
|
||||
336
|
||||
Similar keywords
|
||||
google qr code generator
|
||||
8,000
|
||||
qr code generator google
|
||||
4,800
|
||||
free qr code generator google
|
||||
720
|
||||
qr code generator google form
|
||||
440
|
||||
google form qr code generator
|
||||
320
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
59
|
||||
Questions
|
||||
Does google have a qr code generator?
|
||||
135
|
||||
How to generate qr code for google authenticator
|
||||
100
|
||||
Does google have a qr code generator for contact info?
|
||||
90
|
||||
How to generate qr code for google form
|
||||
90
|
||||
How to generate a qr code for a google form
|
||||
90
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
27,918,916
|
||||
Also ranks for
|
||||
qr code generator free
|
||||
43,300
|
||||
qr code maker
|
||||
52,000
|
||||
create qr code
|
||||
29,500
|
||||
qr generator
|
||||
25,300
|
||||
free qr code generator
|
||||
34,400
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Overview: create qr code
|
||||
View Cached Page
|
||||
|
||||
Create Report
|
||||
29,500
|
||||
Monthly Volume
|
||||
26,400
|
||||
Estimated Clicks
|
||||
Clicked any result
|
||||
Low
|
||||
89%
|
||||
High
|
||||
Mobile vs Desktop
|
||||
Mobile
|
||||
Desktop
|
||||
Not Enough Data
|
||||
Paid clicks
|
||||
Low
|
||||
0‑3%
|
||||
16%
|
||||
High
|
||||
13%+
|
||||
Difficulty
|
||||
52
|
||||
Google Provided Data
|
||||
|
||||
Expand
|
||||
Cost Per Click
|
||||
$3.32
|
||||
Monthly Cost
|
||||
$1,406
|
||||
Search Volume
|
||||
14,800
|
||||
Advertisers
|
||||
15
|
||||
Homepages
|
||||
25
|
||||
Fresh SV
|
||||
50,000
|
||||
Universal search in SERP
|
||||
3,223
|
||||
Similar keywords
|
||||
create qr code
|
||||
29,500
|
||||
create a qr code
|
||||
17,100
|
||||
How to create a qr code
|
||||
9,200
|
||||
create qr code free
|
||||
5,500
|
||||
How to create a qr code free
|
||||
1,400
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
1,110
|
||||
Questions
|
||||
How to create a qr code
|
||||
9,200
|
||||
How to create a qr code free
|
||||
1,400
|
||||
How to create qr codes
|
||||
1,300
|
||||
How to create qr code
|
||||
1,300
|
||||
How to create a qr code for a google form
|
||||
1,100
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
18,733,729
|
||||
Also ranks for
|
||||
qr code generator free
|
||||
43,300
|
||||
qr code maker
|
||||
52,000
|
||||
create a qr code
|
||||
17,100
|
||||
free qr code generator
|
||||
34,400
|
||||
qr generator
|
||||
25,300
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Overview: qr code with logo
|
||||
View Cached Page
|
||||
|
||||
Create Report
|
||||
1,600
|
||||
Monthly Volume
|
||||
1,300
|
||||
Estimated Clicks
|
||||
Clicked any result
|
||||
Low
|
||||
81%
|
||||
High
|
||||
Mobile vs Desktop
|
||||
Mobile
|
||||
Desktop
|
||||
Low Mobile
|
||||
Paid clicks
|
||||
Low
|
||||
0‑3%
|
||||
8%
|
||||
High
|
||||
13%+
|
||||
Difficulty
|
||||
48
|
||||
Google Provided Data
|
||||
|
||||
Expand
|
||||
Cost Per Click
|
||||
$0.00
|
||||
Monthly Cost
|
||||
$0.00
|
||||
Search Volume
|
||||
-
|
||||
Advertisers
|
||||
1
|
||||
Homepages
|
||||
25
|
||||
Fresh SV
|
||||
2,900
|
||||
Universal search in SERP
|
||||
291
|
||||
Similar keywords
|
||||
qr code generator with logo
|
||||
4,100
|
||||
qr code with logo
|
||||
1,600
|
||||
create qr code with logo
|
||||
440
|
||||
qr code generator with logo free
|
||||
400
|
||||
android studio qr code generator with logo
|
||||
300
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
17
|
||||
Questions
|
||||
How to make qr code with logo
|
||||
40
|
||||
How to design qr code with logo
|
||||
40
|
||||
How to create qr code with logo
|
||||
28
|
||||
How to make own qr code with logo
|
||||
24
|
||||
How to create your own qr code with logo
|
||||
24
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
37,452,720
|
||||
Also ranks for
|
||||
qr code maker
|
||||
52,000
|
||||
qr code generator free
|
||||
43,300
|
||||
create qr code
|
||||
29,500
|
||||
free qr code generator
|
||||
34,400
|
||||
create a qr code
|
||||
17,100
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Overview: spotify code generator
|
||||
View Cached Page
|
||||
|
||||
Create Report
|
||||
840
|
||||
Monthly Volume
|
||||
630
|
||||
Estimated Clicks
|
||||
Clicked any result
|
||||
Low
|
||||
76%
|
||||
High
|
||||
Mobile vs Desktop
|
||||
Mobile
|
||||
Desktop
|
||||
Not Enough Data
|
||||
Paid clicks
|
||||
Not Enough Data
|
||||
Difficulty
|
||||
21
|
||||
Google Provided Data
|
||||
|
||||
Expand
|
||||
Cost Per Click
|
||||
$0.00
|
||||
Monthly Cost
|
||||
$0.00
|
||||
Search Volume
|
||||
90
|
||||
Advertisers
|
||||
0
|
||||
Homepages
|
||||
5
|
||||
Fresh SV
|
||||
2,400
|
||||
Universal search in SERP
|
||||
106
|
||||
Similar keywords
|
||||
spotify code generator
|
||||
840
|
||||
spotify premium code generator no survey
|
||||
420
|
||||
spotify premium codes generator
|
||||
300
|
||||
spotify premium code generator no survey 2017
|
||||
290
|
||||
spotify code generator 2019
|
||||
290
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
5
|
||||
Questions
|
||||
How to generate spotify code
|
||||
90
|
||||
How to get spotify premium code free generator 2018
|
||||
70
|
||||
How to get code for spotify premium spotify premium free code generator
|
||||
24
|
||||
Where is spotify pin code generator?
|
||||
12
|
||||
How to generate a spotify code
|
||||
-
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
Log in to see all results
|
||||
--
|
||||
View All
|
||||
82,799,750
|
||||
Also ranks for
|
||||
qr code maker
|
||||
52,000
|
||||
spotify codes
|
||||
7,100
|
||||
spotify code
|
||||
5,700
|
||||
qrcode
|
||||
11,900
|
||||
create qr code
|
||||
29,500
|
||||
156
seo_2026_jan.md
@@ -1,156 +0,0 @@
|
||||
SEO Opportunity Report & Implementation Plan (Jan 2026)
|
||||
1. Executive Summary
|
||||
An analysis of the provided Google Keyword Planner data (Jan 22, 2026) reveals significant low-competition, high-volume traffic opportunities that were previously untapped. We have immediately capitalized on the Barcode opportunity and have a clear path to capture Custom QR intent.
|
||||
|
||||
2. Key Data Findings ("Hidden Gems")
|
||||
We identified three specific clusters where search volume is high but competition is exceptionally low.
|
||||
|
||||
A. The "QR Barcode" Anomaly (Gold Mine) 🏆
|
||||
Users are confused about the terminology, searching for "qr barcode" or "bar code generator" instead of just "barcode".
|
||||
|
||||
Keywords: qr barcode, bar code generator, scan code generator
|
||||
Volume: 10k – 100k (High)
|
||||
Competition: Low / Medium
|
||||
Opportunity: Most competitors optimize for "Barcode Generator". By targeting the "wrong" terms users actually type, we can win easy traffic.
|
||||
B. The "Free" Intent
|
||||
High volume, but users are specifically looking for "free" and "no signup".
|
||||
|
||||
Keyword: free qr code generator (100k – 1M)
|
||||
Keyword: qr code generator free (100k – 1M)
|
||||
Opportunity: Aggressive targeting of these exact match phrases on the homepage metadata.
|
||||
C. The "Custom" Gap
|
||||
Users want customization but don't always use the term "design".
|
||||
|
||||
Keyword: custom qr code generator
|
||||
Volume: 1k – 10k
|
||||
Competition: Low
|
||||
Current Status: MISSING. We do not have a dedicated landing page for this high-intent cluster.
|
||||
3. Actions Already Implemented ✅
|
||||
We have immediately updated the metadata to capture the traffic identified in findings A and B.
|
||||
|
||||
1. Barcode Generator Optimization
|
||||
File:
|
||||
src/app/(marketing)/tools/barcode-generator/page.tsx
|
||||
|
||||
Action: Updated <title> and meta description.
|
||||
New Target: "QR Barcode" and "Bar Code Generator".
|
||||
Why: To capture the 100k+ users searching for these specific variants.
|
||||
2. Homepage Optimization
|
||||
File:
|
||||
src/app/(marketing)/page.tsx
|
||||
|
||||
Action: Injected high-volume keyword tags.
|
||||
New Target: qr generator, free qr code generator, custom qr code generator.
|
||||
Why: To signal relevance to Google for the broadest "head terms".
|
||||
4. Implementation Plan: "Custom QR Code" Landing Page 🚀
|
||||
To capture the 1k–10k/month users searching for "custom qr code generator" (Finding C), we need a dedicated landing page. This page will focus on design features (colors, logos, frames) rather than just "generating" a code.
|
||||
|
||||
Phase 1: Page Structure (New File)
|
||||
Path: src/app/(marketing)/tools/custom-qr-code-generator/page.tsx
|
||||
|
||||
Content Strategy:
|
||||
|
||||
H1: "Free Custom QR Code Generator with Logo & Colors"
|
||||
Hero: Visual emphasis on beautiful codes, not black-and-white ones.
|
||||
Live Editor Demo: (Reuse existing QRCodeGeneratorClient but pre-opened "Design" tab).
|
||||
Features Section:
|
||||
"Add Your Logo"
|
||||
"Custom Colors & Gradients"
|
||||
"Unique Frames & Shapes"
|
||||
FAQ: Targeting specific "custom" questions (vector formats, scanning reliability).
|
||||
Phase 2: Internal Linking
|
||||
Add link to /tools/custom-qr-code-generator in the Footer and Main Navigation under "Tools".
|
||||
Link from Homepage "Features" section.
|
||||
Phase 3: Metadata Strategy
|
||||
title: 'Custom QR Code Generator – Add Logo, Colors & Frames',
|
||||
description: 'Create unique custom QR codes with your logo, colors, and frames. Free online customizer with high-quality vector download (SVG/PNG).',
|
||||
keywords: ['custom qr code generator', 'qr code with logo', 'qr code design', 'creative qr code', 'branded qr code']
|
||||
5. Next Steps
|
||||
Approval: Confirm this plan to build the custom-qr-code-generator page.
|
||||
Execution: I will create the directory and page file.
|
||||
Verify: Check that the new page renders and is linked correctly.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
new findings
|
||||
|
||||
Das ist super, dass du die Dateien hochgeladen hast! Denn: Du hast die Daten bereits.
|
||||
|
||||
Ich habe deine Excel-Listen analysiert und das Problem gefunden: In deiner Ansicht im Tool hieß die Spalte vielleicht anders oder war versteckt, aber in der Datei heißt sie Avg. monthly searches. Das ist exakt das Suchvolumen, das du gesucht hast.
|
||||
|
||||
Hier sind die echten "Schätze" direkt aus deiner Datei, gefiltert nach meiner Strategie:
|
||||
|
||||
1. Die "Low Hanging Fruits" (Viel Traffic, fast 0 Konkurrenz)
|
||||
Das sind die Keywords, bei denen du SOFORT ranken kannst, weil die großen Player schlafen.
|
||||
|
||||
call qr code
|
||||
|
||||
Suchvolumen: 50.000 (!)
|
||||
|
||||
Wettbewerb-Index: 0 (Das ist extrem selten! Absolut gar keine Konkurrenz auf Google Ads).
|
||||
|
||||
Idee: Mach eine Seite "Telefon-QR-Code erstellen". Leute wollen, dass beim Scannen direkt eine Nummer gewählt wird. Das ist eine riesige Nische.
|
||||
|
||||
generate website qr code
|
||||
|
||||
Suchvolumen: 50.000
|
||||
|
||||
Wettbewerb-Index: 17 (Sehr gering).
|
||||
|
||||
CPC: 6,16 € (Das ist der Jackpot: Viel Traffic, wenig Konkurrenz UND hoher Wert).
|
||||
|
||||
bar code generator
|
||||
|
||||
Suchvolumen: 500.000
|
||||
|
||||
Wettbewerb-Index: 3 (Fast nichts).
|
||||
|
||||
Bestätigt meine frühere Analyse: Das ist dein Traffic-Bringer.
|
||||
|
||||
2. Die "Goldminen" (Hoher Klickpreis / High Ticket)
|
||||
Hier zahlen Firmen richtig Geld. Wenn du hier rankst, sind die Nutzer sehr wertvoll.
|
||||
|
||||
manage qr codes
|
||||
|
||||
CPC (Gebot): 18,77 €
|
||||
|
||||
Das suchen Firmen, die viele Codes verwalten müssen (Agenturen, Großkunden). Perfekt für dein "Pro"-Abo.
|
||||
|
||||
dynamic code generator
|
||||
|
||||
CPC: 15,62 €
|
||||
|
||||
Das Kern-Keyword für dein Business-Modell.
|
||||
|
||||
qr tracking
|
||||
|
||||
CPC: 12,51 €
|
||||
|
||||
Wettbewerb ist hier höher, aber der Umsatz pro Kunde auch.
|
||||
|
||||
3. Der Trend-Tipp (+900% Wachstum)
|
||||
free bulk qr code generator (Massen-Erstellung)
|
||||
|
||||
Trend: +900%
|
||||
|
||||
Viele Leute suchen nach einer Möglichkeit, 100 Codes auf einmal zu erstellen (z.B. für Mitarbeiterausweise oder Inventar). Wenn du so ein Feature ("Bulk Upload") hast oder baust, bist du Marktführer.
|
||||
|
||||
Was du jetzt tun musst (in Excel oder Google Sheets):
|
||||
Du brauchst das Tool gar nicht mehr zwingend. Du kannst einfach in deiner Datei filtern:
|
||||
|
||||
Such die Spalte Avg. monthly searches -> Das ist dein Suchvolumen.
|
||||
|
||||
Such die Spalte Competition (indexed value) -> Das ist die Härte (0-100).
|
||||
|
||||
Filter: Avg. monthly searches > 1000 UND Competition (indexed value) < 20.
|
||||
|
||||
Damit findest du genau die oben genannten Chancen. Soll ich dir für eines dieser Keywords (z.B. den "Call QR Code" mit Index 0) eine Gliederung schreiben?
|
||||
100
seo_findings.md
@@ -1,100 +0,0 @@
|
||||
# QR Master SEO Analysis Report
|
||||
**Domain:** www.qrmaster.net
|
||||
**Date:** January 5, 2026
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
| Metric | Current | Target |
|
||||
|--------|---------|--------|
|
||||
| Domain Rating (DR) | 0 | 20+ |
|
||||
| Backlinks | 0 | 50+ |
|
||||
| OnPage Score | 67% | 90%+ |
|
||||
| Organic Keywords | 0 | 50+ |
|
||||
|
||||
---
|
||||
|
||||
## ✅ What's Working Well
|
||||
|
||||
- **Meta-Angaben:** 100% ✓ (Title, Description, Canonical)
|
||||
- **Mobile Optimization:** Viewport + Apple Touch Icon ✓
|
||||
- **HTTPS:** Fully implemented ✓
|
||||
- **Doctype & Encoding:** Correct ✓
|
||||
- **Server Configuration:** 90% ✓ (redirects, compression)
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Critical Issues (Fix Immediately)
|
||||
|
||||
### 1. Missing H1 & Content
|
||||
- **Problem:** "0 words" detected on homepage
|
||||
- **Cause:** Client-side rendering not visible to crawlers
|
||||
- **Status:** ✅ FIXED - Added server-side SEO content block
|
||||
|
||||
### 2. No Internal Links
|
||||
- **Problem:** Homepage appears as landing page with few links
|
||||
- **Solution:** Blog posts now include internal links to key pages
|
||||
|
||||
### 3. X-Powered-By Header
|
||||
- **Problem:** Exposes tech stack
|
||||
- **Status:** ✅ FIXED - Added `poweredByHeader: false` to next.config
|
||||
|
||||
### 4. Zero Backlinks
|
||||
- **Problem:** No external links pointing to domain
|
||||
- **Solution:** Submit to directories, create Claude artifacts
|
||||
|
||||
---
|
||||
|
||||
## Keyword Opportunities
|
||||
|
||||
### High Priority (Low/Medium Difficulty)
|
||||
| Keyword | KD | Volume | Action |
|
||||
|---------|-----|--------|--------|
|
||||
| qr code tracking | 4 (Easy) | ~1.7K | ✅ Existing blog post |
|
||||
| qr code for restaurant menu | 44 (Hard) | ~100+ | ✅ NEW blog post |
|
||||
| vcard qr code generator | 47 (Hard) | ~100+ | ✅ NEW blog post |
|
||||
| bulk qr code generator | 54 (Hard) | ~795 | ✅ Existing page |
|
||||
|
||||
### Avoid (Too Competitive)
|
||||
| Keyword | KD | Required Backlinks |
|
||||
|---------|-----|-------------------|
|
||||
| qr code generator | 94 | ~1,197 |
|
||||
| dynamic qr code generator | 85 | ~488 |
|
||||
|
||||
---
|
||||
|
||||
## Competitor Analysis (Top 3)
|
||||
|
||||
| Rank | Domain | DR | Backlinks | Traffic |
|
||||
|------|--------|-----|-----------|---------|
|
||||
| 1 | qr-code-generator.com | 83 | 67K | 986K |
|
||||
| 2 | canva.com/qr | 93 | 7.4K | 433K |
|
||||
| 3 | adobe.com/express/qr | 96 | 13K | 317K |
|
||||
|
||||
**Takeaway:** Focus on long-tail keywords and niche content. Direct competition for head terms is not viable without 100+ quality backlinks.
|
||||
|
||||
---
|
||||
|
||||
## Action Plan
|
||||
|
||||
### Phase 1: Technical (Completed ✅)
|
||||
- [x] Add server-side H1 to homepage
|
||||
- [x] Remove X-Powered-By header
|
||||
- [x] Add 4 new blog posts
|
||||
|
||||
### Phase 2: Backlinks (Your Action Required)
|
||||
- [ ] Submit to Product Hunt
|
||||
- [ ] Submit to AlternativeTo
|
||||
- [ ] Submit to SaaSHub
|
||||
- [ ] Create Claude artifacts with backlinks
|
||||
|
||||
### Phase 3: Monitoring
|
||||
- [ ] Re-run SEO audit in 2 weeks
|
||||
- [ ] Check GSC for indexed pages
|
||||
- [ ] Monitor keyword rankings monthly
|
||||
|
||||
---
|
||||
|
||||
## Source Data
|
||||
Raw data from: Seobility SEO Check, Ahrefs Free Tools, SpyFu
|
||||
68
seo_tasks.md
@@ -1,68 +0,0 @@
|
||||
# SEO Remaining Tasks
|
||||
|
||||
This document contains a list of all SEO issues identified in the Ahrefs and Seobility reports that still need to be addressed in the codebase.
|
||||
|
||||
## 1. Content & Metadata Issues
|
||||
|
||||
- [ ] **Fix Missing H1 Tags on Core Pages**
|
||||
- Affected Pages: `/`, `/pricing`, `/login`, `/signup`, `/faq`, `/privacy`, `/newsletter`, `/create`.
|
||||
- **Issue:** These pages are Client Side Rendered (CSR) or lack a server-side `<h1>` tag in the initial HTML payload.
|
||||
- **Action:** Add an `<h1>` (visible or `sr-only`) to the Server Component or ensure the Client Component renders it immediately.
|
||||
|
||||
- [ ] **Fix Low Word Count / Thin Content**
|
||||
- Affected Pages: `/`, `/pricing`, `/login`, `/signup`, `/faq`, `/privacy`.
|
||||
- **Issue:** Crawlers see 0 words on these pages because the content is rendered via JavaScript (`use client`).
|
||||
- **Action:** Implement Server Side Rendering (SSR) for the main content or add `sr-only` semantic fallbacks for crawlers.
|
||||
|
||||
- [ ] **Expand Meta Descriptions**
|
||||
- Affected Pages: `/`, `/pricing`, `/login`, `/signup`, `/newsletter`, `/privacy`, `/faq`, `/qr-code-erstellen`, Blog entries.
|
||||
- **Issue:** Meta descriptions are too short (< 80 characters) or duplicates.
|
||||
- **Action:** Update `generateMetadata` in `page.tsx` files to have descriptions between 110-160 characters.
|
||||
|
||||
- [ ] **Fix Page Titles**
|
||||
- Affected Pages: `/qr-code-erstellen`, Blog posts.
|
||||
- **Issue:** Titles are too long (> 60-70 characters) or have keyword stuffing/repetition.
|
||||
- **Action:** Shorten titles to be concise and click-worthy, avoiding simple concatenation of keywords.
|
||||
|
||||
- [ ] **Fix Duplicate Content & Titles**
|
||||
- Affected Pages: `/pricing`, `/newsletter`, `/login`, `/signup`.
|
||||
- **Issue:** These pages likely share the same metadata or layout without unique content in the crawler's eyes.
|
||||
- **Action:** Ensure each page has unique `title` and `description` in `generateMetadata`.
|
||||
|
||||
## 2. Technical SEO
|
||||
|
||||
- [ ] **Fix 307 Redirects to 301**
|
||||
- **Issue:** Blog posts and legacy URLs are redirecting with status `307` (Temporary) instead of `301` (Permanent).
|
||||
- **Affected Paths:**
|
||||
- `/blog/vcard-qr-code-generator` -> `/create`
|
||||
- `/blog/qr-code-restaurant-menu` -> `/dynamic-qr-code-generator`
|
||||
- `/blog/bulk-qr-code-generator` -> `/bulk-qr-code-generator`
|
||||
- **Action:** Locate these redirects (likely in `next.config.js` or `middleware.ts` or component logic) and change status to 301.
|
||||
|
||||
- [ ] **Fix Indexing of Protected/Private Pages**
|
||||
- **Issue:** Ahrefs is flagging `/pricing` as "Indexable" but likely encountering issues. Verify if `/pricing` should be indexed.
|
||||
- **Action:** Ensure public pages like Pricing are NOT in `(app)` group which has `noindex` in layout, or override the `robots` meta in `pricing/page.tsx`.
|
||||
|
||||
- [ ] **Fix "No Outgoing Links"**
|
||||
- **Issue:** Crawlers see pages as dead ends because links are injected via JS.
|
||||
- **Action:** Ensure standard `<a>` or `Link` tags are present in the initial HTML.
|
||||
|
||||
## 3. Link Profile
|
||||
|
||||
- [ ] **Improve Internal Link Texts**
|
||||
- **Issue:** "Click here" or full URL used as anchor text.
|
||||
- **Action:** Use descriptive keywords for links (e.g., "See our pricing" instead of "Click here").
|
||||
|
||||
- [ ] **Fix Alternate Links (hreflang)**
|
||||
- **Issue:** Mismatch in `hreflang` or missing self-referencing canonicals.
|
||||
- **Action:** Verify `alternates` configuration in `layout.tsx` or `page.tsx` matches the actual URL structure.
|
||||
|
||||
## 4. Performance & Images
|
||||
|
||||
- [ ] **Optimize Large Images**
|
||||
- **Files:** `/blog/1-boy.png`, `/blog/2-body.png` (~4MB each).
|
||||
- **Action:** Convert to WebP/AVIF and resize to < 500KB.
|
||||
|
||||
- [ ] **Improve Page Speed**
|
||||
- **Issue:** Response time for `/qr-code-erstellen` is slow.
|
||||
- **Action:** Check for expensive server-side operations or optimize database queries.
|
||||
@@ -22,8 +22,10 @@ interface BulkQRData {
|
||||
|
||||
interface GeneratedQR {
|
||||
title: string;
|
||||
content: string; // Original URL
|
||||
svg: string; // SVG markup
|
||||
content: string;
|
||||
svg: string;
|
||||
slug?: string;
|
||||
redirectUrl?: string;
|
||||
}
|
||||
|
||||
export default function BulkCreationPage() {
|
||||
@@ -35,16 +37,25 @@ export default function BulkCreationPage() {
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [generatedQRs, setGeneratedQRs] = useState<GeneratedQR[]>([]);
|
||||
const [userPlan, setUserPlan] = useState<string>('FREE');
|
||||
const [isDynamic, setIsDynamic] = useState(false);
|
||||
const [remainingDynamic, setRemainingDynamic] = useState(0);
|
||||
|
||||
// Check user plan on mount
|
||||
// Check user plan and dynamic quota on mount
|
||||
React.useEffect(() => {
|
||||
const checkPlan = async () => {
|
||||
try {
|
||||
const response = await fetch('/api/user/plan');
|
||||
if (response.ok) {
|
||||
const data = await response.json();
|
||||
const [planRes, statsRes] = await Promise.all([
|
||||
fetch('/api/user/plan'),
|
||||
fetch('/api/user/stats'),
|
||||
]);
|
||||
if (planRes.ok) {
|
||||
const data = await planRes.json();
|
||||
setUserPlan(data.plan || 'FREE');
|
||||
}
|
||||
if (statsRes.ok) {
|
||||
const stats = await statsRes.json();
|
||||
setRemainingDynamic((stats.dynamicLimit || 0) - (stats.dynamicUsed || 0));
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error checking plan:', error);
|
||||
}
|
||||
@@ -196,6 +207,58 @@ export default function BulkCreationPage() {
|
||||
}
|
||||
};
|
||||
|
||||
const generateDynamicQRCodes = async () => {
|
||||
setLoading(true);
|
||||
const toProcess = remainingDynamic > 0 ? data.slice(0, remainingDynamic) : [];
|
||||
|
||||
if (toProcess.length === 0) {
|
||||
showToast('Du hast keine dynamischen QR-Codes mehr übrig. Bitte upgrade deinen Plan.', 'error');
|
||||
setLoading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (data.length > remainingDynamic) {
|
||||
showToast(`Nur ${remainingDynamic} dynamische Codes verfügbar. Es werden nur die ersten ${remainingDynamic} Zeilen verarbeitet.`, 'warning');
|
||||
}
|
||||
|
||||
try {
|
||||
const QRCode = require('qrcode');
|
||||
const results: GeneratedQR[] = [];
|
||||
|
||||
for (const row of toProcess) {
|
||||
const title = String(row[mapping.title as keyof typeof row] || 'Untitled');
|
||||
const url = String(row[mapping.content as keyof typeof row] || 'https://example.com');
|
||||
|
||||
const res = await fetchWithCsrf('/api/qrs', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
title,
|
||||
contentType: 'URL',
|
||||
content: { url },
|
||||
isStatic: false,
|
||||
}),
|
||||
});
|
||||
|
||||
if (res.ok) {
|
||||
const qr = await res.json();
|
||||
const redirectUrl = `${window.location.origin}/r/${qr.slug}`;
|
||||
const svg = await QRCode.toString(redirectUrl, { type: 'svg', width: 300, margin: 2 });
|
||||
results.push({ title, content: url, svg, slug: qr.slug, redirectUrl });
|
||||
}
|
||||
}
|
||||
|
||||
setGeneratedQRs(results);
|
||||
setRemainingDynamic(prev => Math.max(0, prev - results.length));
|
||||
setStep('complete');
|
||||
showToast(`${results.length} dynamische QR-Codes erstellt!`, 'success');
|
||||
} catch (error) {
|
||||
console.error('Dynamic QR generation error:', error);
|
||||
showToast('Fehler beim Erstellen der dynamischen QR-Codes', 'error');
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
const downloadAllQRCodes = async () => {
|
||||
const zip = new JSZip();
|
||||
|
||||
@@ -204,6 +267,18 @@ export default function BulkCreationPage() {
|
||||
zip.file(fileName, qr.svg);
|
||||
});
|
||||
|
||||
// Add metadata CSV for dynamic QR codes
|
||||
const hasDynamic = generatedQRs.some(qr => qr.slug);
|
||||
if (hasDynamic) {
|
||||
const csvRows = ['title,original_url,redirect_url,slug'];
|
||||
generatedQRs.forEach(qr => {
|
||||
if (qr.slug) {
|
||||
csvRows.push(`"${qr.title}","${qr.content}","${qr.redirectUrl}","${qr.slug}"`);
|
||||
}
|
||||
});
|
||||
zip.file('metadata.csv', csvRows.join('\n'));
|
||||
}
|
||||
|
||||
const blob = await zip.generateAsync({ type: 'blob' });
|
||||
saveAs(blob, 'qr-codes-bulk.zip');
|
||||
showToast('Download started!', 'success');
|
||||
@@ -274,8 +349,8 @@ export default function BulkCreationPage() {
|
||||
URL.revokeObjectURL(url);
|
||||
};
|
||||
|
||||
// Show upgrade prompt if not Business plan
|
||||
if (userPlan !== 'BUSINESS') {
|
||||
// Show upgrade prompt if not Business or Enterprise plan
|
||||
if (userPlan !== 'BUSINESS' && userPlan !== 'ENTERPRISE') {
|
||||
return (
|
||||
<div className="max-w-4xl mx-auto">
|
||||
<Card className="mt-12">
|
||||
@@ -309,6 +384,39 @@ export default function BulkCreationPage() {
|
||||
<div className="mb-8">
|
||||
<h1 className="text-3xl font-bold text-gray-900">{t('bulk.title')}</h1>
|
||||
<p className="text-gray-600 mt-2">{t('bulk.subtitle')}</p>
|
||||
|
||||
{/* Static / Dynamic Toggle */}
|
||||
<div className="mt-4 flex items-center gap-4 p-4 bg-gray-50 rounded-xl border border-gray-200">
|
||||
<span className="text-sm font-medium text-gray-700">QR Code Type:</span>
|
||||
<label className="flex items-center gap-2 cursor-pointer">
|
||||
<input
|
||||
type="radio"
|
||||
checked={!isDynamic}
|
||||
onChange={() => setIsDynamic(false)}
|
||||
className="accent-primary-600"
|
||||
/>
|
||||
<span className="text-sm font-medium">Static</span>
|
||||
<span className="text-xs text-gray-500">(download only, no tracking)</span>
|
||||
</label>
|
||||
<label className={`flex items-center gap-2 ${userPlan === 'BUSINESS' || userPlan === 'ENTERPRISE' ? 'cursor-pointer' : 'opacity-50 cursor-not-allowed'}`}>
|
||||
<input
|
||||
type="radio"
|
||||
checked={isDynamic}
|
||||
onChange={() => setIsDynamic(true)}
|
||||
disabled={userPlan !== 'BUSINESS' && userPlan !== 'ENTERPRISE'}
|
||||
className="accent-primary-600"
|
||||
/>
|
||||
<span className="text-sm font-medium">Dynamic</span>
|
||||
{isDynamic && remainingDynamic > 0 && (
|
||||
<span className="text-xs bg-blue-100 text-blue-700 px-2 py-0.5 rounded-full">
|
||||
{remainingDynamic} verbleibend
|
||||
</span>
|
||||
)}
|
||||
{(userPlan !== 'BUSINESS' && userPlan !== 'ENTERPRISE') && (
|
||||
<span className="text-xs text-amber-600">(Business Plan erforderlich)</span>
|
||||
)}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Template Warning Banner */}
|
||||
@@ -641,8 +749,13 @@ export default function BulkCreationPage() {
|
||||
<Button variant="outline" onClick={() => setStep('upload')}>
|
||||
Back
|
||||
</Button>
|
||||
<Button onClick={generateStaticQRCodes} loading={loading}>
|
||||
Generate {data.length} Static QR Codes
|
||||
<Button
|
||||
onClick={isDynamic ? generateDynamicQRCodes : generateStaticQRCodes}
|
||||
loading={loading}
|
||||
>
|
||||
{isDynamic
|
||||
? `Generate ${Math.min(data.length, remainingDynamic)} Dynamic QR Codes`
|
||||
: `Generate ${data.length} Static QR Codes`}
|
||||
</Button>
|
||||
</div>
|
||||
</CardContent>
|
||||
|
||||
@@ -15,8 +15,9 @@ import { useTranslation } from '@/hooks/useTranslation';
|
||||
import { useCsrf } from '@/hooks/useCsrf';
|
||||
import { showToast } from '@/components/ui/Toast';
|
||||
import {
|
||||
Globe, User, MapPin, Phone, FileText, Smartphone, Ticket, Star, HelpCircle, Upload
|
||||
Globe, User, MapPin, Phone, FileText, Smartphone, Ticket, Star, HelpCircle, Upload, Barcode as BarcodeIcon
|
||||
} from 'lucide-react';
|
||||
import Barcode from 'react-barcode';
|
||||
|
||||
// Tooltip component for form field help
|
||||
const Tooltip = ({ text }: { text: string }) => (
|
||||
@@ -140,6 +141,7 @@ export default function CreatePage() {
|
||||
{ value: 'APP', label: 'App Download', icon: Smartphone },
|
||||
{ value: 'COUPON', label: 'Coupon / Discount', icon: Ticket },
|
||||
{ value: 'FEEDBACK', label: 'Feedback / Review', icon: Star },
|
||||
{ value: 'BARCODE', label: 'Barcode', icon: BarcodeIcon },
|
||||
];
|
||||
|
||||
// Get QR content based on content type
|
||||
@@ -170,6 +172,8 @@ export default function CreatePage() {
|
||||
return `Coupon: ${content.code || 'SAVE20'} - ${content.discount || '20% OFF'}`;
|
||||
case 'FEEDBACK':
|
||||
return content.feedbackUrl || 'https://example.com/feedback';
|
||||
case 'BARCODE':
|
||||
return content.value || '123456789';
|
||||
default:
|
||||
return 'https://example.com';
|
||||
}
|
||||
@@ -642,6 +646,68 @@ export default function CreatePage() {
|
||||
/>
|
||||
</>
|
||||
);
|
||||
case 'BARCODE':
|
||||
return (
|
||||
<>
|
||||
{isDynamic ? (
|
||||
<>
|
||||
<div className="rounded-lg bg-blue-50 border border-blue-200 p-3 text-sm text-blue-800">
|
||||
<strong>How dynamic barcodes work:</strong> The barcode encodes a short redirect URL
|
||||
(e.g. <span className="font-mono text-xs">qrmaster.net/r/…</span>). When scanned with a
|
||||
smartphone camera, it opens the browser and redirects to your destination — which you
|
||||
can update anytime. Works with smartphone cameras, not POS laser scanners.
|
||||
</div>
|
||||
<Input
|
||||
label="Destination URL"
|
||||
value={content.url || ''}
|
||||
onChange={(e) => setContent({ ...content, url: e.target.value })}
|
||||
placeholder="https://example.com"
|
||||
required
|
||||
/>
|
||||
<div>
|
||||
<label className="block text-sm font-medium text-gray-700 mb-1">Barcode Format</label>
|
||||
<select
|
||||
value={['CODE128', 'CODE39'].includes(content.format) ? content.format : 'CODE128'}
|
||||
onChange={(e) => setContent({ ...content, format: e.target.value })}
|
||||
className="w-full border border-gray-300 rounded-lg px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary-500"
|
||||
>
|
||||
<option value="CODE128">CODE128 — General purpose (recommended)</option>
|
||||
<option value="CODE39">CODE39 — Industrial / logistics</option>
|
||||
</select>
|
||||
<p className="text-xs text-gray-500 mt-1">
|
||||
Only URL-capable formats available. EAN-13, UPC, and ITF-14 encode numbers only and cannot embed a redirect URL.
|
||||
</p>
|
||||
</div>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Input
|
||||
label="Barcode Value"
|
||||
value={content.value || ''}
|
||||
onChange={(e) => setContent({ ...content, value: e.target.value })}
|
||||
placeholder="123456789012"
|
||||
required
|
||||
/>
|
||||
<div>
|
||||
<label className="block text-sm font-medium text-gray-700 mb-1">Barcode Format</label>
|
||||
<select
|
||||
value={content.format || 'CODE128'}
|
||||
onChange={(e) => setContent({ ...content, format: e.target.value })}
|
||||
className="w-full border border-gray-300 rounded-lg px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary-500"
|
||||
>
|
||||
<option value="CODE128">CODE128 — General purpose (recommended)</option>
|
||||
<option value="EAN13">EAN-13 — Retail products (international)</option>
|
||||
<option value="UPC">UPC — Retail products (USA/Canada)</option>
|
||||
<option value="CODE39">CODE39 — Industrial / logistics</option>
|
||||
<option value="ITF14">ITF-14 — Shipping containers</option>
|
||||
<option value="MSI">MSI — Shelf labeling / inventory</option>
|
||||
<option value="pharmacode">Pharmacode — Pharmaceutical packaging</option>
|
||||
</select>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
@@ -992,7 +1058,25 @@ export default function CreatePage() {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{qrContent ? (
|
||||
{contentType === 'BARCODE' ? (
|
||||
qrContent ? (
|
||||
<div className="p-2 bg-white">
|
||||
<Barcode
|
||||
value={qrContent}
|
||||
format={content.format || 'CODE128'}
|
||||
lineColor={foregroundColor}
|
||||
background={backgroundColor}
|
||||
width={2}
|
||||
height={100}
|
||||
displayValue={true}
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
<div className="w-[200px] h-[200px] bg-gray-100 rounded flex items-center justify-center text-gray-500">
|
||||
Enter barcode value
|
||||
</div>
|
||||
)
|
||||
) : qrContent ? (
|
||||
<div className={cornerStyle === 'rounded' ? 'rounded-lg overflow-hidden' : ''}>
|
||||
<QRCodeSVG
|
||||
value={qrContent}
|
||||
|
||||
@@ -165,6 +165,8 @@ export default function SettingsPage() {
|
||||
return { dynamic: 50, price: '€9', period: 'per month' };
|
||||
case 'BUSINESS':
|
||||
return { dynamic: 500, price: '€29', period: 'per month' };
|
||||
case 'ENTERPRISE':
|
||||
return { dynamic: 99999, price: 'Custom', period: 'per month' };
|
||||
default:
|
||||
return { dynamic: 3, price: '€0', period: 'forever' };
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ export default function LoginClient({ showPageHeading = true }: LoginClientProps
|
||||
const [password, setPassword] = useState('');
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [error, setError] = useState('');
|
||||
const [showPassword, setShowPassword] = useState(false);
|
||||
|
||||
const handleSubmit = async (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
@@ -112,14 +113,37 @@ export default function LoginClient({ showPageHeading = true }: LoginClientProps
|
||||
required
|
||||
/>
|
||||
|
||||
<Input
|
||||
label="Password"
|
||||
type="password"
|
||||
value={password}
|
||||
onChange={(e) => setPassword(e.target.value)}
|
||||
placeholder="••••••••"
|
||||
required
|
||||
/>
|
||||
<div className="space-y-1">
|
||||
<label htmlFor="password" className="block text-sm font-medium text-gray-700">Password</label>
|
||||
<div className="relative">
|
||||
<input
|
||||
id="password"
|
||||
type={showPassword ? 'text' : 'password'}
|
||||
value={password}
|
||||
onChange={(e) => setPassword(e.target.value)}
|
||||
placeholder="••••••••"
|
||||
required
|
||||
className="flex h-10 w-full rounded-lg border border-gray-300 bg-white px-3 py-2 pr-10 text-sm placeholder:text-gray-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2"
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setShowPassword(!showPassword)}
|
||||
className="absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600"
|
||||
tabIndex={-1}
|
||||
>
|
||||
{showPassword ? (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21" />
|
||||
</svg>
|
||||
) : (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" />
|
||||
</svg>
|
||||
)}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex items-center justify-between">
|
||||
<label className="flex items-center">
|
||||
|
||||
@@ -19,6 +19,8 @@ export default function SignupClient() {
|
||||
const [confirmPassword, setConfirmPassword] = useState('');
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [error, setError] = useState('');
|
||||
const [showPassword, setShowPassword] = useState(false);
|
||||
const [showConfirmPassword, setShowConfirmPassword] = useState(false);
|
||||
|
||||
const handleSubmit = async (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
@@ -126,23 +128,69 @@ export default function SignupClient() {
|
||||
required
|
||||
/>
|
||||
|
||||
<Input
|
||||
label="Password"
|
||||
type="password"
|
||||
value={password}
|
||||
onChange={(e) => setPassword(e.target.value)}
|
||||
placeholder="••••••••"
|
||||
required
|
||||
/>
|
||||
<div className="space-y-1">
|
||||
<label htmlFor="password" className="block text-sm font-medium text-gray-700">Password</label>
|
||||
<div className="relative">
|
||||
<input
|
||||
id="password"
|
||||
type={showPassword ? 'text' : 'password'}
|
||||
value={password}
|
||||
onChange={(e) => setPassword(e.target.value)}
|
||||
placeholder="••••••••"
|
||||
required
|
||||
className="flex h-10 w-full rounded-lg border border-gray-300 bg-white px-3 py-2 pr-10 text-sm placeholder:text-gray-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2"
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setShowPassword(!showPassword)}
|
||||
className="absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600"
|
||||
tabIndex={-1}
|
||||
>
|
||||
{showPassword ? (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21" />
|
||||
</svg>
|
||||
) : (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" />
|
||||
</svg>
|
||||
)}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Input
|
||||
label="Confirm Password"
|
||||
type="password"
|
||||
value={confirmPassword}
|
||||
onChange={(e) => setConfirmPassword(e.target.value)}
|
||||
placeholder="••••••••"
|
||||
required
|
||||
/>
|
||||
<div className="space-y-1">
|
||||
<label htmlFor="confirm-password" className="block text-sm font-medium text-gray-700">Confirm Password</label>
|
||||
<div className="relative">
|
||||
<input
|
||||
id="confirm-password"
|
||||
type={showConfirmPassword ? 'text' : 'password'}
|
||||
value={confirmPassword}
|
||||
onChange={(e) => setConfirmPassword(e.target.value)}
|
||||
placeholder="••••••••"
|
||||
required
|
||||
className="flex h-10 w-full rounded-lg border border-gray-300 bg-white px-3 py-2 pr-10 text-sm placeholder:text-gray-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2"
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setShowConfirmPassword(!showConfirmPassword)}
|
||||
className="absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600"
|
||||
tabIndex={-1}
|
||||
>
|
||||
{showConfirmPassword ? (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21" />
|
||||
</svg>
|
||||
) : (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" />
|
||||
</svg>
|
||||
)}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Button type="submit" className="w-full" loading={loading}>
|
||||
Create Account
|
||||
|
||||
@@ -10,6 +10,14 @@ import { blogPostingSchema, howToSchema, faqPageSchema, breadcrumbSchema } from
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
|
||||
function formatIsoDate(date: string) {
|
||||
return new Date(date).toLocaleDateString("en-US", {
|
||||
year: "numeric",
|
||||
month: "long",
|
||||
day: "numeric",
|
||||
});
|
||||
}
|
||||
|
||||
export function generateMetadata({ params }: { params: { slug: string } }) {
|
||||
const post = getPublishedPostBySlug(params.slug);
|
||||
if (!post) return {};
|
||||
@@ -25,15 +33,15 @@ export function generateMetadata({ params }: { params: { slug: string } }) {
|
||||
openGraph: {
|
||||
title: post.title,
|
||||
description: post.description,
|
||||
type: 'article',
|
||||
type: "article",
|
||||
publishedTime: post.datePublished,
|
||||
modifiedTime: post.dateModified || post.datePublished,
|
||||
authors: ['https://www.qrmaster.net'],
|
||||
authors: ["https://www.qrmaster.net"],
|
||||
tags: post.keywords,
|
||||
images: ogImage ? [{ url: ogImage, alt: post.imageAlt || post.title }] : undefined,
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
card: "summary_large_image",
|
||||
title: post.title,
|
||||
description: post.description,
|
||||
images: ogImage ? [ogImage] : undefined,
|
||||
@@ -48,7 +56,6 @@ export function generateStaticParams() {
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
export default function BlogPostPage({ params }: { params: { slug: string } }) {
|
||||
const post = getPublishedPostBySlug(params.slug);
|
||||
if (!post) return notFound(); // STRICT 404 GATE
|
||||
@@ -59,12 +66,14 @@ export default function BlogPostPage({ params }: { params: { slug: string } }) {
|
||||
const jsonLd = blogPostingSchema(post, author);
|
||||
const howtoLd = post.keySteps?.length ? howToSchema(post, author) : null;
|
||||
const faqLd = post.faq ? faqPageSchema(post.faq) : null;
|
||||
const visibleUpdated = post.updatedAt || post.dateModified;
|
||||
const showUpdated = Boolean(visibleUpdated && visibleUpdated !== post.datePublished);
|
||||
|
||||
// Generate breadcrumb schema: Home → Learn → Pillar → Post
|
||||
const pillarName = post.pillar ? post.pillar.charAt(0).toUpperCase() + post.pillar.slice(1) : 'Blog';
|
||||
// Generate breadcrumb schema: Home -> Learn -> Pillar -> Post
|
||||
const pillarName = post.pillar ? post.pillar.charAt(0).toUpperCase() + post.pillar.slice(1) : "Blog";
|
||||
const breadcrumbLd = breadcrumbSchema([
|
||||
{ name: 'Home', url: '/' },
|
||||
{ name: 'Learn', url: '/learn' },
|
||||
{ name: "Home", url: "/" },
|
||||
{ name: "Learn", url: "/learn" },
|
||||
{ name: pillarName, url: `/learn/${post.pillar}` },
|
||||
{ name: post.title, url: `/blog/${post.slug}` },
|
||||
]);
|
||||
@@ -106,8 +115,8 @@ export default function BlogPostPage({ params }: { params: { slug: string } }) {
|
||||
<div className="font-bold text-gray-900">{author.name}</div>
|
||||
<div className="text-gray-500 text-xs mt-0.5">
|
||||
Published {post.date}
|
||||
{post.updatedAt && (
|
||||
<> <span className="mx-1">•</span> Updated {post.updatedAt}</>
|
||||
{showUpdated && visibleUpdated && (
|
||||
<> <span className="mx-1">|</span> Updated {formatIsoDate(visibleUpdated)}</>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
@@ -121,7 +130,7 @@ export default function BlogPostPage({ params }: { params: { slug: string } }) {
|
||||
src={post.heroImage}
|
||||
alt={post.imageAlt || post.title}
|
||||
fill
|
||||
unoptimized={post.heroImage.endsWith('.svg')}
|
||||
unoptimized={post.heroImage.endsWith(".svg")}
|
||||
className="object-cover"
|
||||
/>
|
||||
</div>
|
||||
@@ -134,7 +143,6 @@ export default function BlogPostPage({ params }: { params: { slug: string } }) {
|
||||
{/* AEO BLOCK: STEPS (If defined separate from body) */}
|
||||
{!!post.keySteps?.length && <StepList steps={post.keySteps} title="Step-by-Step Guide" />}
|
||||
|
||||
|
||||
{/* MAIN CONTENT */}
|
||||
<article className="prose prose-lg prose-blue max-w-none text-gray-800" dangerouslySetInnerHTML={{ __html: post.content }} />
|
||||
|
||||
|
||||
@@ -1,14 +1,6 @@
|
||||
import { getPublishedPostBySlug } from '@/lib/content';
|
||||
import sanitizeHtml from 'sanitize-html';
|
||||
|
||||
const RAW_ENABLED_SLUGS = new Set([
|
||||
'dynamic-vs-static-qr-codes',
|
||||
'qr-code-small-business',
|
||||
'qr-code-tracking-guide-2025',
|
||||
'utm-parameter-qr-codes',
|
||||
'trackable-qr-codes',
|
||||
]);
|
||||
|
||||
function decodeHtmlEntities(text: string): string {
|
||||
return text
|
||||
.replace(/ /g, ' ')
|
||||
@@ -65,10 +57,6 @@ function cleanHtmlToText(html: string): string {
|
||||
}
|
||||
|
||||
function renderRawPost(slug: string): string | null {
|
||||
if (!RAW_ENABLED_SLUGS.has(slug)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const post = getPublishedPostBySlug(slug);
|
||||
if (!post) {
|
||||
return null;
|
||||
|
||||
1393
src/app/(main)/(marketing)/dynamic-barcode-generator/page.tsx
Normal file
@@ -13,7 +13,9 @@ export default function PricingPage() {
|
||||
const router = useRouter();
|
||||
const [loading, setLoading] = useState<string | null>(null);
|
||||
const [currentPlan, setCurrentPlan] = useState<string>('FREE');
|
||||
const [currentInterval, setCurrentInterval] = useState<'month' | 'year' | null>(null);
|
||||
const [currentInterval, setCurrentInterval] = useState<
|
||||
'month' | 'year' | null
|
||||
>(null);
|
||||
const [billingPeriod, setBillingPeriod] = useState<'month' | 'year'>('month');
|
||||
|
||||
useEffect(() => {
|
||||
@@ -95,19 +97,29 @@ export default function PricingPage() {
|
||||
}, 1500);
|
||||
} catch (error: any) {
|
||||
console.error('Error canceling subscription:', error);
|
||||
showToast(error.message || 'Failed to downgrade. Please try again.', 'error');
|
||||
showToast(
|
||||
error.message || 'Failed to downgrade. Please try again.',
|
||||
'error'
|
||||
);
|
||||
setLoading(null);
|
||||
}
|
||||
};
|
||||
|
||||
// Helper function to check if this is the user's exact current plan (plan + interval)
|
||||
const isCurrentPlanWithInterval = (planType: string, interval: 'month' | 'year') => {
|
||||
const isCurrentPlanWithInterval = (
|
||||
planType: string,
|
||||
interval: 'month' | 'year'
|
||||
) => {
|
||||
return currentPlan === planType && currentInterval === interval;
|
||||
};
|
||||
|
||||
// Helper function to check if user has this plan but different interval
|
||||
const hasPlanDifferentInterval = (planType: string) => {
|
||||
return currentPlan === planType && currentInterval && currentInterval !== billingPeriod;
|
||||
return (
|
||||
currentPlan === planType &&
|
||||
currentInterval &&
|
||||
currentInterval !== billingPeriod
|
||||
);
|
||||
};
|
||||
|
||||
const selectedInterval = billingPeriod === 'month' ? 'month' : 'year';
|
||||
@@ -178,6 +190,24 @@ export default function PricingPage() {
|
||||
popular: false,
|
||||
onUpgrade: () => handleUpgrade('BUSINESS'),
|
||||
},
|
||||
{
|
||||
key: 'enterprise',
|
||||
name: 'Enterprise',
|
||||
price: 'Custom',
|
||||
period: '',
|
||||
showDiscount: false,
|
||||
features: [
|
||||
'∞ dynamic QR codes',
|
||||
'Unlimited static QR codes',
|
||||
'Everything from Business',
|
||||
'Dedicated Account Manager',
|
||||
],
|
||||
buttonText: 'Contact Us',
|
||||
buttonVariant: 'outline' as const,
|
||||
disabled: false,
|
||||
popular: false,
|
||||
onUpgrade: () => (window.location.href = 'mailto:timo@qrmaster.net'),
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
@@ -195,11 +225,13 @@ export default function PricingPage() {
|
||||
<BillingToggle value={billingPeriod} onChange={setBillingPeriod} />
|
||||
</div>
|
||||
|
||||
<div className="grid md:grid-cols-3 gap-8 max-w-6xl mx-auto">
|
||||
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-8 max-w-7xl mx-auto">
|
||||
{plans.map((plan) => (
|
||||
<Card
|
||||
key={plan.key}
|
||||
className={plan.popular ? 'border-primary-500 shadow-xl relative' : ''}
|
||||
className={
|
||||
plan.popular ? 'border-primary-500 shadow-xl relative' : ''
|
||||
}
|
||||
>
|
||||
{plan.popular && (
|
||||
<div className="absolute -top-4 left-1/2 transform -translate-x-1/2">
|
||||
@@ -210,17 +242,11 @@ export default function PricingPage() {
|
||||
)}
|
||||
|
||||
<CardHeader className="text-center pb-8">
|
||||
<CardTitle className="text-2xl mb-4">
|
||||
{plan.name}
|
||||
</CardTitle>
|
||||
<CardTitle className="text-2xl mb-4">{plan.name}</CardTitle>
|
||||
<div className="flex flex-col items-center">
|
||||
<div className="flex items-baseline justify-center">
|
||||
<span className="text-4xl font-bold">
|
||||
{plan.price}
|
||||
</span>
|
||||
<span className="text-gray-600 ml-2">
|
||||
{plan.period}
|
||||
</span>
|
||||
<span className="text-4xl font-bold">{plan.price}</span>
|
||||
<span className="text-gray-600 ml-2">{plan.period}</span>
|
||||
</div>
|
||||
{plan.showDiscount && (
|
||||
<Badge variant="success" className="mt-2">
|
||||
@@ -234,8 +260,16 @@ export default function PricingPage() {
|
||||
<ul className="space-y-3">
|
||||
{plan.features.map((feature: string, index: number) => (
|
||||
<li key={index} className="flex items-start space-x-3">
|
||||
<svg className="w-5 h-5 text-success-500 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
<svg
|
||||
className="w-5 h-5 text-success-500 flex-shrink-0 mt-0.5"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 20 20"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"
|
||||
clipRule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
<span className="text-gray-700">{feature}</span>
|
||||
</li>
|
||||
@@ -247,9 +281,15 @@ export default function PricingPage() {
|
||||
className="w-full"
|
||||
size="lg"
|
||||
disabled={plan.disabled || loading === plan.key.toUpperCase()}
|
||||
onClick={plan.key === 'free' ? (plan as any).onDowngrade : (plan as any).onUpgrade}
|
||||
onClick={
|
||||
plan.key === 'free'
|
||||
? (plan as any).onDowngrade
|
||||
: (plan as any).onUpgrade
|
||||
}
|
||||
>
|
||||
{loading === plan.key.toUpperCase() ? 'Processing...' : plan.buttonText}
|
||||
{loading === plan.key.toUpperCase()
|
||||
? 'Processing...'
|
||||
: plan.buttonText}
|
||||
</Button>
|
||||
</CardContent>
|
||||
</Card>
|
||||
@@ -261,7 +301,13 @@ export default function PricingPage() {
|
||||
All plans include unlimited static QR codes and basic customization.
|
||||
</p>
|
||||
<p className="text-gray-600 mt-2">
|
||||
Need help choosing? <ObfuscatedMailto email="support@qrmaster.net" className="text-primary-600 hover:text-primary-700 underline">Contact our team</ObfuscatedMailto>
|
||||
Need help choosing?{' '}
|
||||
<ObfuscatedMailto
|
||||
email="support@qrmaster.net"
|
||||
className="text-primary-600 hover:text-primary-700 underline"
|
||||
>
|
||||
Contact our team
|
||||
</ObfuscatedMailto>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -11,7 +11,7 @@ import { MarketingPageTracker, TrackedCtaLink } from '@/components/marketing/Mar
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: {
|
||||
absolute: 'QR Master vs Beaconstac (Uniqode) – Full Comparison 2025',
|
||||
absolute: 'QR Master vs Beaconstac (Uniqode) - Full Comparison 2025',
|
||||
},
|
||||
description:
|
||||
'QR Master vs Beaconstac (now Uniqode): detailed comparison of pricing, GDPR compliance, analytics, bulk creation, and ease of use. Which is right for your team?',
|
||||
@@ -21,7 +21,7 @@ export const metadata: Metadata = {
|
||||
canonical: 'https://www.qrmaster.net/vs/beaconstac',
|
||||
},
|
||||
openGraph: {
|
||||
title: 'QR Master vs Beaconstac (Uniqode) – Full Comparison 2025',
|
||||
title: 'QR Master vs Beaconstac (Uniqode) - Full Comparison 2025',
|
||||
description:
|
||||
'Pricing, privacy, analytics, and bulk creation compared. Which QR code platform is right for your team?',
|
||||
url: 'https://www.qrmaster.net/vs/beaconstac',
|
||||
@@ -29,7 +29,7 @@ export const metadata: Metadata = {
|
||||
images: ['/og-image.png'],
|
||||
},
|
||||
twitter: {
|
||||
title: 'QR Master vs Beaconstac (Uniqode) – Full Comparison 2025',
|
||||
title: 'QR Master vs Beaconstac (Uniqode) - Full Comparison 2025',
|
||||
description:
|
||||
'Pricing, privacy, analytics, and bulk creation compared head-to-head.',
|
||||
},
|
||||
@@ -44,15 +44,15 @@ const categories: Array<{
|
||||
name: 'Pricing',
|
||||
qrMaster: {
|
||||
rating: 'strong',
|
||||
summary: 'Starts free. Pro at €9/month, Business at €29/month.',
|
||||
summary: 'Starts free. Pro at EUR 9/month, Business at EUR 29/month.',
|
||||
detail:
|
||||
'QR Master has a permanently free plan with 3 active dynamic QR codes and unlimited static codes. Pro (€9/month or €90/year) gives you 50 dynamic codes, full analytics, and custom branding. Business (€29/month or €290/year) adds 500 dynamic codes and bulk creation. No annual contract required on any plan — cancel anytime.',
|
||||
'QR Master has a permanently free plan with 3 active dynamic QR codes and unlimited static codes. Pro (EUR 9/month or EUR 90/year) gives you 50 dynamic codes, full analytics, and custom branding. Business (EUR 29/month or EUR 290/year) adds 500 dynamic codes and bulk creation. No annual contract required on any plan - cancel anytime.',
|
||||
},
|
||||
beaconstac: {
|
||||
rating: 'weak',
|
||||
summary: 'No free plan. Meaningful features start at $49–99/month.',
|
||||
summary: 'No free plan. Meaningful features start at $49-99/month.',
|
||||
detail:
|
||||
'Uniqode (formerly Beaconstac) starts at around $5/month but that tier is extremely limited in the number of codes and features. To get analytics, team management, and enough dynamic codes for a real use case, you need $49–99/month or higher. Enterprise pricing (SOC2, SSO, API) is custom-quoted above that.',
|
||||
'Uniqode (formerly Beaconstac) starts at around $5/month but that tier is extremely limited in the number of codes and features. To get analytics, team management, and enough dynamic codes for a real use case, you need $49-99/month or higher. Enterprise pricing (SOC 2, SSO, API) is custom-quoted above that.',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -67,7 +67,7 @@ const categories: Array<{
|
||||
rating: 'weak',
|
||||
summary: 'No free plan available.',
|
||||
detail:
|
||||
'Uniqode does not offer a free tier. All plans require a paid subscription from day one. Their entry plan at ~$5/month is so restricted in features and code volume that it is not practical for any real use case — effectively forcing users to a higher paid tier immediately.',
|
||||
'Uniqode does not offer a free tier. All plans require a paid subscription from day one. Their entry plan at ~$5/month is so restricted in features and code volume that it is not practical for any real use case - effectively forcing users to a higher paid tier immediately.',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -76,7 +76,7 @@ const categories: Array<{
|
||||
rating: 'strong',
|
||||
summary: 'Hashed IPs by default. No PII stored. Applies to all plans.',
|
||||
detail:
|
||||
'QR Master hashes IP addresses server-side with a salted hash before writing any scan data. The raw IP address is never stored. Analytics data includes device type, time, country-level location, and UTM parameters — all without personally identifiable information. This is the default behavior, not an optional setting, and applies from the free plan upward. The implementation is in the open codebase at src/lib/hash.ts.',
|
||||
'QR Master hashes IP addresses server-side with a salted hash before writing any scan data. The raw IP address is never stored. Analytics data includes device type, time, country-level location, and UTM parameters - all without personally identifiable information. This is the default behavior, not an optional setting, and applies from the free plan upward. The implementation is in the open codebase at src/lib/hash.ts.',
|
||||
},
|
||||
beaconstac: {
|
||||
rating: 'mixed',
|
||||
@@ -91,20 +91,20 @@ const categories: Array<{
|
||||
rating: 'strong',
|
||||
summary: 'Device, OS, location, time, UTM parameters. All plans.',
|
||||
detail:
|
||||
'Scan analytics are available on all plans including free. Basic scan tracking is included from the free tier. Pro (€9/month) adds advanced analytics — device type, OS, country-level location, scan timestamp, and UTM parameters — plus the full analytics dashboard with trends and code-level breakdowns.',
|
||||
'Scan analytics are available on all plans including free. Basic scan tracking is included from the free tier. Pro (EUR 9/month) adds advanced analytics - device type, OS, country-level location, scan timestamp, and UTM parameters - plus the full analytics dashboard with trends and code-level breakdowns.',
|
||||
},
|
||||
beaconstac: {
|
||||
rating: 'strong',
|
||||
summary: 'Comprehensive analytics on paid plans. Strong dashboard.',
|
||||
detail:
|
||||
'Uniqode offers a well-designed analytics dashboard with scan counts, device breakdown, location data, and campaign-level reporting. For enterprise teams with multiple codes across many campaigns, the organizational features in their analytics are a genuine strength. Analytics unlock on paid tiers — the base $5 plan has very limited tracking.',
|
||||
'Uniqode offers a well-designed analytics dashboard with scan counts, device breakdown, location data, and campaign-level reporting. For enterprise teams with multiple codes across many campaigns, the organizational features in their analytics are a genuine strength. Analytics unlock on paid tiers - the base $5 plan has very limited tracking.',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Bulk QR Creation',
|
||||
qrMaster: {
|
||||
rating: 'strong',
|
||||
summary: 'Up to 1,000 codes per CSV/Excel upload. Business plan (€29/month).',
|
||||
summary: 'Up to 1,000 codes per CSV/Excel upload. Business plan (EUR 29/month).',
|
||||
detail:
|
||||
'The Business plan includes CSV and Excel bulk upload for generating up to 1,000 unique QR codes in one batch. Each code in the batch can have a different destination URL, label, campaign name, and UTM parameters. The batch downloads as a ZIP of SVG and PNG files. This is designed for product packaging, event programs, direct mail campaigns, and retail displays.',
|
||||
},
|
||||
@@ -119,7 +119,7 @@ const categories: Array<{
|
||||
name: 'Ease of Use',
|
||||
qrMaster: {
|
||||
rating: 'strong',
|
||||
summary: 'Simple, focused interface. Create, manage, track — no onboarding complexity.',
|
||||
summary: 'Simple, focused interface. Create, manage, track - no onboarding complexity.',
|
||||
detail:
|
||||
'QR Master is designed for the most common QR code workflows. Creating a dynamic code, setting a destination, styling it, and downloading it takes minutes. The dashboard organizes codes clearly and analytics are surfaced without additional configuration. There is no enterprise onboarding process, no sales cycle, and no setup calls required.',
|
||||
},
|
||||
@@ -156,8 +156,8 @@ const ratingColors: Record<Rating, string> = {
|
||||
};
|
||||
|
||||
const ratingLabels: Record<Rating, string> = {
|
||||
strong: '✓ Strong',
|
||||
weak: '✗ Limited',
|
||||
strong: 'Strong',
|
||||
weak: 'Limited',
|
||||
mixed: '~ Mixed',
|
||||
};
|
||||
|
||||
@@ -165,32 +165,32 @@ const faqItems = [
|
||||
{
|
||||
question: 'What is the main difference between QR Master and Beaconstac / Uniqode?',
|
||||
answer:
|
||||
'QR Master is built for SMBs and marketing teams that need reliable dynamic QR codes with analytics at an affordable price — free plan with 3 codes, Pro at €9/month. Uniqode (formerly Beaconstac) is built for enterprises that need SOC2 certification, SSO/SAML integration, and deep API access, and prices accordingly ($49–99+/month for meaningful features, no free plan). Both platforms handle the core QR functionality well — the difference is in who they\'re priced for.',
|
||||
'QR Master is built for SMBs and marketing teams that need reliable dynamic QR codes with analytics at an affordable price - free plan with 3 codes, Pro at EUR 9/month. Uniqode (formerly Beaconstac) is built for enterprises that need SOC 2 certification, SSO/SAML integration, and deep API access, and prices accordingly ($49-99+/month for meaningful features, no free plan). Both platforms handle the core QR functionality well - the difference is in who they\'re priced for.',
|
||||
},
|
||||
{
|
||||
question: 'Is Beaconstac the same as Uniqode?',
|
||||
answer:
|
||||
'Yes. Beaconstac rebranded to Uniqode in 2023. The underlying platform, features, and pricing model are the same — only the name changed. If you are searching for "Beaconstac alternative" or "Uniqode alternative," you\'re looking at the same product.',
|
||||
'Yes. Beaconstac rebranded to Uniqode in 2023. The underlying platform, features, and pricing model are the same - only the name changed. If you are searching for "Beaconstac alternative" or "Uniqode alternative," you\'re looking at the same product.',
|
||||
},
|
||||
{
|
||||
question: 'Does QR Master have GDPR-compliant analytics like Uniqode?',
|
||||
answer:
|
||||
'Yes, and QR Master handles GDPR compliance at the infrastructure level rather than requiring configuration. IP addresses are hashed server-side before any scan data is stored — the raw IP is never written. All analytics (device, location, time) are captured without PII. Uniqode achieves GDPR compliance through its DPA process and data residency options, which requires review and setup rather than being automatic.',
|
||||
'Yes, and QR Master handles GDPR compliance at the infrastructure level rather than requiring configuration. IP addresses are hashed server-side before any scan data is stored - the raw IP is never written. All analytics (device, location, time) are captured without PII. Uniqode achieves GDPR compliance through its DPA process and data residency options, which requires review and setup rather than being automatic.',
|
||||
},
|
||||
{
|
||||
question: 'Which platform is better for bulk QR code creation?',
|
||||
answer:
|
||||
'QR Master Business (€29/month) includes CSV/Excel bulk upload for up to 1,000 unique codes per batch — at a fraction of the cost of unlocking equivalent bulk features in Uniqode. If bulk creation is your primary use case, QR Master is the more practical choice unless you also need Uniqode\'s enterprise compliance features.',
|
||||
'QR Master Business (EUR 29/month) includes CSV/Excel bulk upload for up to 1,000 unique codes per batch - at a fraction of the cost of unlocking equivalent bulk features in Uniqode. If bulk creation is your primary use case, QR Master is the more practical choice unless you also need Uniqode\'s enterprise compliance features.',
|
||||
},
|
||||
{
|
||||
question: 'Does QR Master offer a free trial?',
|
||||
answer:
|
||||
'QR Master has a permanently free plan rather than a time-limited trial. The free plan includes 3 active dynamic QR codes and unlimited static codes — no credit card required, no expiration date. This is different from Uniqode, which has no free tier, and from some competitors that offer a 14-day trial that deactivates codes afterward.',
|
||||
'QR Master has a permanently free plan rather than a time-limited trial. The free plan includes 3 active dynamic QR codes and unlimited static codes - no credit card required, no expiration date. This is different from Uniqode, which has no free tier, and from some competitors that offer a 14-day trial that deactivates codes afterward.',
|
||||
},
|
||||
{
|
||||
question: 'Can I migrate from Uniqode to QR Master?',
|
||||
answer:
|
||||
'Yes. Uniqode allows CSV export of your QR code data. You can use that export to re-create your dynamic codes in QR Master — bulk upload via the Business plan makes large migrations manageable. Static QR codes are permanently encoded and do not need to be migrated — they remain valid regardless of which platform generated them.',
|
||||
'Yes. Uniqode allows CSV export of your QR code data. You can use that export to re-create your dynamic codes in QR Master - bulk upload via the Business plan makes large migrations manageable. Static QR codes are permanently encoded and do not need to be migrated - they remain valid regardless of which platform generated them.',
|
||||
},
|
||||
];
|
||||
|
||||
@@ -226,21 +226,21 @@ const relatedLinks = [
|
||||
href: '/dynamic-qr-code-generator',
|
||||
title: 'Dynamic QR Code Generator',
|
||||
description:
|
||||
'Create QR codes that update after printing — with analytics, custom branding, and dashboard management.',
|
||||
'Create QR codes that update after printing - with analytics, custom branding, and dashboard management.',
|
||||
ctaLabel: 'Create a dynamic QR code',
|
||||
},
|
||||
{
|
||||
href: '/qr-code-analytics',
|
||||
title: 'QR Code Analytics',
|
||||
description:
|
||||
'Full scan analytics with device, location, and UTM data — GDPR-compliant by default.',
|
||||
'Full scan analytics with device, location, and UTM data - GDPR-compliant by default.',
|
||||
ctaLabel: 'Explore analytics',
|
||||
},
|
||||
{
|
||||
href: '/pricing',
|
||||
title: 'QR Master Pricing',
|
||||
description:
|
||||
'Free for 3 dynamic codes. Pro at €9/month. Business at €29/month. No forced annual contracts.',
|
||||
'Free for 3 dynamic codes. Pro at EUR 9/month. Business at EUR 29/month. No forced annual contracts.',
|
||||
ctaLabel: 'See pricing',
|
||||
},
|
||||
];
|
||||
@@ -282,24 +282,24 @@ export default function VsBeaconstacPage() {
|
||||
<div className="rounded-xl border p-6" style={{ borderColor: '#BBF7D0', backgroundColor: '#F0FDF4' }}>
|
||||
<h3 className="mb-3 font-bold" style={{ color: '#166534' }}>QR Master</h3>
|
||||
<ul className="space-y-2 text-sm" style={{ color: '#27272A' }}>
|
||||
<li>✓ Free plan with 3 active dynamic codes</li>
|
||||
<li>✓ Pro at €9/month — 50 codes + full analytics</li>
|
||||
<li>✓ Business at €29/month — 500 codes + bulk creation</li>
|
||||
<li>✓ GDPR-compliant by default (hashed IPs)</li>
|
||||
<li>✓ Simple onboarding — no sales process</li>
|
||||
<li>✗ No SOC2 certification</li>
|
||||
<li>✗ No SSO/SAML integration</li>
|
||||
<li>Free plan with 3 active dynamic codes</li>
|
||||
<li>Pro at EUR 9/month - 50 codes + full analytics</li>
|
||||
<li>Business at EUR 29/month - 500 codes + bulk creation</li>
|
||||
<li>GDPR-compliant by default (hashed IPs)</li>
|
||||
<li>Simple onboarding - no sales process</li>
|
||||
<li>No SOC 2 certification</li>
|
||||
<li>No SSO/SAML integration</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="rounded-xl border p-6" style={{ borderColor: '#E4E0D9', backgroundColor: '#FAFAF8' }}>
|
||||
<h3 className="mb-3 font-bold" style={{ color: '#52525B' }}>Uniqode (Beaconstac)</h3>
|
||||
<ul className="space-y-2 text-sm" style={{ color: '#52525B' }}>
|
||||
<li>✗ No free plan — paid from day one</li>
|
||||
<li>✗ Meaningful features at $49–99+/month</li>
|
||||
<li>✓ Comprehensive enterprise analytics</li>
|
||||
<li>✓ SOC2 Type II certified</li>
|
||||
<li>✓ SSO/SAML for enterprise identity management</li>
|
||||
<li>✓ Deep API for custom integrations</li>
|
||||
<li>No free plan - paid from day one</li>
|
||||
<li>Meaningful features at $49-99+/month</li>
|
||||
<li>Comprehensive enterprise analytics</li>
|
||||
<li>SOC 2 Type II certified</li>
|
||||
<li>SSO/SAML for enterprise identity management</li>
|
||||
<li>Deep API for custom integrations</li>
|
||||
<li>~ GDPR requires DPA review and setup</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -371,7 +371,7 @@ export default function VsBeaconstacPage() {
|
||||
},
|
||||
{
|
||||
label: 'You need bulk creation',
|
||||
body: 'for product packaging, print campaigns, or events — up to 1,000 codes per batch at €29/month',
|
||||
body: 'for product packaging, print campaigns, or events - up to 1,000 codes per batch at EUR 29/month',
|
||||
},
|
||||
{
|
||||
label: 'You want a simple interface',
|
||||
@@ -379,7 +379,7 @@ export default function VsBeaconstacPage() {
|
||||
},
|
||||
].map((item) => (
|
||||
<li key={item.label} className="flex items-start gap-2">
|
||||
<span className="mt-0.5 text-purple-500">✓</span>
|
||||
<span className="mt-0.5 text-purple-500">+</span>
|
||||
<span className="text-gray-700">
|
||||
<strong>{item.label}</strong> {item.body}
|
||||
</span>
|
||||
@@ -396,7 +396,7 @@ export default function VsBeaconstacPage() {
|
||||
{[
|
||||
{
|
||||
label: 'You require SOC2 Type II',
|
||||
body: 'and your procurement process mandates a certified vendor — Uniqode has this, QR Master does not',
|
||||
body: 'and your procurement process mandates a certified vendor - Uniqode has this, QR Master does not',
|
||||
},
|
||||
{
|
||||
label: 'You need SSO/SAML',
|
||||
@@ -412,7 +412,7 @@ export default function VsBeaconstacPage() {
|
||||
},
|
||||
].map((item) => (
|
||||
<li key={item.label} className="flex items-start gap-2">
|
||||
<span className="mt-0.5 text-gray-400">→</span>
|
||||
<span className="mt-0.5 text-gray-400">-></span>
|
||||
<span className="text-gray-700">
|
||||
<strong>{item.label}</strong> {item.body}
|
||||
</span>
|
||||
@@ -439,34 +439,34 @@ export default function VsBeaconstacPage() {
|
||||
</div>
|
||||
{[
|
||||
{
|
||||
useCase: 'Testing (1–3 dynamic codes)',
|
||||
beaconstac: 'No free plan — must pay from day 1',
|
||||
qrMaster: 'Free forever — no credit card',
|
||||
useCase: 'Testing (1-3 dynamic codes)',
|
||||
beaconstac: 'No free plan - must pay from day 1',
|
||||
qrMaster: 'Free forever - no credit card',
|
||||
},
|
||||
{
|
||||
useCase: '50 dynamic codes + analytics + branding',
|
||||
beaconstac: '$49–99/month',
|
||||
qrMaster: '€9/month',
|
||||
beaconstac: '$49-99/month',
|
||||
qrMaster: 'EUR 9/month',
|
||||
},
|
||||
{
|
||||
useCase: 'Bulk creation (500–1,000 codes)',
|
||||
beaconstac: 'Enterprise tier — custom pricing',
|
||||
qrMaster: '€29/month (Business plan)',
|
||||
useCase: 'Bulk creation (500-1,000 codes)',
|
||||
beaconstac: 'Enterprise tier - custom pricing',
|
||||
qrMaster: 'EUR 29/month (Business plan)',
|
||||
},
|
||||
{
|
||||
useCase: 'GDPR-compliant analytics',
|
||||
beaconstac: 'Requires DPA review and setup',
|
||||
qrMaster: 'Built in — all plans',
|
||||
qrMaster: 'Built in - all plans',
|
||||
},
|
||||
{
|
||||
useCase: 'SOC2 compliance',
|
||||
beaconstac: '✓ Available (enterprise)',
|
||||
qrMaster: '✗ Not available',
|
||||
beaconstac: 'Available (enterprise)',
|
||||
qrMaster: 'Not available',
|
||||
},
|
||||
{
|
||||
useCase: 'SSO/SAML',
|
||||
beaconstac: '✓ Enterprise plans',
|
||||
qrMaster: '✗ Not available',
|
||||
beaconstac: 'Enterprise plans',
|
||||
qrMaster: 'Not available',
|
||||
},
|
||||
].map((row, i) => (
|
||||
<div key={row.useCase} className="grid grid-cols-3" style={{ borderTop: '1px solid #E4E0D9', backgroundColor: i % 2 === 0 ? '#FFFFFF' : '#FAFAF8' }}>
|
||||
@@ -482,7 +482,7 @@ export default function VsBeaconstacPage() {
|
||||
{/* FAQ */}
|
||||
<div className="bg-white" style={{ borderTop: '1px solid #E4E0D9' }}>
|
||||
<div className="container mx-auto max-w-4xl px-4 py-24 sm:px-6 lg:px-8">
|
||||
<FAQSection items={faqItems} title="QR Master vs Beaconstac / Uniqode — frequently asked questions" />
|
||||
<FAQSection items={faqItems} title="QR Master vs Beaconstac / Uniqode - frequently asked questions" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -508,7 +508,7 @@ export default function VsBeaconstacPage() {
|
||||
The SMB-friendly choice. Start free, upgrade when you need to.
|
||||
</h2>
|
||||
<p className="mx-auto mb-10 max-w-2xl text-lg" style={{ color: '#A1A1AA' }}>
|
||||
3 dynamic codes free forever. Pro at €9/month. Business at €29/month.
|
||||
3 dynamic codes free forever. Pro at EUR 9/month. Business at EUR 29/month.
|
||||
No enterprise invoice for features your team doesn't use.
|
||||
</p>
|
||||
<div className="flex flex-col justify-center gap-4 sm:flex-row">
|
||||
@@ -550,4 +550,3 @@ export default function VsBeaconstacPage() {
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ const PLAN_LIMITS = {
|
||||
FREE: 3,
|
||||
PRO: 50,
|
||||
BUSINESS: 500,
|
||||
ENTERPRISE: 99999,
|
||||
};
|
||||
|
||||
// POST /api/qrs - Create a new QR code
|
||||
|
||||
@@ -45,6 +45,8 @@ export async function GET(request: NextRequest) {
|
||||
dynamicLimit = 50;
|
||||
} else if (user.plan === 'BUSINESS') {
|
||||
dynamicLimit = 500;
|
||||
} else if ((user.plan as string) === 'ENTERPRISE') {
|
||||
dynamicLimit = 99999;
|
||||
}
|
||||
|
||||
return NextResponse.json({
|
||||
|
||||
@@ -87,6 +87,10 @@ export async function GET(
|
||||
const baseUrlFeedback = process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3050';
|
||||
destination = `${baseUrlFeedback}/feedback/${slug}`;
|
||||
break;
|
||||
case 'BARCODE':
|
||||
// Dynamic barcode redirects to its stored URL
|
||||
destination = ensureAbsoluteUrl(content.url || content.value || 'https://example.com');
|
||||
break;
|
||||
default:
|
||||
destination = 'https://example.com';
|
||||
}
|
||||
|
||||
@@ -206,6 +206,12 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.9,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/dynamic-barcode-generator`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.9,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/bulk-qr-code-generator`,
|
||||
lastModified: new Date(),
|
||||
|
||||
@@ -14,14 +14,13 @@ import { Button } from '@/components/ui/Button';
|
||||
import { ReprintCalculatorTeaser } from '@/components/marketing/ReprintCalculatorTeaser';
|
||||
import { ScrollToTop } from '@/components/ui/ScrollToTop';
|
||||
import { FreeToolsGrid } from '@/components/marketing/FreeToolsGrid';
|
||||
import { Testimonials } from '@/components/marketing/Testimonials';
|
||||
import { getFeaturedTestimonials } from '@/lib/testimonial-data';
|
||||
import { TestimonialsCarousel } from '@/components/marketing/TestimonialsCarousel';
|
||||
import { testimonials } from '@/lib/testimonial-data';
|
||||
import en from '@/i18n/en.json';
|
||||
|
||||
export default function HomePageClient() {
|
||||
// Always use English for marketing pages
|
||||
const t = en;
|
||||
const featuredTestimonials = getFeaturedTestimonials();
|
||||
|
||||
const industries = [
|
||||
'Restaurant Chain',
|
||||
@@ -44,8 +43,8 @@ export default function HomePageClient() {
|
||||
{/* Free Tools Grid */}
|
||||
<FreeToolsGrid />
|
||||
|
||||
{/* Testimonials Section */}
|
||||
<Testimonials testimonials={featuredTestimonials} />
|
||||
{/* Testimonials Carousel */}
|
||||
<TestimonialsCarousel testimonials={testimonials} />
|
||||
|
||||
<React.Fragment>
|
||||
<StaticVsDynamic t={t} />
|
||||
|
||||
@@ -28,6 +28,10 @@ export const Pricing: React.FC<PricingProps> = ({ t }) => {
|
||||
key: 'business',
|
||||
popular: false,
|
||||
},
|
||||
{
|
||||
key: 'enterprise',
|
||||
popular: false,
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
@@ -43,16 +47,14 @@ export const Pricing: React.FC<PricingProps> = ({ t }) => {
|
||||
<h2 className="text-3xl lg:text-4xl font-bold text-gray-900 mb-4">
|
||||
{t.pricing.title}
|
||||
</h2>
|
||||
<p className="text-xl text-gray-600">
|
||||
{t.pricing.subtitle}
|
||||
</p>
|
||||
<p className="text-xl text-gray-600">{t.pricing.subtitle}</p>
|
||||
</motion.div>
|
||||
|
||||
<div className="flex justify-center mb-8">
|
||||
<BillingToggle value={billingPeriod} onChange={setBillingPeriod} />
|
||||
</div>
|
||||
|
||||
<div className="grid md:grid-cols-3 gap-8 max-w-5xl mx-auto">
|
||||
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-8 max-w-7xl mx-auto">
|
||||
{plans.map((plan, index) => (
|
||||
<motion.div
|
||||
key={plan.key}
|
||||
@@ -63,10 +65,11 @@ export const Pricing: React.FC<PricingProps> = ({ t }) => {
|
||||
className="h-full"
|
||||
>
|
||||
<Card
|
||||
className={`h-full flex flex-col ${plan.popular
|
||||
className={`h-full flex flex-col ${
|
||||
plan.popular
|
||||
? 'border-primary-500 shadow-xl relative scale-105 z-10'
|
||||
: 'border-gray-200 hover:border-gray-300 hover:shadow-lg transition-all'
|
||||
}`}
|
||||
}`}
|
||||
>
|
||||
{plan.popular && (
|
||||
<div className="absolute -top-4 left-1/2 transform -translate-x-1/2 w-full text-center">
|
||||
@@ -83,7 +86,7 @@ export const Pricing: React.FC<PricingProps> = ({ t }) => {
|
||||
<div className="flex flex-col items-center">
|
||||
<div className="flex items-baseline justify-center">
|
||||
<span className="text-4xl font-bold">
|
||||
{plan.key === 'free'
|
||||
{plan.key === 'free' || plan.key === 'enterprise'
|
||||
? t.pricing[plan.key].price
|
||||
: billingPeriod === 'month'
|
||||
? t.pricing[plan.key].price
|
||||
@@ -92,43 +95,63 @@ export const Pricing: React.FC<PricingProps> = ({ t }) => {
|
||||
: '€290'}
|
||||
</span>
|
||||
<span className="text-gray-600 ml-2">
|
||||
{plan.key === 'free'
|
||||
{plan.key === 'free' || plan.key === 'enterprise'
|
||||
? t.pricing[plan.key].period
|
||||
: billingPeriod === 'month'
|
||||
? t.pricing[plan.key].period
|
||||
: 'per year'}
|
||||
</span>
|
||||
</div>
|
||||
{billingPeriod === 'year' && plan.key !== 'free' && (
|
||||
<Badge variant="success" className="mt-2">
|
||||
Save 16%
|
||||
</Badge>
|
||||
)}
|
||||
{billingPeriod === 'year' &&
|
||||
plan.key !== 'free' &&
|
||||
plan.key !== 'enterprise' && (
|
||||
<Badge variant="success" className="mt-2">
|
||||
Save 16%
|
||||
</Badge>
|
||||
)}
|
||||
</div>
|
||||
</CardHeader>
|
||||
|
||||
<CardContent className="space-y-8 flex-1 flex flex-col">
|
||||
<ul className="space-y-3 flex-1">
|
||||
{t.pricing[plan.key].features.map((feature: string, index: number) => (
|
||||
<li key={index} className="flex items-start space-x-3">
|
||||
<svg className="w-5 h-5 text-success-500 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
<span className="text-gray-700">{feature}</span>
|
||||
</li>
|
||||
))}
|
||||
{t.pricing[plan.key].features.map(
|
||||
(feature: string, index: number) => (
|
||||
<li key={index} className="flex items-start space-x-3">
|
||||
<svg
|
||||
className="w-5 h-5 text-success-500 flex-shrink-0 mt-0.5"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 20 20"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"
|
||||
clipRule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
<span className="text-gray-700">{feature}</span>
|
||||
</li>
|
||||
)
|
||||
)}
|
||||
</ul>
|
||||
|
||||
<div className="mt-8 pt-8 border-t border-gray-100">
|
||||
<Link href="/signup">
|
||||
<Button
|
||||
variant={plan.popular ? 'primary' : 'outline'}
|
||||
className="w-full"
|
||||
size="lg"
|
||||
>
|
||||
Get Started
|
||||
</Button>
|
||||
</Link>
|
||||
{plan.key === 'enterprise' ? (
|
||||
<Link href="mailto:timo@qrmaster.net">
|
||||
<Button variant="outline" className="w-full" size="lg">
|
||||
{t.pricing[plan.key].contact || 'Contact Us'}
|
||||
</Button>
|
||||
</Link>
|
||||
) : (
|
||||
<Link href="/signup">
|
||||
<Button
|
||||
variant={plan.popular ? 'primary' : 'outline'}
|
||||
className="w-full"
|
||||
size="lg"
|
||||
>
|
||||
Get Started
|
||||
</Button>
|
||||
</Link>
|
||||
)}
|
||||
</div>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
@@ -93,18 +93,23 @@ export const Testimonials: React.FC<TestimonialsProps> = ({
|
||||
<span className="font-semibold text-gray-900">
|
||||
{testimonial.author.name}
|
||||
</span>
|
||||
<div className="text-sm text-gray-600">
|
||||
{testimonial.author.company && (
|
||||
<span>{testimonial.author.company}</span>
|
||||
)}
|
||||
{testimonial.author.company && testimonial.author.location && (
|
||||
<span> • </span>
|
||||
)}
|
||||
{testimonial.author.location && (
|
||||
<span>{testimonial.author.location}</span>
|
||||
)}
|
||||
</div>
|
||||
<span className="text-xs text-gray-500 mt-1">
|
||||
{(testimonial.author.role || testimonial.author.company) && (
|
||||
<div className="text-sm text-gray-700">
|
||||
{testimonial.author.role && (
|
||||
<span>{testimonial.author.role}</span>
|
||||
)}
|
||||
{testimonial.author.role && testimonial.author.company && (
|
||||
<span>, </span>
|
||||
)}
|
||||
{testimonial.author.company && (
|
||||
<span>{testimonial.author.company}</span>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
{testimonial.author.location && (
|
||||
<span className="text-sm text-gray-500">{testimonial.author.location}</span>
|
||||
)}
|
||||
<span className="text-xs text-gray-400 mt-1">
|
||||
{testimonial.date}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
109
src/components/marketing/TestimonialsCarousel.tsx
Normal file
@@ -0,0 +1,109 @@
|
||||
'use client';
|
||||
|
||||
import React from 'react';
|
||||
import { Star, CheckCircle, ChevronRight } from 'lucide-react';
|
||||
import Link from 'next/link';
|
||||
import type { Testimonial } from '@/lib/types';
|
||||
|
||||
interface Props {
|
||||
testimonials: Testimonial[];
|
||||
title?: string;
|
||||
subtitle?: string;
|
||||
}
|
||||
|
||||
function StarRating({ rating }: { rating: number }) {
|
||||
return (
|
||||
<div className="flex gap-0.5" aria-label={`${rating} out of 5 stars`}>
|
||||
{[...Array(5)].map((_, i) => (
|
||||
<Star
|
||||
key={i}
|
||||
className={`w-4 h-4 ${i < rating ? 'fill-yellow-400 text-yellow-400' : 'fill-gray-200 text-gray-200'}`}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function TestimonialCard({ testimonial }: { testimonial: Testimonial }) {
|
||||
return (
|
||||
<div className="w-[340px] sm:w-[380px] bg-white rounded-2xl shadow-sm border border-gray-100 p-6 flex flex-col h-full">
|
||||
<div className="flex items-center justify-between mb-3">
|
||||
<StarRating rating={testimonial.rating} />
|
||||
{testimonial.verified && (
|
||||
<span className="inline-flex items-center gap-1 px-2 py-0.5 bg-green-50 text-green-700 text-xs font-medium rounded-full border border-green-200">
|
||||
<CheckCircle className="w-3 h-3" />
|
||||
Verified
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
<h3 className="text-sm font-semibold text-gray-900 mb-2">"{testimonial.title}"</h3>
|
||||
<p className="text-gray-600 text-sm leading-relaxed flex-grow">{testimonial.content}</p>
|
||||
<div className="border-t border-gray-100 pt-4 mt-4">
|
||||
<span className="font-semibold text-gray-900 text-sm block">{testimonial.author.name}</span>
|
||||
{(testimonial.author.role || testimonial.author.company) && (
|
||||
<span className="text-xs text-gray-600 block">
|
||||
{[testimonial.author.role, testimonial.author.company].filter(Boolean).join(', ')}
|
||||
</span>
|
||||
)}
|
||||
{testimonial.author.location && (
|
||||
<span className="text-xs text-gray-400 block">{testimonial.author.location}</span>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export const TestimonialsCarousel: React.FC<Props> = ({
|
||||
testimonials,
|
||||
title = 'What Our Customers Say',
|
||||
subtitle = 'Real experiences from businesses using QR Master',
|
||||
}) => {
|
||||
// Duplicate for seamless loop: when first set exits left, second set is identical → no visible reset
|
||||
const doubled = [...testimonials, ...testimonials];
|
||||
|
||||
return (
|
||||
<section className="py-16 bg-gray-50 overflow-hidden">
|
||||
<style>{`
|
||||
@keyframes marquee {
|
||||
from { transform: translateX(0); }
|
||||
to { transform: translateX(-50%); }
|
||||
}
|
||||
.marquee-track {
|
||||
animation: marquee 90s linear infinite;
|
||||
}
|
||||
.marquee-track:hover {
|
||||
animation-play-state: paused;
|
||||
}
|
||||
`}</style>
|
||||
|
||||
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl mb-10">
|
||||
<div className="text-center">
|
||||
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 mb-4">{title}</h2>
|
||||
<p className="text-lg text-gray-600 max-w-2xl mx-auto">{subtitle}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Full-width overflow mask */}
|
||||
<div className="w-full overflow-hidden">
|
||||
<div
|
||||
className="marquee-track flex gap-6"
|
||||
style={{ width: 'max-content' }}
|
||||
>
|
||||
{doubled.map((t, idx) => (
|
||||
<TestimonialCard key={`${t.id}-${idx}`} testimonial={t} />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="mt-8 text-center">
|
||||
<Link
|
||||
href="/testimonials"
|
||||
className="inline-flex items-center text-blue-600 font-semibold hover:text-blue-700 transition-colors text-sm"
|
||||
>
|
||||
See all {testimonials.length} reviews
|
||||
<ChevronRight className="w-4 h-4 ml-1" />
|
||||
</Link>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
@@ -64,6 +64,7 @@ export function Footer({ variant = 'marketing', t }: FooterProps) {
|
||||
<li><Link href="/faq" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>{translations.all_questions}</Link></li>
|
||||
<li><Link href="/blog" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>{translations.all_articles}</Link></li>
|
||||
<li><Link href="/bulk-qr-code-generator" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>Bulk QR Generator</Link></li>
|
||||
<li><Link href="/dynamic-barcode-generator" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>Dynamic Barcode Generator</Link></li>
|
||||
|
||||
<li>
|
||||
<Link href="/qr-code-for" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>
|
||||
|
||||
@@ -178,6 +178,19 @@
|
||||
"Prioritäts-E-Mail-Support",
|
||||
"Erweiterte Tracking & Insights"
|
||||
]
|
||||
},
|
||||
"enterprise": {
|
||||
"title": "Enterprise",
|
||||
"name": "Enterprise",
|
||||
"price": "Individuell",
|
||||
"period": "",
|
||||
"features": [
|
||||
"∞ dynamische QR-Codes",
|
||||
"Unbegrenzte statische QR-Codes",
|
||||
"Alles aus Business",
|
||||
"Eigener Account Manager"
|
||||
],
|
||||
"contact": "Kontakt aufnehmen"
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
|
||||
@@ -176,6 +176,19 @@
|
||||
"Priority email support",
|
||||
"Advanced tracking & insights"
|
||||
]
|
||||
},
|
||||
"enterprise": {
|
||||
"title": "Enterprise",
|
||||
"name": "Enterprise",
|
||||
"price": "Custom",
|
||||
"period": "",
|
||||
"features": [
|
||||
"∞ dynamic QR codes",
|
||||
"Unlimited static QR codes",
|
||||
"Everything from Business",
|
||||
"Dedicated Account Manager"
|
||||
],
|
||||
"contact": "Contact Us"
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
@@ -346,20 +359,12 @@
|
||||
"airtable": {
|
||||
"title": "Airtable",
|
||||
"description": "Sync QR codes with your Airtable bases",
|
||||
"features": [
|
||||
"Two-way sync",
|
||||
"Custom field mapping",
|
||||
"Real-time updates"
|
||||
]
|
||||
"features": ["Two-way sync", "Custom field mapping", "Real-time updates"]
|
||||
},
|
||||
"sheets": {
|
||||
"title": "Google Sheets",
|
||||
"description": "Export data to Google Sheets automatically",
|
||||
"features": [
|
||||
"Automated exports",
|
||||
"Custom templates",
|
||||
"Scheduled updates"
|
||||
]
|
||||
"features": ["Automated exports", "Custom templates", "Scheduled updates"]
|
||||
},
|
||||
"activate": "Activate & Configure"
|
||||
},
|
||||
|
||||
@@ -317,10 +317,13 @@ export function reviewSchema(testimonial: Testimonial) {
|
||||
export function aggregateRatingSchema(aggregateRating: AggregateRating) {
|
||||
return {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'Product',
|
||||
'@type': 'SoftwareApplication',
|
||||
name: 'QR Master',
|
||||
description: 'Professional QR code generator with dynamic QR codes, analytics, and customization.',
|
||||
image: `${SITE_URL}/static/og-image.png`,
|
||||
applicationCategory: 'BusinessApplication',
|
||||
operatingSystem: 'Web Browser',
|
||||
url: SITE_URL,
|
||||
offers: {
|
||||
'@type': 'Offer',
|
||||
price: '0',
|
||||
|
||||
@@ -1,27 +1,5 @@
|
||||
export type Testimonial = {
|
||||
id: string;
|
||||
rating: number;
|
||||
title: string;
|
||||
content: string;
|
||||
author: {
|
||||
name: string;
|
||||
location?: string;
|
||||
company?: string;
|
||||
role?: string;
|
||||
};
|
||||
date: string;
|
||||
datePublished: string;
|
||||
verified: boolean;
|
||||
featured: boolean;
|
||||
useCase?: string;
|
||||
};
|
||||
|
||||
export type AggregateRating = {
|
||||
ratingValue: number;
|
||||
reviewCount: number;
|
||||
bestRating: number;
|
||||
worstRating: number;
|
||||
};
|
||||
import type { Testimonial, AggregateRating } from '@/lib/types';
|
||||
export type { Testimonial, AggregateRating };
|
||||
|
||||
export const testimonials: Testimonial[] = [
|
||||
{
|
||||
@@ -31,7 +9,7 @@ export const testimonials: Testimonial[] = [
|
||||
content: "I use QR-Master for my pottery as a link to my homepage and as a digital business card. I place the codes directly on my pottery pieces so interested customers can instantly access my website. Reliable and practical – a great solution!",
|
||||
author: {
|
||||
name: "Claudia",
|
||||
company: "Hotshpotsh",
|
||||
role: "Owner",
|
||||
location: "Texas"
|
||||
},
|
||||
date: "January 2026",
|
||||
@@ -39,6 +17,182 @@ export const testimonials: Testimonial[] = [
|
||||
verified: true,
|
||||
featured: true,
|
||||
useCase: "pottery"
|
||||
},
|
||||
{
|
||||
id: "restaurant-thomas-002",
|
||||
rating: 5,
|
||||
title: "Finally no more reprinting menus",
|
||||
content: "We used to reprint our menu every time prices changed — that was costing us hundreds of euros a year. With QR Master, I update the PDF online and all table QR codes instantly point to the new version. Setup took 10 minutes. This pays for itself after the first price adjustment.",
|
||||
author: {
|
||||
name: "Thomas B.",
|
||||
role: "Restaurant Owner",
|
||||
location: "Hamburg, Germany"
|
||||
},
|
||||
date: "February 2026",
|
||||
datePublished: "2026-02-08T00:00:00Z",
|
||||
verified: true,
|
||||
featured: true,
|
||||
useCase: "restaurant-menu"
|
||||
},
|
||||
{
|
||||
id: "marketing-sarah-003",
|
||||
rating: 5,
|
||||
title: "Finally measurable ROI on print campaigns",
|
||||
content: "We run multi-channel campaigns and print materials were always the black box. With QR Master's scan analytics I can now see exactly which flyer, city, and event drove traffic. The location and device breakdown alone justified the Business plan subscription.",
|
||||
author: {
|
||||
name: "Sarah M.",
|
||||
role: "Head of Marketing",
|
||||
location: "Berlin, Germany"
|
||||
},
|
||||
date: "March 2026",
|
||||
datePublished: "2026-03-10T00:00:00Z",
|
||||
verified: true,
|
||||
featured: true,
|
||||
useCase: "marketing-campaigns"
|
||||
},
|
||||
{
|
||||
id: "retail-jennifer-004",
|
||||
rating: 5,
|
||||
title: "Generated 800 unique codes in under 5 minutes",
|
||||
content: "We needed individual QR codes for product packaging — one per SKU pointing to the corresponding product page. I uploaded our CSV with 800 rows and had every code ready to download in minutes. The bulk feature is exactly what large-scale packaging operations need.",
|
||||
author: {
|
||||
name: "Jennifer K.",
|
||||
role: "Operations Manager",
|
||||
location: "London, UK"
|
||||
},
|
||||
date: "March 2026",
|
||||
datePublished: "2026-03-18T00:00:00Z",
|
||||
verified: true,
|
||||
featured: true,
|
||||
useCase: "retail-packaging"
|
||||
},
|
||||
{
|
||||
id: "events-marco-005",
|
||||
rating: 5,
|
||||
title: "Essential tool for event management",
|
||||
content: "We manage 20+ events per year and QR Master has become part of our standard workflow. I create a dynamic code for each event, and if the venue or schedule changes last-minute, I update the link without reprinting anything. The scan data also helps us measure engagement per event.",
|
||||
author: {
|
||||
name: "Marco F.",
|
||||
role: "Event Director",
|
||||
location: "Munich, Germany"
|
||||
},
|
||||
date: "January 2026",
|
||||
datePublished: "2026-01-28T00:00:00Z",
|
||||
verified: true,
|
||||
featured: false,
|
||||
useCase: "events"
|
||||
},
|
||||
{
|
||||
id: "gdpr-stefan-006",
|
||||
rating: 5,
|
||||
title: "The only QR tool that takes GDPR seriously",
|
||||
content: "Our legal team reviewed several platforms before approving one for use. QR Master hashes IPs by default and doesn't store personally identifiable information — we also confirmed DNT header compliance. For a company operating under GDPR, this isn't optional, it's the baseline. QR Master delivered.",
|
||||
author: {
|
||||
name: "Stefan W.",
|
||||
role: "Data Protection Officer",
|
||||
location: "Frankfurt, Germany"
|
||||
},
|
||||
date: "February 2026",
|
||||
datePublished: "2026-02-20T00:00:00Z",
|
||||
verified: true,
|
||||
featured: false,
|
||||
useCase: "gdpr-compliance"
|
||||
},
|
||||
{
|
||||
id: "agency-david-007",
|
||||
rating: 4,
|
||||
title: "Great platform for managing multiple client campaigns",
|
||||
content: "I manage QR code campaigns for six clients and QR Master keeps everything organized in one dashboard. The dynamic links mean I can redirect codes per campaign phase without going back to print. Does exactly what it says — clean, reliable, no bloat.",
|
||||
author: {
|
||||
name: "David L.",
|
||||
role: "Digital Marketing Consultant",
|
||||
location: "Vienna, Austria"
|
||||
},
|
||||
date: "March 2026",
|
||||
datePublished: "2026-03-05T00:00:00Z",
|
||||
verified: true,
|
||||
featured: false,
|
||||
useCase: "agency"
|
||||
},
|
||||
{
|
||||
id: "fitness-anna-008",
|
||||
rating: 5,
|
||||
title: "Members scan for class schedules, WiFi, and waivers",
|
||||
content: "I put QR codes on every surface in my studio — reception desk, mirrors, equipment. One links to our class booking page, one shares WiFi, one opens the digital waiver form. When we switched booking software, I updated the URL in QR Master and nothing else had to change. Brilliant.",
|
||||
author: {
|
||||
name: "Anna R.",
|
||||
role: "Studio Owner",
|
||||
location: "Zurich, Switzerland"
|
||||
},
|
||||
date: "February 2026",
|
||||
datePublished: "2026-02-14T00:00:00Z",
|
||||
verified: true,
|
||||
featured: false,
|
||||
useCase: "fitness-studio"
|
||||
},
|
||||
{
|
||||
id: "hotel-pierre-009",
|
||||
rating: 5,
|
||||
title: "Contactless check-in and room service made easy",
|
||||
content: "We placed dynamic QR codes on every room door and in the lobby. Guests scan to access our digital welcome guide, room service menu, and local recommendations — all updated centrally. When our restaurant hours changed, one edit in QR Master updated all 48 room codes instantly.",
|
||||
author: {
|
||||
name: "Pierre D.",
|
||||
role: "General Manager",
|
||||
location: "Paris, France"
|
||||
},
|
||||
date: "January 2026",
|
||||
datePublished: "2026-01-22T00:00:00Z",
|
||||
verified: true,
|
||||
featured: false,
|
||||
useCase: "hospitality"
|
||||
},
|
||||
{
|
||||
id: "freelancer-maya-010",
|
||||
rating: 5,
|
||||
title: "My vCard QR is now on every business card I print",
|
||||
content: "I switched to a vCard QR code from QR Master after my phone number changed and I had to throw away 200 printed cards. Now the QR on my card always points to the latest version of my contact info — I just update it online. It's the smartest small change I've made to my personal branding.",
|
||||
author: {
|
||||
name: "Maya S.",
|
||||
role: "Freelance Brand Designer",
|
||||
location: "London, UK"
|
||||
},
|
||||
date: "March 2026",
|
||||
datePublished: "2026-03-25T00:00:00Z",
|
||||
verified: true,
|
||||
featured: false,
|
||||
useCase: "vcard"
|
||||
},
|
||||
{
|
||||
id: "cafe-lars-011",
|
||||
rating: 5,
|
||||
title: "WiFi sharing has never been this clean",
|
||||
content: "Customers used to ask for our WiFi password 30 times a day. Now there's a QR code on every table — they scan, connect, done. We also linked a second code to our digital menu. QR Master was the easiest free tool I found that actually lets you keep the codes active without surprise paywalls.",
|
||||
author: {
|
||||
name: "Lars N.",
|
||||
role: "Co-Owner",
|
||||
location: "Copenhagen, Denmark"
|
||||
},
|
||||
date: "February 2026",
|
||||
datePublished: "2026-02-03T00:00:00Z",
|
||||
verified: true,
|
||||
featured: false,
|
||||
useCase: "cafe-wifi"
|
||||
},
|
||||
{
|
||||
id: "realestate-carlos-012",
|
||||
rating: 5,
|
||||
title: "Property listing QR codes that stay current",
|
||||
content: "Real estate moves fast — a property I list today might be under offer tomorrow. With dynamic QR codes from QR Master, I print a yard sign once and update the link to the listing, price, or status page whenever things change. My signs stay accurate without paying for new prints.",
|
||||
author: {
|
||||
name: "Carlos M.",
|
||||
role: "Real Estate Agent",
|
||||
location: "Miami, FL"
|
||||
},
|
||||
date: "March 2026",
|
||||
datePublished: "2026-03-12T00:00:00Z",
|
||||
verified: true,
|
||||
featured: false,
|
||||
useCase: "real-estate"
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ export function middleware(req: NextRequest) {
|
||||
// '/guide', // Redirected to /learn/*
|
||||
'/qr-code-erstellen',
|
||||
'/dynamic-qr-code-generator',
|
||||
'/dynamic-barcode-generator',
|
||||
'/bulk-qr-code-generator',
|
||||
'/qr-code-tracking',
|
||||
'/qr-code-analytics',
|
||||
|
||||
28
task.md
@@ -5,12 +5,26 @@
|
||||
- [x] Add `/qr-code-for` to `src/middleware.ts` `publicPaths` to make it accessible without login
|
||||
- [x] Implement `src/app/(main)/(marketing)/qr-code-for/[industry]/page.tsx` template
|
||||
- [x] Create the overview page `qr-code-for/page.tsx` and correct breadcrumb links.
|
||||
- [x] Generate unique, high-quality Hero images for all 8 industries.
|
||||
- [x] Expand the content structure in `src/lib/industry-pages.ts` to include more sections (Benefits, Stats, etc.) to make the pages longer and richer.
|
||||
- [x] Rewrite guide for sobriety and practical utility (Final Polish)
|
||||
- [x] Remove excessive "2026" and unverifiable "billion dollar" claims
|
||||
- [x] Add intent-based H2/H3 headings (e.g., "How to structure CSV")
|
||||
- [x] Verify final word count (1312 words) and SEO alignment
|
||||
- [x] Soften compliance claim and evergreen GS1 section (Final Touches)
|
||||
- [x] Final Walkthrough creations (Benefits, Stats, etc.) to make the pages longer and richer.
|
||||
- [x] Update `IndustryPageTemplate.tsx` to display the new content sections and the new specific Hero images.
|
||||
- [x] Perform SEO Audit and Launch Readiness Check
|
||||
- [/] Update `src/app/sitemap.ts` to include industry pages
|
||||
- [ ] Verify internal linking from footer/main navigation
|
||||
- [ ] Review "Content Briefs" in `growth_strategies.md` and ensure pages are aligned
|
||||
- [ ] Validate Title tags and Meta descriptions for all 8 pages
|
||||
- [ ] Final check on mobile responsiveness and visual alignment
|
||||
- [x] Update `src/app/sitemap.ts` to include industry pages
|
||||
- [x] Verify internal linking from footer/main navigation
|
||||
- [x] Review "Content Briefs" in `growth_strategies.md` and ensure pages are aligned
|
||||
- [x] Validate Title tags and Meta descriptions for all 8 pages
|
||||
- [x] Final check on mobile responsiveness and visual alignment
|
||||
- [x] Final Technical Polishing
|
||||
- [x] Apply phrasing glaze for Reed-Solomon (data modules vs EC)
|
||||
- [x] Refine Dynamic QR definition (managed servers)
|
||||
- [x] Nuance Privacy statement (redirect-layer vs destination analytics)
|
||||
- [x] Soften Latency wording (network/infrastructure dependent)
|
||||
- [x] Refine Dual-Payload wording (fallback information)
|
||||
- [x] Add 'Legacy Code Migration' section
|
||||
- [x] Add 'Security Best Practices' section
|
||||
- [x] Add 'Cost-Benefit Analysis' ROI table
|
||||
- [x] Verify final output and word count (1958 words)
|
||||
|
||||
47
tmp/clean_articles.py
Normal file
@@ -0,0 +1,47 @@
|
||||
import os
|
||||
import re
|
||||
|
||||
def clean_articles(directory):
|
||||
for filename in os.listdir(directory):
|
||||
if filename.endswith(".md"):
|
||||
path = os.path.join(directory, filename)
|
||||
with open(path, "r", encoding="utf-8") as f:
|
||||
content = f.read()
|
||||
|
||||
# Remove *Target: ...* line
|
||||
content = re.sub(r"^\*Target:.*?\*[\r\n]*", "", content, flags=re.MULTILINE)
|
||||
|
||||
# Remove footer metadata starting with bolded targets or notes
|
||||
# Usually starts after the last separator --- or near the end
|
||||
# Patterns to remove:
|
||||
# - Word count target: ...
|
||||
# - Internal links to add: ...
|
||||
# - Note: AI-assisted draft ...
|
||||
# - Author bio: ... (We might want to keep author bio, but the user said "draft doesn't look good",
|
||||
# so let's remove the "meta" parts and keep only the content.)
|
||||
|
||||
# Remove specific lines
|
||||
content = re.sub(r"\*\*Word count target:\*\*.*", "", content)
|
||||
content = re.sub(r"\*\*Internal links to add:\*\*.*", "", content)
|
||||
content = re.sub(r"\*\*Author bio:\*\*.*", "", content)
|
||||
content = re.sub(r"\*\*Note:\*\* AI-assisted draft.*", "", content)
|
||||
|
||||
# Also catch these patterns without bold
|
||||
content = re.sub(r"\*Target:.*", "", content)
|
||||
content = re.sub(r"Word count target:.*", "", content)
|
||||
content = re.sub(r"Internal links to add:.*", "", content)
|
||||
content = re.sub(r"Author bio:.*", "", content)
|
||||
content = re.sub(r"Note: AI-assisted draft.*", "", content)
|
||||
content = re.sub(r"Screenshots to include:.*", "", content)
|
||||
|
||||
# Clean up trailing whitespace and empty separators at the end
|
||||
content = content.replace("---", "\n---\n") # Ensure space around separators
|
||||
content = re.sub(r"---[\s\n]*$", "", content) # Remove trailing separators
|
||||
content = content.strip()
|
||||
|
||||
with open(path, "w", encoding="utf-8") as f:
|
||||
f.write(content)
|
||||
print(f"Cleaned {filename}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
clean_articles(r"c:\Users\a931627\Documents\QRMASTER\articles")
|
||||
BIN
tmp/email_log.txt
Normal file
117
tmp/send_all_3_email_pitches.py
Normal file
@@ -0,0 +1,117 @@
|
||||
import smtplib
|
||||
from email.mime.text import MIMEText
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from email.mime.image import MIMEImage
|
||||
import os
|
||||
import markdown
|
||||
import logging
|
||||
import re
|
||||
|
||||
# Setup logging
|
||||
logging.basicConfig(filename=r'c:\Users\a931627\Documents\QRMASTER\tmp\script_log.log', level=logging.INFO,
|
||||
format='%(asctime)s - %(levelname)s - %(message)s', force=True)
|
||||
|
||||
def get_pitch_data():
|
||||
return [
|
||||
{
|
||||
"filename": "digitalGpoint-dynamic-vs-static-qr-codes.md",
|
||||
"subject": "Pitch: Solving the 'print gap' for small businesses (DigitalGpoint)",
|
||||
"to_email": "digitalgpoint.webmail@gmail.com",
|
||||
"intro": "Hi DigitalGpoint Team,<br><br>I’ve noticed DigitalGpoint covers a lot of practical tools for business growth—especially those that bridge the gap between offline operations and digital simplicity. My latest draft fits right into this space."
|
||||
},
|
||||
{
|
||||
"filename": "techdee-5-qr-code-strategies.md",
|
||||
"subject": "Pitch: Offline-to-Online marketing workflows (Techdee)",
|
||||
"to_email": "Blayget@gmail.com",
|
||||
"intro": "Hi Techdee Team,<br><br>I’ve been following Techdee’s tech and marketing tutorials for a while. Your audience seems to really value actionable, tech-forward tactics that small businesses can actually execute. This piece on QR strategies was written with that utility in mind."
|
||||
},
|
||||
{
|
||||
"filename": "seosandwitch-qr-codes-offline-attribution.md",
|
||||
"subject": "Pitch: Attribution blind spots in physical marketing (SEO Sandwitch)",
|
||||
"to_email": "joydeep@seosandwitch.com",
|
||||
"intro": "Hi Joydeep,<br><br>I’ve been working on a technical deep-dive into how QR codes can bridge the offline attribution gap in local SEO. Given your focus on technical search strategies, I thought this would be a perfect fit for SEO Sandwitch."
|
||||
}
|
||||
]
|
||||
|
||||
def send_premium_email(pitch_data):
|
||||
smtp_host = "smtp.qrmaster.net"
|
||||
smtp_port = 465
|
||||
smtp_user = "timo@qrmaster.net"
|
||||
smtp_pass = "fiesta"
|
||||
bcc_email = "knuth.timo@gmail.com"
|
||||
articles_dir = r"c:\Users\a931627\Documents\QRMASTER\articles"
|
||||
images_dir = r"c:\Users\a931627\Documents\QRMASTER\assets\images"
|
||||
|
||||
logging.info(f"Starting real email dispatch for the {len(pitch_data)} guest post pitches.")
|
||||
|
||||
for item in pitch_data:
|
||||
to_email = item["to_email"]
|
||||
file_path = os.path.join(articles_dir, item["filename"])
|
||||
if not os.path.exists(file_path):
|
||||
logging.error(f"File not found: {item['filename']}")
|
||||
continue
|
||||
|
||||
with open(file_path, "r", encoding="utf-8") as f:
|
||||
article_content = f.read()
|
||||
|
||||
article_html = markdown.markdown(article_content, extensions=['tables', 'fenced_code', 'nl2br'])
|
||||
|
||||
# Find images and prepare attachments
|
||||
img_tags = re.findall(r'<img [^>]*src="([^"]+)"[^>]*>', article_html)
|
||||
attachments = []
|
||||
for img_src in img_tags:
|
||||
img_filename = os.path.basename(img_src)
|
||||
img_path = os.path.join(images_dir, img_filename)
|
||||
|
||||
if os.path.exists(img_path):
|
||||
cid = img_filename.replace(".", "_")
|
||||
article_html = article_html.replace(img_src, f"cid:{cid}")
|
||||
|
||||
with open(img_path, "rb") as img_f:
|
||||
img_data = img_f.read()
|
||||
mime_img = MIMEImage(img_data)
|
||||
mime_img.add_header('Content-ID', f'<{cid}>')
|
||||
mime_img.add_header('Content-Disposition', 'inline', filename=img_filename)
|
||||
attachments.append(mime_img)
|
||||
else:
|
||||
logging.warning(f"Image not found: {img_path}")
|
||||
|
||||
html_template = f"""
|
||||
<html>
|
||||
<body style="font-family: Arial, sans-serif;">
|
||||
<div style="max-width: 600px; margin: auto; padding: 20px; border: 1px solid #ccc;">
|
||||
<div style="background: #f4f4f4; padding: 15px; margin-bottom: 20px;">{item["intro"]}</div>
|
||||
<div>{article_html}</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
|
||||
message = MIMEMultipart("related")
|
||||
message["From"] = smtp_user
|
||||
message["To"] = to_email
|
||||
message["Bcc"] = bcc_email
|
||||
message["Subject"] = item["subject"]
|
||||
|
||||
msg_alternative = MIMEMultipart("alternative")
|
||||
message.attach(msg_alternative)
|
||||
msg_alternative.attach(MIMEText(html_template, "html"))
|
||||
|
||||
for att in attachments:
|
||||
message.attach(att)
|
||||
|
||||
try:
|
||||
with smtplib.SMTP_SSL(smtp_host, smtp_port) as server:
|
||||
server.login(smtp_user, smtp_pass)
|
||||
# Send to To and Bcc
|
||||
recipients = [to_email, bcc_email]
|
||||
server.sendmail(smtp_user, recipients, message.as_string())
|
||||
logging.info(f"Successfully sent: {item['filename']} to {to_email} (BCC'd {bcc_email})")
|
||||
print(f"SENT: {item['filename']} to {to_email}")
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to send {item['filename']} to {to_email}: {e}")
|
||||
print(f"FAILED: {item['filename']} to {to_email}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
pitches = get_pitch_data()
|
||||
send_premium_email(pitches)
|
||||
178
tmp/test_email.py
Normal file
@@ -0,0 +1,178 @@
|
||||
import smtplib
|
||||
from email.mime.text import MIMEText
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
import os
|
||||
import markdown
|
||||
|
||||
def send_premium_test_email():
|
||||
# SMTP Settings
|
||||
smtp_host = "smtp.qrmaster.net"
|
||||
smtp_port = 465
|
||||
smtp_user = "timo@qrmaster.net"
|
||||
smtp_pass = "fiesta"
|
||||
|
||||
# Recipient
|
||||
to_email = "knuth.timo@gmail.com"
|
||||
|
||||
# Article File Path
|
||||
article_path = r"c:\Users\a931627\Documents\QRMASTER\articles\seosandwitch-qr-codes-offline-attribution.md"
|
||||
|
||||
with open(article_path, "r", encoding="utf-8") as f:
|
||||
article_content = f.read()
|
||||
|
||||
# Professional Markdown to HTML conversion
|
||||
# Uses 'tables' and 'fenced_code' for perfect formatting
|
||||
article_html = markdown.markdown(article_content, extensions=['tables', 'fenced_code', 'nl2br'])
|
||||
|
||||
subject = "Solving the 'print gap' for small businesses (Draft Included)"
|
||||
|
||||
# HTML Template - "Premium Digital Document"
|
||||
html_template = f"""
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Lora:ital,wght@0,400;0,700;1,400&display=swap');
|
||||
|
||||
body {{
|
||||
font-family: 'Inter', system-ui, -apple-system, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #2D3748;
|
||||
background-color: #F7FAFC;
|
||||
padding: 40px 20px;
|
||||
margin: 0;
|
||||
}}
|
||||
.container {{
|
||||
background-color: #ffffff;
|
||||
max-width: 760px;
|
||||
margin: 0 auto;
|
||||
padding: 60px;
|
||||
border: 1px solid #E2E8F0;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.05);
|
||||
}}
|
||||
.pitch-section {{
|
||||
margin-bottom: 50px;
|
||||
font-size: 16px;
|
||||
border-bottom: 2px solid #EDF2F7;
|
||||
padding-bottom: 40px;
|
||||
}}
|
||||
.draft-metadata {{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 20px;
|
||||
margin-bottom: 30px;
|
||||
padding: 15px;
|
||||
background: #F8FAFC;
|
||||
border: 1px solid #E2E8F0;
|
||||
font-size: 13px;
|
||||
color: #64748B;
|
||||
border-radius: 4px;
|
||||
}}
|
||||
.article-content {{
|
||||
font-family: 'Lora', Georgia, 'Times New Roman', serif;
|
||||
font-size: 18px;
|
||||
color: #1A202C;
|
||||
line-height: 1.7;
|
||||
}}
|
||||
|
||||
/* Professional Markdown Overrides */
|
||||
.article-content h1 {{ font-family: 'Inter', sans-serif; font-size: 32px; font-weight: 600; margin-top: 0; }}
|
||||
.article-content h2 {{ font-family: 'Inter', sans-serif; font-size: 24px; font-weight: 600; margin-top: 40px; border-bottom: 1px solid #E2E8F0; padding-bottom: 8px; }}
|
||||
.article-content h3 {{ font-family: 'Inter', sans-serif; font-size: 20px; font-weight: 600; margin-top: 30px; }}
|
||||
|
||||
.article-content table {{
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 30px 0;
|
||||
font-size: 15px;
|
||||
font-family: 'Inter', sans-serif;
|
||||
}}
|
||||
.article-content th {{
|
||||
background-color: #F1F5F9;
|
||||
text-align: left;
|
||||
padding: 12px;
|
||||
border: 1px solid #CBD5E1;
|
||||
font-weight: 600;
|
||||
}}
|
||||
.article-content td {{
|
||||
padding: 12px;
|
||||
border: 1px solid #E2E8F0;
|
||||
}}
|
||||
.article-content tr:nth-child(even) {{ background-color: #F8FAFC; }}
|
||||
|
||||
.article-content blockquote {{
|
||||
border-left: 4px solid #3182CE;
|
||||
margin: 30px 0;
|
||||
padding: 10px 20px;
|
||||
background: #EBF8FF;
|
||||
font-style: italic;
|
||||
}}
|
||||
|
||||
.article-content pre {{
|
||||
background: #1A202C;
|
||||
color: #E2E8F0;
|
||||
padding: 20px;
|
||||
border-radius: 6px;
|
||||
overflow-x: auto;
|
||||
font-size: 14px;
|
||||
line-height: 1.5;
|
||||
}}
|
||||
|
||||
.footer-note {{
|
||||
margin-top: 60px;
|
||||
padding-top: 20px;
|
||||
border-top: 1px solid #E2E8F0;
|
||||
font-size: 13px;
|
||||
color: #94A3B8;
|
||||
text-align: center;
|
||||
}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="pitch-section">
|
||||
Hi Timo,<br><br>
|
||||
I noticed your list of free resources for small businesses is one of the more practical ones out there. One category that's often missing: <b>QR code generators</b>.<br><br>
|
||||
Instead of just sending a link, I've drafted a comprehensive guide on bridging the 'print gap' using dynamic indicators. I'd love to see this featured on <i>SEO Sandwitch</i> if it aligns with your upcoming content calendar.<br><br>
|
||||
The full draft preview is below.<br><br>
|
||||
Best,<br>
|
||||
<b>Timo</b><br>
|
||||
(Writer & Strategist)
|
||||
</div>
|
||||
|
||||
<div class="draft-metadata">
|
||||
<div><b>STATUS:</b> Finished Draft</div>
|
||||
<div><b>FORMAT:</b> Case Study / Guide</div>
|
||||
<div><b>LENGTH:</b> ~2,400 Words</div>
|
||||
</div>
|
||||
|
||||
<div class="article-content">
|
||||
{article_html}
|
||||
</div>
|
||||
|
||||
<div class="footer-note">
|
||||
This is a private preview intended for the editorial team at SEO Sandwitch.
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
|
||||
message = MIMEMultipart()
|
||||
message["From"] = smtp_user
|
||||
message["To"] = to_email
|
||||
message["Subject"] = subject
|
||||
message.attach(MIMEText(html_template, "html"))
|
||||
|
||||
try:
|
||||
print(f"Connecting to {smtp_host}:{smtp_port} (PREMIUM MODE)...")
|
||||
with smtplib.SMTP_SSL(smtp_host, smtp_port) as server:
|
||||
server.login(smtp_user, smtp_pass)
|
||||
print("Login successful. Sending premium document email...")
|
||||
server.sendmail(smtp_user, to_email, message.as_string())
|
||||
print(f"Premium email sent successfully to {to_email}!")
|
||||
except Exception as e:
|
||||
print(f"Failed to send email: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
send_premium_test_email()
|
||||