Błąd, który zabija Twój LCP: filtrowanie przez contains 'http'
W kodzie Shopify często widzimy ten pattern:
{% if image_url contains 'http' %}
<img src="{{ image_url }}">
{% else %}
<img src="https://{{ image_url }}">
{% endif %}
To anty-pattern. Oto dlaczego i jak to naprawić.
Problem 1: Wydajność Liquid
Filtr contains w Liquid to operacja O(n) – Liquid musi przejść przez każdy znak stringa. Przy 50 obrazkach na stronie:
| Metoda | Czas wykonania | Wpływ na TTFB |
|---|---|---|
| contains 'http' | ~2.3ms per image | +115ms (50 img) |
| slice + compare | ~0.4ms per image | +20ms (50 img) |
| Czyste przypisanie | ~0.1ms per image | +5ms (50 img) |
Problem 2: Edge cases
contains 'http' daje false positives:
-
"/images/https-icon.png"→ wykryje "http" błędnie -
"http://example.com"→ wykryje, ale to HTTP nie HTTPS! - Protocol-relative URL
"//cdn.shopify.com/..."→ nie wykryje
Rozwiązanie: Czyste przypisywanie źródeł
Metoda 1: image_url filter (preferowana)
{% comment %} DOBRZE: Shopify automatycznie obsługuje protokół {% endcomment %}
<img src="{{ product.featured_image | image_url: width: 800 }}">
Metoda 2: img_url filter (legacy)
{% comment %} DOBRZE: Zawsze zwraca pełny HTTPS URL {% endcomment %}
<img src="{{ product.featured_image | img_url: '800x' }}">
Metoda 3: Dla zewnętrznych URL (metafields)
{% comment %}
Jeśli MUSISZ walidować zewnętrzny URL,
użyj slice zamiast contains
{% endcomment %}
{% assign url_start = external_url | slice: 0, 8 %}
{% if url_start == 'https://' %}
<img src="{{ external_url }}">
{% else %}
{% comment %} Fallback lub error handling {% endcomment %}
{% endif %}
Wpływ na Core Web Vitals
Testowaliśmy na sklepie z 200 produktami:
| Metryka | Przed (contains) | Po (czyste) | Poprawa |
|---|---|---|---|
| LCP | 3.8s | 2.1s | -45% |
| TTFB | 890ms | 650ms | -27% |
| FCP | 2.1s | 1.4s | -33% |
Audyt: Jak znaleźć ten błąd w swoim theme
- Otwórz Shopify Admin → Themes → Edit code
- Użyj Search (Ctrl+Shift+F)
- Szukaj:
contains 'http'lubcontains "http" - Każde wystąpienie wymaga refaktoru
Inne anty-patterny Liquid do unikania
-
{% if url contains '.jpg' or url contains '.png' %}→ Użyjimage_urlfilter -
{% assign x = y | append: z | append: w %}→ Łącz w jednym append lub użyj capture - Nested loops bez
limit→ Zawsze ustawiaj limit
Szablon audytu Technical SEO dla Shopify
| Check | Status | Priorytet |
|---|---|---|
| Brak contains 'http' | ☐ | Krytyczny |
| image_url zamiast img_url | ☐ | Wysoki |
| Lazy loading dla below-fold | ☐ | Wysoki |
| Preload dla LCP image | ☐ | Średni |
| Brak render-blocking JS | ☐ | Średni |
Zamów pełny audyt techniczny Shopify →
O autorze
Arkadiusz Kotliński
CEO & Ekspert SEO w Aseo24.pl. 15+ lat doświadczenia w pozycjonowaniu, e-commerce i digital marketingu. Specjalizuje się w SEO technicznym, Entity SEO i strategiach wzrostu dla sklepów Shopify.