A corporate site in Lyon sits in Part-Dieu, in a Confluence office or in a Gerland laboratory. That is not a reason for WordPress to pretend it is an ERP system or a congress booking platform for Centre de Congrès. It is a reason for the theme, Gutenberg blocks, CPT and plugins to be written the way a French legal team, an FR/EN editor and a compliance team that reads GDPR and CNIL expect, not just the way a Lighthouse score expects.
WPPoland builds this WordPress from a senior Polish team for businesses in Lyon and Métropole de Lyon. Scope is WordPress development: block or classic theme, custom plugins, Gutenberg, CPT, ACF or native blocks, REST integrations and code review on Git. WooCommerce stores, maintenance retainers and contact are separate topics, with links at the end.
#WordPress development in Lyon
Lyon is France’s second-largest economic centre after Paris, a city with a chemical and pharmaceutical tradition, biotechnology in Gerland, logistics along the Rhône and a growing digital ecosystem around Confluence and Lyon Digital Hub. This is not Paris fintech or the Côte d’Azur tourist market. Here WordPress often serves B2B catalogues, employer-branding portals, laboratory enquiry forms or product pages for Part-Dieu firms that must survive deployment in the same week a lawyer asks about EU hosting and CNIL consent for cookies.
Part-Dieu is France’s second-largest business district after La Défense. Towers, Gare de Lyon-Part-Dieu, conference hotels and corporate offices create a context where WordPress holds product landings, demo forms, technical blogs and employer-branding pages for firms that just closed a funding round or prepare a B2B campaign for the French and German markets. A plugin update breaking a form or an FR/EN translation regression hurts during a Part-Dieu congress week or before an investor meeting, not in August.
Confluence is the district south of Lyon, around Musée des Confluences and a newer startup ecosystem. Lyon Digital Hub and communities such as Silicon Rhône meet in this area. WordPress serves SaaS landings, beta registration forms, product blogs and FR/EN multilingual content for firms selling across the European Union. A brief from a client here often sounds like: “we have Elementor, editorial is scared of migration, and the CTO wants Gutenberg and Git”. That is a content-model and delivery-process problem, not a marketplace template problem.
Gerland and the Lyonbiopôle biotechnology park are a different profile from a Part-Dieu corporation. More regulatory content, more PDF documents, more forms collecting personal data under GDPR and more audit-trail requirements. WordPress in this environment is a research portal, laboratory services catalogue or spin-off site that collects enquiries and must respect France’s Loi Informatique et Libertés and CNIL guidance.
The chemical and industrial sector in the Lyon metropolitan area generates another profile: parts catalogues, quotation request forms, distributor pages and FR/DE content for cross-border clients from Alsace or Switzerland. WordPress must survive a traffic spike after a new product line announcement, not just look good on a laptop in a Part-Dieu office.
The typical project that reaches senior developers in Lyon does not sound like “make us a nice site”. It sounds like: inherited page-builder themes, a Gerland laboratory publishing a B2B offer in a narrow time window, a form with a SIRET field collecting personal data under GDPR and CNIL, and a new congress subpage built by copying last year’s page and manually swapping dates. That is technical debt that surfaces on a Monday morning, not in an SEO audit.
#Block theme, classic theme and custom plugin
A new build in Lyon starts with a decision that costs months if you get it wrong: whether presentation lives in a block theme with theme.json, in classic PHP templates, and what goes into a plugin. That decision is written down before the first commit.
#theme.json, patterns and theme boundary
A block theme holds tokens: palette, typography scale, spacing, content widths. For a Part-Dieu firm that means a bold brand palette with WCAG 2.2 AA contrast preserved. For a Gerland laboratory it means a restrained layout, a readable typeface without ornament, and components that do not break on long chemical compound names or product codes. Block patterns describe repeatable layouts: hero with distributor map, team grid, operational notice block, laboratory offer card with date, footer with a politique de confidentialité link aligned with GDPR.
Full site editing (FSE) makes sense when the editorial team genuinely needs control over header and footer. In practice many B2B and life-sciences firms in Lyon do not want that: the header is a brand and compliance element, not a playground. The block theme stays, but template parts (header, footer) are locked, and editorial works within patterns and custom blocks.
Every custom block gets block.json, a category, an icon and attributes with schema. Where content must reach search engines and RSS, rendering goes server-side. React in the editor serves InspectorControls and preview, not a front-end SPA pretending to be WordPress. The handbook at developer.wordpress.org is the API contract source, not a training slide.
#When a classic PHP theme stays
Inherited installations in Lyon are often five or seven years old: child theme on a commercial skeleton, ACF wired into page.php, shortcodes in content, jQuery from the pre-block era, a separate page copy for every Part-Dieu congress. Rewriting that to FSE “because it is 2026” costs more than fixing template hierarchy, extracting logic into a plugin, and adding Gutenberg only where editorial actually assembles new landings.
A classic theme stays when:
- conditional logic lives in templates (different menu for B2B client, Alsace distributor, German partner) and moving it to
theme.json simplifies nothing; - the editorial team publishes hundreds of pages in the classic editor and FSE training would be a bigger risk than debt;
- the child theme is thin and the problem is plugins and autoload, not the template engine itself.
Even then new pieces go in as blocks, not as more shortcodes. A shortcode in 2019 content stays for migration. New code does not add more.
#Function to plugin, appearance to theme
The boundary is simple and recorded in the runbook. The theme knows how to display. The plugin knows. B2B product CPT, CRM queue, REST endpoint for intranet, an “operational editor” role without publish_pages on the public production site: that is a plugin. Colours, grid, hero pattern: that is the theme. If the parts catalogue disappears after a theme change, the architecture was wrong.
A custom plugin has its own prefix, PSR-4 autoload, a main file with Plugin Name header and semver version, and tests where logic matters (congress dates, CRM field mapping, SIRET form validation). Business logic does not go into the theme’s functions.php, because functions.php dies with the theme, and a firm in Lyon changes branding partners more often than it changes its content model.
Layer comparison at kickoff:
| Layer | What lives there | Example in Lyon |
|---|
| Theme | presentation, tokens, patterns | Part-Dieu congress landing, footer with politique de confidentialité |
| Plugin | CPT, roles, REST, integrations | B2B product, laboratory offer, location, audit logs |
| Gutenberg | editorial without HTML | event pattern, location block, offer card |
| Staging and Git | process, not feature | branch, review, freeze before campaign |
#Gutenberg, CPT and ACF for B2B and life sciences
Gutenberg without a content model ends with every subpage as a unique block collage and nobody able to produce a list. In Lyon lists are concrete: B2B products, laboratory offers, events, office locations (Part-Dieu is not Gerland, Gerland is not Confluence), publications, job openings. These are objects, not “another page in the tree”.
#Custom post types instead of copied landings
We register CPT with custom capabilities, not mapped to post. An operational editor edits a product card, not delete plugins. CPT archives get a template or query pattern. Single objects get a template that prevents layout drift beyond the agreed structure. Taxonomies stay separate: product type (industrial part, laboratory service, software) does not mix with blog tags.
ACF has a place here, but not as a block substitute. ACF fields on CPT work for data that is fields, not layout: congress date, season number, language version, catalogue PDF file, “embargo until” flag. Offer or article page layout is assembled in Gutenberg. Mixing ACF Flexible Content with the full block editor on the same object creates two sources of truth and an editor who does not know where to click.
Where ACF is unnecessary, block attributes in block.json are enough. A “location with map” block does not need a field group on every page. It needs attributes and possibly InnerBlocks for the description. Fewer plugins in the admin means less attack surface and fewer conflicts with consent and cache plugins.
A Part-Dieu congress landing copied from last year’s page is debt that surfaces on a Monday morning. A CPT object with season, date and material fields survives November 2027 without copying the tree. The template reads the object. The editor changes the date, not HTML.
#Server blocks instead of shortcodes
A shortcode in content is debt visible only at migration. New code in Lyon goes in as a block with server render: semantic markup, attributes in the block comment, filterable output. A product-list block reads CPT, caches the query with a transient with explicit TTL and invalidation on save_post, not on every request during a seasonal campaign peak.
Block code review checks three things before a branch merges to main: whether the block works with JS disabled on the front preview, whether attributes have types and defaults, and whether it does not load the full editor build on the front. Gutenberg that adds a megabyte of React to a B2B catalogue page does not pass review.
#GDPR, CNIL and forms in the French context
France applies GDPR alongside the national Loi Informatique et Libertés. The supervisory authority is the Commission Nationale de l’Informatique et des Libertés (CNIL). For a WordPress site in Lyon that is not an abstract legal paragraph. It is decisions in forms, consent plugins, politique de confidentialité and audit logs.
What we write into the brief and the code:
- Forms collecting personal data (B2B enquiries with a SIRET field, newsletters, congress registration forms, distributor contact forms) get an explicit legal basis, a consent checkbox where consent is required, and field minimisation. Fields you do not need for the form’s purpose do not exist.
- Consent plugins (Axeptio, Tarteaucitron, Cookiebot, Complianz) are configured so marketing scripts do not load before acceptance. CNIL guidance requires informed consent before non-essential cookies. That is a theme and enqueue-order decision, not a maintenance ticket after the first report.
- Politique de confidentialité and politique des cookies are templates with fields, not blocks an editor can delete from the tree. In Lyon those pages are compliance elements, not marketing footer afterthoughts.
- CRM integrations (HubSpot, Pipedrive, Salesforce) get data-flow documentation: what reaches the external system, how long, who is the controller. Data processing agreements are the client’s decision, but WordPress configuration must allow that decision to be implemented.
- Audit logs for forms and admin changes help during incidents. If someone asks “who changed contact-form settings on Friday before the Part-Dieu congress”, the answer cannot be “we do not know”.
CNIL publishes recommendations on cookies and tracking that affect GTM, Meta Pixel and similar tools. A consent plugin copied from a German shop is not automatically CNIL-aligned, and no banner is not automatically legal when tracking runs. We do not sell legal opinions. We ensure tools on the site match what stands in the politique de confidentialité, and that after a GTM or consent-plugin update consent logs still record correctly.
For WooCommerce stores in EUR, payment gateway integration handling Stripe, Payplug, Mollie, TVA and invoices aligned with French tax law is a separate brief on the WooCommerce developer in Lyon page. This page stays with WordPress development, not checkout.
#EU hosting and FR/EN versions
Personal data under GDPR raises the question: which jurisdiction hosts the server. OVH in France, Scaleway in Paris, AWS in Ireland (eu-west-1), Hetzner in Germany, Claranet in Lyon are different answers for a compliance officer, but all sit within the EU. Ashburn or Hillsboro is the United States and usually a veto without Standard Contractual Clauses or another transfer basis.
The question “is hosting in Lyon” comes up less often than “is it in the EU”. The operational answer is two-part. Jurisdiction: EU, data does not move overnight to a US bucket without agreement. Latency: origin in France or Ireland plus a CDN with TLS termination in the EU usually suffices for users in Lyon and central Europe. Residency decisions go into the runbook, not a slogan “hosting in Lyon”.
Multilingual FR/EN (sometimes FR/DE for Alsace or Swiss clients) requires a separate architectural decision. WPML for traditional WordPress or native i18n routing for headless builds with Astro or Next.js. Each language version gets correct hreflang tags, localised URL slugs and independent SEO meta data. A French B2B form with a SIRET field and an English version without that field are not a 1:1 copy but two templates with different validation fields.
#B2B campaigns and deployment freeze windows
Congress events in Part-Dieu, trade fairs at Eurexpo or product campaigns targeting the French and German markets create windows where hundreds of firms watch product landings, registration forms and CRM integrations. A site failure mid-congress week is not a “bug for the backlog”. It is lost leads and reputation damage with partners who have a full calendar for the quarter.
The deployment runbook for clients in Lyon includes a production deploy freeze for campaign windows, usually from two weeks before an event until one week after. Critical security updates go through staging and a night window; everything else waits. That is not a developer preference. It is an operational decision agreed with the client before the season. Anyone doing a “small cache patch” on congress Monday learns when the site does not survive the traffic spike from attendees’ phones.
#Integrations that repeat in Lyon
B2B contact forms are the most common integration point for Part-Dieu firms and chemical producers. In practice that means connecting WordPress to CRM, field validation aligned with GDPR, and rate limiting on public endpoints so a form does not become a spam vector during a new offer announcement hour.
For Confluence firms the second recurring integration is SaaS product landings: demo system synchronisation, Vimeo or YouTube video embed, beta registration forms with CNIL-aligned fields. Every integration gets webhook documentation, an error matrix and end-to-end testing on staging before production deployment.
For Gerland laboratories the third integration is a research portal: publications, quotation request forms with data minimisation, document management system connection. Webhooks and form status must survive a plugin update. A laboratory that loses CNIL consent logs after a patch produces a compliance incident, not a UX ticket.
#How we work
Every project in Lyon follows a structured process that minimises risk and maximises transparency:
- Discovery and audit. We review the current site architecture, content structure, analytics data and business goals. We document technical debt, identify quick wins and define measurable success criteria before writing the first line of code. We also check the Part-Dieu congress calendar, seasonal campaigns or Confluence demo days so deployment does not land in a critical window.
- Technical specification. Based on the audit we produce a detailed specification covering architectural decisions, technology choices, timeline, milestones and scope. You approve the plan before development starts.
- Development sprints. We work in one-to-two-week iterations with a demo at the end of each sprint. You see progress continuously, give feedback in time and can reprioritise without derailing the project.
- Staging review. The complete solution runs on staging identical to production. You test with real content, verify integrations and approve for launch. We fix issues before go-live.
- Launch and handover. We handle DNS changes, SSL configuration, cache warm-up, redirect verification and monitoring setup. After launch we stay on standby for 72 hours for immediate issue resolution.
#Typical challenges we solve
Businesses in Lyon regularly come to us with these problems:
- Page-builder to Gutenberg FSE migrations before a Part-Dieu congress: we extract content, rebuild layouts as block patterns and train editorial teams without disrupting live traffic or SEO positions during peak visit weeks
- Performance problems from plugin overload on B2B and life-sciences sites: we audit installed plugins, replace heavy dependencies with lightweight custom code, implement caching layers and reduce database queries from hundreds to single digits
- WordPress scaling for seasonal campaigns and Part-Dieu events: we configure Cloudflare full-page caching with exceptions for forms, optimise database indexes, implement query-result caching and run load tests before campaign start
- Security hardening for sites collecting contact data or B2B forms: Content Security Policy headers, disabled XML-RPC, enforced two-factor authentication for the admin panel and rate limiting on login endpoints
Core Web Vitals are a Google ranking factor and a conversion factor on a site collecting B2B leads during a seasonal campaign or congress week in Lyon. We do not promise a specific percentage delta before audit, because improvement scale depends on the starting state of each installation. What we do systematically:
- Asset optimisation. Images processed through the build pipeline into responsive srcset in WebP and AVIF formats, CSS purged and inlined for above-the-fold content, JavaScript tree-shaken and loaded via dynamic imports.
- Caching architecture. Multi-layer caching: browser cache, CDN (Cloudflare), application cache (Redis), database query cache with intelligent invalidation, with separate treatment for dynamic fragments when the site has a contact form or video embed.
- Network optimisation. HTTP/3 with QUIC, Brotli compression, preconnect and dns-prefetch hints, critical resource prioritisation for first view.
- Rendering optimisation. Critical CSS inlining, asynchronous style loading, lazy loading for images and iframes, animation triggers based on Intersection Observer.
Every performance decision is data-driven. We measure before and after, document impact and include a performance baseline in project documentation so regression after the next plugin update is visible immediately, not after the fact in a congress window.
#Local SEO and digital visibility in Lyon
A well-built site is valuable only when your target audience in Lyon and Métropole de Lyon can find it. Our WordPress development projects include foundational SEO architecture from the first sketch:
- Technical SEO foundations. Clean URL structures, XML sitemaps, robots.txt configuration, canonical tags and proper heading hierarchy. We implement Schema.org structured data: LocalBusiness, Organization, Product, Service, FAQ and HowTo where they make sense.
- Local search optimisation. Google Business Profile integration, local schema with your Lyon address, NAP (Name, Address, Phone) consistency and pages prepared for regional queries, including Part-Dieu, Gerland and Confluence where the business genuinely operates in the Lyon metropolitan area or Alsace.
- Core Web Vitals as ranking signals. Google uses page experience metrics in page experience evaluation. We set performance budgets at project start and verify them against CrUX field data, not laboratory measurement alone.
- Content architecture. We structure pillar pages, supporting articles and internal linking so users reach the right topic quickly and search engines clearly understand the firm’s scope of expertise.
SEO is not a post-launch add-on. It is part of architectural decisions from the first sketch.
#Questions Lyon businesses ask us
Can you migrate our existing site? Yes. We handle migrations from any CMS to WordPress, from WordPress to headless architecture (Astro/Next.js) and between hosting providers. Every migration includes URL mapping, 301 redirect implementation and SEO monitoring for 90 days after migration, with congress or seasonal campaign calendars considered so migration does not land in a critical window.
Do you work with firms outside Lyon? Yes. We know the local context (Part-Dieu, Confluence, Gerland, Lyon Digital Hub), but we work with clients across France and abroad. Many firms in Lyon serve clients in Paris, Alsace and across the European Union without a separate page for each city.
How do you handle multilingual sites? We implement multilingual setups through WPML for traditional WordPress or native i18n routing for headless builds with Astro or Next.js. Each language version gets correct hreflang tags, localised URL slugs and independent SEO meta data. For firms serving the French and German markets, FR/EN/DE locale configuration requires a separate architectural decision.
What does ongoing support include? After build completion the project can move to dedicated WordPress maintenance in Lyon: tested updates, backups, security and performance monitoring, and priority support with a documented runbook. Details are on the maintenance page, not in this development brief.
How does working with WPPoland differ from a local agency in Lyon? Primarily WordPress experience since 2007, our own technical stack on Astro and headless WordPress, and work on clear assumptions: scope, stages and responsibility are described before deployment. Pricing is individual and depends on scope, not a fixed price list.
If your firm already runs an online store or plans to build one, we have a dedicated page on WooCommerce developer in Lyon with French checkout, Payplug integration and GDPR with CNIL preparation. If the current site works and needs only ongoing care, tested updates and monitoring, see WordPress maintenance in Lyon. Both describe the same technical stack from an operational perspective, not a development one.
The full scope of WordPress development work (themes, plugins, Gutenberg, refactors) is described on the WordPress developer pillar. To discuss a brief, send a short description of your current situation through the contact form.
#Start your project in Lyon
If you want to discuss WordPress development, send a short description of your current situation, business goal and technical constraints. From that we review the configuration, identify risks and propose a practical action plan.
If you are planning a new build, Gutenberg migration or refactor of an inherited theme before a Part-Dieu congress or Confluence campaign, start by writing down goals, constraints and current project state. Pricing is individual and depends on the scope of work.