
Learn how to configure an EU 2026-compliant withdrawal form directly on Shopify using only your Dawn theme's Liquid and HTML code, eliminating third-party app expenses, and improving mobile site speed.
In my daily work as an engineer and consultant for Shopify e-commerce, I constantly address the concerns of merchants who are trying to align with European regulations without destroying their site's speed. There are two valid ways to implement the EU 2026 withdrawal button: installing a dedicated app like IFG Returns & Withdrawals, which is operational in minutes with a dashboard, automatic order matching, and native multi-language support, or building a customized native contact form using Liquid and HTML code, if you prefer total technical control and don't need features like partial approvals or CSV exports. In this guide, I'll show you both, so you can choose based on how much time you want to invest.
If you're not yet familiar with the legal details of the European directive that mandates this functionality from June 19, 2026, I strongly encourage you to first read my strategic analysis on the Shopify EU 2026 withdrawal button. Here, however, we focus on practical implementation.
The quick way: IFG Returns & Withdrawals
If you prefer not to touch the theme code, IFG Returns & Withdrawals installs a native storefront widget (popup or floating button) already compliant with Directive 2011/83/EU and the 2023/2673 update, available in 30 languages with RTL support. Each request automatically matches the Shopify order, ends up in a color-coded dashboard, and you can also manage partial approvals. There's a free plan with a free trial to check if it's right for you before deciding. If you want to understand how it works "under the hood" or prefer to write the code yourself, keep reading.
EU compliance and the technical requirement of the two-step process
The EU directive stipulates that consumers must be able to exercise their right of withdrawal in a clear, explicit, and immediate manner. SMEs often make the mistake of simply adding a line of text in the footer such as "to withdraw, write to us at this email." This practice is no longer considered compliant because it lacks a guided, structured two-step system that assists the user and generates an immediate confirmation of receipt. A dedicated button that opens a specific form guarantees the consumer legal certainty of submission and protects the e-commerce from financial penalties that can reach 4% of annual turnover.
Why the classic email is no longer enough
Traditional email introduces too many variables and friction into the withdrawal process. The customer might forget to include the order number, the list of products they wish to return, or the purchase date, forcing your customer service to an endless exchange of messages to clarify details. A guided two-step system eliminates this operational inefficiency at the root, standardizing input data and reducing the possibility of error from both sides to zero.
The native architecture without installing paid applications
If you choose the code path, the architecture I propose leverages the native functionality of Shopify's contact forms. By modifying the theme files and inserting a custom Liquid module, you can collect all necessary information and route it directly through Shopify's servers without spending a single cent on monthly subscriptions — at the cost, however, of having to manage the dashboard, tracking, and maintenance over time yourself.
Setting up the withdrawal landing page on Shopify
The first operational step involves creating a custom page template within the Shopify theme editor. By accessing the code editing section of your Dawn theme, you can generate a new template file for pages, naming it, for example, page.recesso.json. This template will contain a custom section that will host our Liquid form.
Creating a custom page template
In your Shopify control panel, go to Online Store, select Themes, and click Customize on the active Dawn theme. Click the dropdown menu at the top center, select Pages, and then click "Create template." Assign the name "recesso" and make sure to base it on the default template.
Inserting mandatory input fields
A valid withdrawal form must collect precise data: the buyer's first and last name, the email address associated with the order, the original order number, the date the order was received, and a selection area where the user declares whether they intend to withdraw from the entire order or only from certain products. Configuring these fields as mandatory prevents the submission of incomplete requests.
Liquid and HTML code for the native withdrawal form
To physically implement the form, we use Shopify's native tag {% form 'contact' %}. Here's the clean and secure code structure you can copy and insert into your custom Liquid file:
{% form 'contact', id: 'FormRecesso' %}
{% if form.posted_successfully? %}
<p class="form-success">Your withdrawal request has been successfully submitted. You will receive a confirmation via email.</p>
{% endif %}
{{ form.errors | default_errors }}
<div class="field">
<input type="text" id="RecessoNome" name="contact[Nome_e_Cognome]" required placeholder="Name and Surname">
<label for="RecessoNome">Name and Surname</label>
</div>
<div class="field">
<input type="email" id="RecessoEmail" name="contact[email]" required placeholder="E-mail">
<label for="RecessoEmail">E-mail Address</label>
</div>
<div class="field">
<input type="text" id="RecessoOrdine" name="contact[Numero_Ordine]" required placeholder="Order Number">
<label for="RecessoOrdine">Order Number</label>
</div>
<div class="field">
<textarea id="RecessoMessaggio" name="contact[Dettaglio_Prodotti]" required placeholder="Specify products to return"></textarea>
<label for="RecessoMessaggio">Details on products to return</label>
</div>
<button type="submit" class="button button--primary">Send Withdrawal Request</button>
{% endform %}This code block integrates perfectly with your e-commerce design, ensuring a clean and visually seamless rendering.
Customizing CSS for a mobile-responsive design
E-commerce traffic in Italy is generated by over 80% from mobile devices; consequently, the withdrawal form must be perfect on smartphone screens. We need to set the maximum width of the form to 100% of the available area, insert generous padding to make the fields easily clickable with fingers, and ensure that label tags remain visible during typing.
How to integrate the withdrawal button into the user area and footer
The law requires that the link to access the withdrawal procedure be easily identifiable at all times during navigation. The optimal placement is within the footer menu of the Shopify store, under an explicit item called "Right of Withdrawal." From the Shopify control panel, you simply need to access the Navigation section, select the Footer menu, and add a new menu item that points directly to the previously created page.
Dynamic display in the customer's order history
To offer an impeccable user experience, you can display the withdrawal button directly within the order history page in the customer's reserved area. By modifying the customers/order.liquid theme file, you can insert a logical condition that checks if less than 14 days have passed since the order's purchase date — I'll explain the exact code in the guide dedicated to the withdrawal button in the customer area.
Managing post-submission flows and notifications
Once the customer clicks the submit button, Shopify processes the form and sends an email containing all the entered details. To make this flow more professional, you can configure an automatic reply rule in your email client or use Shopify Flow, available for free on all standard plans, to automatically send a transactional email confirming that the request has been received.
Data recording for inspection controls
In the event of checks by market surveillance authorities, the merchant must be able to demonstrate the exact date on which the consumer exercised their right of withdrawal. With the native Shopify form, the record remains in your inbox; with IFG Returns & Withdrawals, however, each request is automatically tracked in the dashboard, exportable as CSV or PDF in one click — useful precisely in these cases.
The performance and SEO benefits of an architecture without heavy apps
Mobile page loading speed is a critical factor for both conversions and ranking on traditional and AI-driven search engines (GEO). Generic applications installed from the App Store often inject heavy external scripts that block page rendering. Both native Liquid code and a lightweight widget like IFG Returns & Withdrawals avoid this problem, keeping the store fast, responsive, and optimized for mobile devices.
If you want to evaluate whether native code or a managed solution is more suitable for your store, it's the choice we analyze together in my Shopify strategic consulting.

