SEO: compare/guide pSEO pages + internal links + intent differentiation

This commit is contained in:
Timo Knuth
2026-06-22 13:22:11 +02:00
parent 0866c200a0
commit 22a987029b
22 changed files with 9425 additions and 8218 deletions

View File

@@ -0,0 +1,255 @@
# QRMaster SEO Sprint: Dynamic QR Buying Decision
Run date: 2026-06-22
Automation: QRMaster SEO Sprint Machine
Mode: recommendation and PR-ready tasks only, no publishing
## Inputs Used
- `docs/automations/qrmaster-seo-sprint-machine.md`
- `docs/automations/qrmaster-pr-seo-review.md`
- `.agents/product-marketing-context.md`
- `marketing/programmatic-seo-top-50.md`
- `seo-keywords.csv`
- `src/lib/comparison-pages.ts`
- `src/lib/guide-pages.ts`
- `src/app/sitemap.ts`
- `src/app/robots.ts`
Missing requested input: `marketing/keyword-strategy-seo-plan.md` is not present in this worktree. Scoring used `seo-keywords.csv`, `marketing/programmatic-seo-top-50.md`, and repo inspection instead.
## PLAN
1. Understand the task: run a controlled weekly SEO sprint without publishing.
2. Identify affected files: pSEO page data, route templates, sitemap, robots, and target money pages.
3. Design the implementation: select one cluster and expose only approved pages through allowlisted routes.
4. Implement step-by-step: prepare PR-ready tasks, not direct changes.
5. Verify results: use the PR SEO review checklist before merge.
## Cluster Selection
Selected cluster: Dynamic QR buying decision.
Rationale: This cluster owns the highest commercial decision point for QR Master: static/free one-off generation versus dynamic, editable, trackable QR workflows. It also avoids repeating last week's tracking package while still reusing the same route/template investment. The top two backlog entries are both in this cluster, and their content already exists in `src/lib/comparison-pages.ts` but is not exposed because there is no `/compare/[slug]` route.
Important implementation note: `src/lib/comparison-pages.ts` and `src/lib/guide-pages.ts` contain more records than this sprint should publish. The PR should use an explicit published-slug allowlist or `status` field so only the selected pages become reachable and indexable.
## Candidate Cluster Scores
Scores use the automation model: product fit 30, commercial intent 25, differentiation potential 15, cluster leverage 10, search winability 10, production effort 10.
| Cluster | Product fit | Commercial intent | Differentiation | Cluster leverage | Winability | Effort | Score | Decision |
|---|---:|---:|---:|---:|---:|---:|---:|---|
| Dynamic QR buying decision | 30 | 24 | 14 | 10 | 8 | 8 | 94 | Select |
| Tracking and analytics | 29 | 23 | 14 | 9 | 8 | 7 | 90 | Defer, already selected last run |
| Bulk QR and spreadsheet workflows | 26 | 21 | 12 | 8 | 9 | 8 | 84 | Next after route scaffold |
| Print reliability | 23 | 15 | 12 | 8 | 9 | 8 | 75 | Support cluster |
| Restaurant/menu QR | 25 | 18 | 11 | 8 | 6 | 7 | 75 | Hold for industry sprint |
## Selected Work
| Type | URL | Score | Reason |
|---|---|---:|---|
| New comparison page | `/compare/dynamic-vs-static-qr-codes` | 94 | Highest leverage concept page. Explains why QR Master's dynamic/edit-after-print value exists. |
| New comparison page | `/compare/free-vs-paid-qr-code-generator` | 91 | Bottom-funnel upgrade page. Connects free QR intent to pricing, dynamic limits, analytics, and reprint risk. |
| New guide page | `/guide/dynamic-qr-code-best-practices` | 88 | Strategic support guide. Helps AI/search systems connect dynamic QR setup, naming, tracking, and print workflows. |
| Refresh existing page | `/dynamic-qr-code-generator` | 92 | Money page. Strong volume in CSV: `dynamic qr code`, `dynamic qr code generator`, `create dynamic qr code`, `dynamic qr generator`, and `dynamic qr code creator` are each 1k-10k. |
| Refresh existing page | `/reprint-calculator` | 84 | Conversion-support page. Should quantify the central "static QR reprint cost" argument for comparison pages. |
## Keyword Intent And Fan-Out
| URL | Primary keyword | Intent | Fan-out subtopics |
|---|---|---|---|
| `/compare/dynamic-vs-static-qr-codes` | dynamic vs static QR codes | Commercial investigation | Can static QR codes be edited, what dynamic QR tracking means, reprint risk, when static is enough, print campaigns, menus, packaging, privacy-aware analytics, cost tradeoff, migration from static to dynamic. |
| `/compare/free-vs-paid-qr-code-generator` | free vs paid QR code generator | Commercial investigation | Free static generators, dynamic QR limits, paid plan features, tracking, branding, expiry risk, scan limits, pricing, hidden reprint cost, business use cases, when free is enough. |
| `/guide/dynamic-qr-code-best-practices` | dynamic QR code best practices | Informational to commercial | Naming conventions, campaign grouping, editable destinations, scan tracking setup, QR placement, UTM usage, print testing, destination updates, privacy/GDPR framing, internal reporting. |
| `/dynamic-qr-code-generator` | dynamic QR code generator | Transactional | Create dynamic QR, editable QR code, free dynamic QR limits, tracking, update after print, branding, plan limits, static vs dynamic, use cases, schema-backed FAQ. |
| `/reprint-calculator` | QR code reprint cost calculator | Commercial utility | Static QR risk, reprint math, edit-after-print savings, campaign examples, pricing comparison, calculator assumptions, what to do after calculating savings. |
## Recommended New Pages
### 1. `/compare/dynamic-vs-static-qr-codes`
PR status: content data exists in `src/lib/comparison-pages.ts`; needs route/template, metadata, schema, sitemap entry, and internal links.
Title: `Dynamic vs Static QR Codes: Which to Use`
H1: `Dynamic vs Static QR Codes`
Meta description: `Compare dynamic and static QR codes for editability, scan tracking, reprint risk, and business workflows before you print.`
Slug: `/compare/dynamic-vs-static-qr-codes`
Direct answer: Static QR codes lock the destination into the image. Dynamic QR codes route through a managed link, so teams can change the destination and measure scans after the QR code has been printed.
Schema opportunities: `Article`, `FAQPage`, `BreadcrumbList`, and `ItemList` for the comparison table.
Visual: Responsive comparison table plus a simple redirect-flow diagram: printed QR -> QR Master redirect -> current destination.
### 2. `/compare/free-vs-paid-qr-code-generator`
PR status: content data exists in `src/lib/comparison-pages.ts`; needs route/template, metadata, schema, sitemap entry, and internal links.
Title: `Free vs Paid QR Code Generator`
H1: `Free vs Paid QR Code Generator`
Meta description: `See when a free QR generator is enough and when paid dynamic QR features, tracking, branding, and reprint savings are worth it.`
Slug: `/compare/free-vs-paid-qr-code-generator`
Direct answer: A free QR generator is usually enough for one permanent static link. A paid QR platform becomes worth it when the code is printed at scale, tied to campaigns, or needs editing and analytics later.
Schema opportunities: `Article`, `FAQPage`, `BreadcrumbList`, and `ItemList`.
Visual: "Free is enough when..." versus "Paid is worth it when..." table.
### 3. `/guide/dynamic-qr-code-best-practices`
PR status: content data exists in `src/lib/guide-pages.ts`; needs route/template, metadata, schema, sitemap entry, and internal links.
Title: `Dynamic QR Code Best Practices`
H1: `Dynamic QR Code Best Practices`
Meta description: `Plan dynamic QR codes with better naming, tracking, print testing, privacy checks, and update workflows before campaigns go live.`
Slug: `/guide/dynamic-qr-code-best-practices`
Direct answer: The best dynamic QR workflows use clear naming, stable print placement, measurable destinations, and disciplined update management after the code is in circulation.
Schema opportunities: `Article`, `HowTo`, `FAQPage`, and `BreadcrumbList`.
Visual: Checklist or workflow graphic for naming -> print test -> publish -> monitor -> update.
## Recommended Page Refreshes
### `/dynamic-qr-code-generator`
Refresh rationale: This is the money page for the cluster and already ranks against high-volume dynamic QR terms. It has strong answer-first structure, schema, FAQs, and internal links, but should be tightened before more internal equity points to it.
PR-ready tasks:
- Shorten title under roughly 60 characters if possible. Current absolute title is likely too long.
- Verify current plan limits against product/business truth before publishing. Product context says Free includes 8 dynamic codes, but app copy often says 3 active dynamic codes.
- Re-check competitor pricing and claims before keeping comparison table language.
- Replace or verify weak research/stat blocks. Avoid unsupported numbers such as broad print-error claims unless a reliable source is attached.
- Add contextual links to the two new comparison pages and the new best-practices guide.
- Ensure each major H2 starts with a direct answer in the first sentence.
### `/reprint-calculator`
Refresh rationale: This page supports the strongest conversion argument for dynamic QR: printed assets should not become waste when URLs change.
PR-ready tasks:
- Update title to target the query directly: `QR Code Reprint Cost Calculator`.
- Add an answer-first block explaining when static QR reprints become expensive.
- Add FAQ content and `FAQPage` schema for "Can I edit a QR code after printing?", "How much do QR reprints cost?", and "When is dynamic QR worth it?"
- Link to `/compare/dynamic-vs-static-qr-codes`, `/compare/free-vs-paid-qr-code-generator`, `/dynamic-qr-code-generator`, and `/pricing`.
- Add visible assumptions around calculator inputs so AI/search systems can cite the methodology.
- Keep calculator lightweight. Do not add heavy chart libraries or large images.
## Internal-Link Plan
Add links from:
- `/dynamic-qr-code-generator` to `/compare/dynamic-vs-static-qr-codes`, `/compare/free-vs-paid-qr-code-generator`, `/guide/dynamic-qr-code-best-practices`, and `/reprint-calculator`.
- `/reprint-calculator` to `/compare/dynamic-vs-static-qr-codes`, `/dynamic-qr-code-generator`, and `/pricing`.
- `/qr-code-tracking` to `/compare/dynamic-vs-static-qr-codes` where dynamic tracking is explained.
- `/qr-code-analytics` to `/guide/dynamic-qr-code-best-practices` where naming and placement discipline are discussed.
- `/pricing` to `/compare/free-vs-paid-qr-code-generator` with anchor text like `free vs paid QR generator`.
- `/tools/url-qr-code` to `/compare/dynamic-vs-static-qr-codes` if the tool page discusses static output or destination changes.
Add links from new pages to:
- `/dynamic-qr-code-generator`
- `/qr-code-tracking`
- `/qr-code-analytics`
- `/reprint-calculator`
- `/pricing`
- `/guide/dynamic-qr-code-best-practices`
Anchor text should be natural and varied: `dynamic QR code generator`, `track QR code scans`, `compare free and paid QR generators`, `estimate reprint savings`, `dynamic QR best practices`.
## PR Plan
1. Add controlled route templates:
- `src/app/(main)/compare/[slug]/page.tsx`
- `src/app/(main)/guide/[slug]/page.tsx`
2. Add published-slug allowlists:
- comparisons: `dynamic-vs-static-qr-codes`, `free-vs-paid-qr-code-generator`
- guides: `dynamic-qr-code-best-practices`
3. Route behavior:
- `generateStaticParams` returns only published slugs.
- Unknown or unpublished slugs call `notFound()`.
- Metadata uses page title, description, canonical path, Open Graph, and no accidental `noindex`.
4. Template behavior:
- One H1.
- Direct answer block near top.
- H2/H3 sections start with answer-first language.
- Responsive comparison tables with horizontal overflow on mobile.
- CTA blocks point to selected commercial pages.
5. Schema:
- Comparison pages: `Article`, `FAQPage`, `BreadcrumbList`, `ItemList`.
- Guide page: `Article`, `HowTo`, `FAQPage`, `BreadcrumbList`.
6. Sitemap:
- Add selected `/compare/...` and `/guide/...` URLs only.
- Use current sprint date for `lastModified`.
7. Refresh pages:
- Update `/dynamic-qr-code-generator`.
- Update `/reprint-calculator`.
8. Review gate:
- Run the PR SEO review from `docs/automations/qrmaster-pr-seo-review.md`.
- Do not merge until high-severity SEO/conversion findings are resolved.
## Robots And Indexing Assumptions
- `src/app/robots.ts` currently allows public pages and explicitly allows `OAI-SearchBot`, `GPTBot`, `ChatGPT-User`, `PerplexityBot`, `ClaudeBot`, `anthropic-ai`, and `Google-Extended` while blocking private paths.
- Selected pages should be indexable, canonicalized, and included in `sitemap.ts`.
- Unselected `comparisonPages` and `guidePages` records should remain unpublished until a human approves them.
- For pages that should not appear, prefer route allowlisting or `notFound()` rather than relying on robots.txt.
External guidance checked:
- Google SEO Starter Guide: https://developers.google.com/search/docs/fundamentals/seo-starter-guide
- Google AI features and your website: https://developers.google.com/search/docs/appearance/ai-features
- Google structured data introduction: https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data
- Google robots.txt guidance: https://developers.google.com/search/docs/crawling-indexing/robots/intro
- OpenAI crawler overview: https://developers.openai.com/api/docs/bots
- OpenAI publisher/developer FAQ for ChatGPT search inclusion: https://help.openai.com/en/articles/12627856-publishers-and-developers-faq
## Mobile, Visual, And Speed Checks
- Keep comparison tables responsive with `overflow-x-auto` and a minimum readable width.
- Avoid new heavyweight images unless they are compressed and useful.
- Use existing lightweight cards, tables, and schema components.
- Validate CTA tap targets on mobile.
- Do not add animated hero assets or charting libraries for this sprint.
## Verification Checklist
- `npm run lint`
- `npm run build`
- Confirm exactly one H1 per selected page.
- Confirm metadata title, description, canonical, and Open Graph are set.
- Confirm selected pages are in `sitemap.ts`.
- Confirm unpublished pSEO records are not reachable.
- Confirm robots rules do not block selected public pages.
- Validate JSON-LD output for comparison and guide pages.
- Check internal links and CTA destinations manually.
- Check mobile rendering for comparison tables and CTA blocks.
- Run the QRMaster PR SEO Review checklist and request changes for any high-severity finding.
## Follow-Up Social And Outreach Ideas
1. LinkedIn post: "Static QR codes are cheap until the printed URL changes." Link to the dynamic-vs-static comparison.
2. X thread: "Free QR generators are enough for one-off links. Here is when paid dynamic QR becomes cheaper." Link to free-vs-paid.
3. Quora answer: "Can you change a QR code after printing?" Explain static vs dynamic and link to the comparison.
4. Short YouTube/Loom: show a printed flyer scenario, change the QR destination, and show scan tracking.
5. Outreach pitch: send the reprint calculator to print shops, small agencies, and restaurant consultants as a utility they can reference.
## Hold For Future Sprints
- Tracking and analytics cluster from the 2026-06-15 run remains valid, but do not duplicate the same package. The same guide route scaffold can later expose `/guide/how-to-track-qr-code-scans`, `/guide/how-to-use-utm-with-qr-codes`, and `/guide/qr-code-gdpr`.
- Next good cluster after this PR: Bulk QR and spreadsheet workflows, because `bulk qr code generator`, `mass qr code generator`, and `qr code generator excel` show strong search fit and low competition in `seo-keywords.csv`.