Case study Β· E-commerce Β· July 2026

Five landing pages alongside a JTL shop β€”
without touching the shop.

ImkerPur sells honey and bee products through a JTL-Shop 5 on Strato shared hosting. The goal was visibility for product groups that existed in the shop only as an item list β€” without installing a plugin and without raising the shop's update risk.

Client
ImkerPur Β· imkerpur.de
System
JTL-Shop 5 Β· Strato shared hosting
Scope
5 landing pages Β· 27 FAQ entries
Live since
14 July 2026
? ? ?
The questions were asked in Search Console β€” the shop answered nowhere.
Starting point

A working shop without answer pages.

The shop was running. Products, prices, checkout β€” all in place. What was missing were pages answering the questions that come before the purchase: what is raw honey anyway? Why does it crystallise faster? Can children eat it? These questions were demonstrably asked β€” they are in the shop's Google Search Console. Nowhere were they answered.

The obvious solution β€” an SEO plugin inside the shop β€” was deliberately ruled out. It would have touched templates and database and been up for debate again with every JTL update. Instead, a second, independent system was built alongside the shop, under the same domain.

Result

Five pages, live and publicly verifiable.

Each page is generated from a JSON file β€” a new landing page is a new file, not new code. Ratings and prices are the real values from the shop, not placeholders.

5 / 5 Live & Indexed
27 FAQ Answers to real questions
100% Static & fast
0 Shop plugins required
ImkerPur Landingpages E-Commerce Showcase
Visualization: 100/100 PageSpeed landing pages for ImkerPur raw honey & bee products

The ratings come from the ImkerPur shop and are carried over unchanged into the AggregateRating schema. They are customer reviews of the shop β€” not a result of this project.

Implementation

What was built.

Architecture, structured data, AI readability and legal guardrails β€” tailored for fast hosting and 0-plugin operation.

Static in dedicated subfolder

Astro generates plain HTML. The build lands via SFTP under /jtlshop/lp/ and is therefore reachable at imkerpur.de/lp/. No shop file is changed, no database touched, no plugin installed.

Discoverable for AI systems (GEO)

An llms.txt describes shop and pages for LLM crawlers. In addition, each page starts after the hero with a direct-answer block: a precise answer to the page's core question, understandable without context. This is exactly the format AI search engines prefer to adopt, because it can be quoted without rewriting.

FAQ from real search queries

The 27 FAQ entries across all five pages are derived from the shop's Google Search Console queries β€” from what people actually typed. They are not guessed and not copied from competitors.

Auto-deploy via GitHub Actions

Push to main β†’ GitHub Actions builds β†’ lftp uploads via SFTP. Deliberately without a delete flag: the workflow can add and update in the target folder but remove nothing from the shop.

ImkerPur High-Performance Mobile UI & PageSpeed 100 Mockup
Mobile high-performance UI with 100/100 PageSpeed, accessibility & optimized conversion funnel

Structured data on every page

JSON-LD / Schema.org
  • Organization
    Anchors the shop as an entity β€” name, URL, logo. Present on every page.
  • Product
    Product group with brand, AggregateOffer (price range from the real shop prices) and AggregateRating.
  • FAQPage
    All questions and answers of the page machine-readable β€” the basis for rich results and AI citations.

The price range in AggregateOffer is calculated at build time from the actual product prices β€” it therefore cannot diverge from the displayed prices.

GEO AI Optimization & Schema.org Structured Data Dashboard
GEO & AI Search Engine Optimization: Automated Schema.org JSON-LD linking with Search Console queries

Accessibility: calculated, not estimated

WCAG 2.1 AA & AAA

The client wanted the shop's button styling β€” orange with white text. The brand orange #EF8D06 does not carry white text in an AA-compliant way. Instead of refusing the wish or ignoring the rule, a dedicated, deepened button tone was introduced:

  • #B55E08
    Button orange, white text
    Ratio 4.60:1
    AA βœ“
  • #3A2508
    Dark text on brand orange
    Ratio 5.86:1
    AA βœ“
  • #9E5700
    Honey brown for body text
    Ratio β‰₯ 4.9:1
    AA βœ“
  • #FFD733
    Footer yellow, dark text
    Ratio 12.5:1
    AAA βœ“

The values sit as comments right next to the colour variables in the code β€” traceable for anyone taking the project over later.

Handover to the client

Simple editing interface without GitHub account

The owner edits the content himself through an editing mask. The mask shows meaningful field names instead of JSON β€” "Heading (H1)", "Benefit cards", "Frequently asked questions". Technical fields such as shop links and image files are marked "do not change" with a gear icon; creating and deleting pages is locked.

Important in practice: login runs via an email invitation. The owner needs no GitHub account and does not have to know anything about the underlying repository β€” a hurdle on which self-service handovers otherwise regularly fail. Access is limited to this one project and revocable at any time, there are no running costs, and after saving the change is live about two minutes later.

Images and ratings were deliberately not released for editing. Ratings must match the real shop ratings, otherwise the schema becomes incorrect β€” that risk does not belong in an editing mask. Every change is versioned and revertible.

AI copywriter with legal guardrails

Custom GPT with food law protection

The editing mask only solves the operating problem, not the wording problem. So a custom GPT was added in which the limits of food law are stored as fixed rules: Health Claims Regulation (EC) 1924/2006, Β§ 11 LMIV and Β§ 5 UWG β€” spelled out concretely as a list of impermissible phrases such as "strengthens the immune system" or "anti-inflammatory". Also fixed: no invented figures, certificates or awards.

What matters is the behaviour in a conflict. An impermissible request is neither silently refused nor implemented, but briefly explained β€” and immediately replaced with a compliant yet still persuasive alternative. "Write that the honey strengthens the immune system" becomes a note on the legal problem plus the suggestion: "Raw, unfiltered and never heated above 40 Β°C β€” that is how the full character is preserved."

Obstacles

What came up along the way.

The interesting part of a project is rarely in the proposal. These 5 points actually shaped the work:

01

The docroot was not where the SFTP login starts

The Strato login lands on "/", but delivery happens from "/jtlshop/". An upload to "/lp/" would have stayed invisible. The deploy target is therefore "/jtlshop/lp/" β€” determined before the first upload, not after the first failure.

02

Does the shop rewrite rule reach into the new folder?

The JTL shop's .htaccess was read before the first upload: the rewrite only applies to non-existent files. Since real HTML files sit under /lp/, the folder stays untouched β€” verified rather than hoped.

03

The host does not speak FTP

The common FTP deploy action was unusable because the Strato host only offers SFTP on port 22. The workflow therefore uses lftp β€” the same method verified manually beforehand.

04

A deploy must not be able to damage the shop

The upload deliberately runs without a delete flag. The workflow can add and update files in the target folder but remove nothing from the shop β€” not even on a broken build.

05

Before touching shop files: back up

Before the shop's robots.txt was extended with the sitemap, the original was stored under version control. A way back exists before the way forward is taken.

Measurable

What can be proven β€” and what cannot.

Real measurement results from Google PageSpeed Insights β€” clearly separated between lab and field data.

100 /100
Performance Google PageSpeed
100 /100
Accessibility WCAG 2.1 AA Kontraste
100 /100
Best Practices Web Standards & Sec
100 /100
SEO Technisch & Schema

PageSpeed Insights, mobile mode, for a delivered landing page at imkerpur.de/lp/, measured in July 2026. Mobile is the stricter of the two measurement modes. The 100 for accessibility is the result of the contrast recalculation described above β€” it did not appear by itself.

Putting the Core Web Vitals in context

Google Search Console reports "Core Web Vitals: Failed" for imkerpur.de. That value comes from CrUX field data for the entire domain over 28 days and is dominated by the JTL shop (TTFB around 2.8 seconds). It does not describe the static landing pages whose lab values appear above.

We could comfortably show only the four hundreds here. We show both, because the distinction between lab and field data is decisive for the assessment β€” and because a client who later looks into Search Console himself would otherwise be rightly confused. A perfect lab score does not mean the domain as a whole is fast; it means the delivered part is.

What deliberately appears nowhere here

This page contains no figures on traffic growth, ranking improvements, conversion rate or revenue. The reason is simple: these values were not collected, and at the time of this case study the pages are a few weeks old β€” too short a period for reliable SEO statements. As soon as usable data exists and the client agrees to its publication, this case study will be extended. Invented numbers would be easier and would be worthless.

And your shop?

Same approach, different range.

The approach is tied neither to honey nor to JTL. What is needed is your own domain, web space access and product groups people ask questions about.

Alexander Ohl

Alexander Ohl

Pragma-Code Support (AI) β€’ Online

Hello! I am the Pragma-Code Assistant. How can I help you today? You can ask me about our services or select a topic below.