Módulo Magento 2 — SEO Rich Data (JSON-LD)
¿Qué es SEO Rich Data?
El módulo SEO Rich Data para Magento 2 añade a tu tienda datos estructurados completos en formato JSON-LD, compatibles con el estándar schema.org y admitidos por Google. Gracias a ello, tus productos, categorías, pestañas y contenidos pueden mostrarse en el buscador como resultados enriquecidos (rich snippets), lo que influye directamente en la visibilidad, el CTR y el SEO.
Características principales del módulo:
Tipos de datos compatibles:
Product
Descripción detallada del producto: nombre, descripción, precio, moneda, disponibilidad en stock, fabricante, marca, SKU, MPN.
Offer
Información sobre la disponibilidad y las condiciones de la oferta (novedad, disponibilidad, fecha de validez del precio).
Brand / Manufacturer
Marcado automático de la marca y el fabricante a partir de los datos del producto.
Organization
Datos de tu empresa (nombre del vendedor, contacto, sitio web).
BreadcrumbList
Migas de pan de navegación que ayudan a Google a comprender mejor la estructura de la página.
SearchAction (WebSite)
Indicación para Google sobre cómo funciona el buscador interno de la tienda.
ItemList (para páginas de categoría)
Lista de productos de una categoría (nombre, imagen, enlace): acelera la indexación y aporta contexto a Google.
Opiniones (Review + AggregateRating)
Generación automática de datos estructurados a partir de las opiniones de los clientes: valoraciones (rating), número de opiniones, contenido de la reseña y datos del autor. El módulo crea tanto entradas individuales Review como un resumen agregado AggregateRating, lo que permite mostrar estrellas en los resultados de Google (rich snippets) y aumenta significativamente el CTR.
VideoObject (NOVEDAD)
Detecta vídeos en la galería del producto y los añade como datos estructurados (miniatura, enlace, fecha).
FAQPage (VINCULACIÓN CON EL MÓDULO «Pregunta por el producto»)
Si tienes instalado nuestro módulo Pregunta por el producto, todas las preguntas con respuestas de un producto determinado se convierten automáticamente en datos FAQPage. Esto permite a Google mostrar una sección de preguntas y respuestas directamente en los resultados de búsqueda.
Integración con el módulo Pregunta por el producto
Si utilizas nuestro segundo módulo, «Pregunta por el producto», los datos estructurados FAQ se generan dinámicamente a partir de preguntas y respuestas reales proporcionadas por el vendedor. Esto aumenta la autenticidad de los datos y su valor SEO.
Además, las preguntas y respuestas pueden mostrarse como una pestaña en la ficha del producto, con la posibilidad de activarla y asignarle un título desde la configuración.
¿Por qué utilizar Rich Data en Magento?
Mayor visibilidad en los resultados de Google – tus productos aparecerán con precio, disponibilidad, opiniones y otra información.
Mejor CTR – los usuarios hacen clic con más frecuencia en los resultados enriquecidos.
Mayor indexabilidad – Google comprende mejor la estructura del sitio e indexa más rápido las novedades.
Calidad de contenido imbatible – muestras a Google datos que antes estaban ocultos únicamente en el HTML.
Configuración
Posibilidad de activar/desactivar componentes concretos (por ejemplo, FAQ, VideoObject).
Título personalizado para la pestaña de preguntas (para el módulo «Pregunta por el producto»).
Mecanismo de detección y generación automática de datos JSON-LD.
Requisitos
Magento 2.4.x (probado en 2.4.7)
PHP 8.1+
Recomendado: módulo Pregunta por el producto para aprovechar todas las posibilidades (FAQ)
Qué recibes:
Módulo listo para instalar mediante Composer
Documentación completa
Código conforme a las directrices de Magento
Soporte técnico durante la implementación
¿Quieres destacar tu tienda en Google? Este módulo es tu SEO en versión PRO. Haz tu pedido ahora y aumenta tu visibilidad.
SEO Rich Data - instalacja i konfiguracja
Cel modułu
Moduł Kowal_SeoRichData dodaje do Magento 2 dane strukturalne schema.org w formacie JSON-LD. Generowane dane mogą obejmować produkty, oferty, ceny, dostępność, oceny, recenzje, breadcrumbs, dane organizacji, nazwę strony, search box, profile społecznościowe, FAQ oraz wideo.
Konfiguracja modułu znajduje się w panelu administracyjnym Magento:
Stores > Configuration > Kowal > SEO Rich Data
Wymagania
- Magento 2.
- Dostęp do CLI Magento.
- Dostęp do Composer repository z pakietem
kowal/module-seo-rich-data. - Wymagany pakiet bazowy:
kowal/base. - Uprawnienia do uruchamiania komend
bin/magento.
Instalacja przez Composer
- Dodaj repozytorium pakietu:
composer config repositories.kowal composer https://repo.kowal.store
- Jeśli repozytorium jest prywatne, dodaj token dostępu GitHub:
composer config http-basic.repo.kowal.store <YOUR E-MAIL> <YOUR-TOKEN>
- Zainstaluj moduł:
composer require kowal/module-seo-rich-data
- Włącz moduł:
php bin/magento module:enable Kowal_SeoRichData
- Uruchom aktualizację Magento:
php bin/magento setup:upgrade
- W środowisku produkcyjnym wykonaj kompilację DI:
php bin/magento setup:di:compile
- W środowisku produkcyjnym, jeśli projekt tego wymaga, wygeneruj statyczne pliki:
php bin/magento setup:static-content:deploy
- Wyczyść cache:
php bin/magento cache:flush
Instalacja ręczna
- Skopiuj moduł do katalogu:
app/code/Kowal/SeoRichData
- Włącz moduł:
php bin/magento module:enable Kowal_SeoRichData
- Uruchom aktualizację Magento:
php bin/magento setup:upgrade
- Wyczyść cache:
php bin/magento cache:flush
Czynności po instalacji
Po instalacji moduł dodaje atrybut produktu:
| Atrybut | Znaczenie |
|---|---|
offer_item_condition |
Stan produktu używany do wygenerowania itemCondition w offers. |
Atrybut obsługuje wartości:
| Wartość w Magento | Wartość JSON-LD |
|---|---|
DamagedCondition |
https://schema.org/DamagedCondition |
NewCondition |
https://schema.org/NewCondition |
RefurbishedCondition |
https://schema.org/RefurbishedCondition |
UsedCondition |
https://schema.org/UsedCondition |
Jeśli produkt nie ma ustawionej wartości atrybutu, moduł traktuje go jako NewCondition.
Zakres konfiguracji
Wszystkie pola konfiguracyjne są dostępne dla zakresów Default, Website i Store View, zgodnie z ustawieniami Magento.
Pola typu Enabled, Show ... i podobne używają standardowych wartości Magento:
| Wartość | Znaczenie |
|---|---|
Yes |
Funkcja jest włączona i może generować dane JSON-LD. |
No |
Funkcja jest wyłączona. |
Breadcrumbs
Sekcja odpowiada za dane strukturalne ścieżki nawigacji.
| Pole | Znaczenie | Wartości |
|---|---|---|
Enabled |
Włącza generowanie danych BreadcrumbList. |
Yes, No |
Fixed Category Path |
Na stronie produktu używa najbardziej szczegółowej ścieżki kategorii, gdy Magento nie dostarcza pełnego kontekstu kategorii. | Yes, No |
Type |
Określa długość ścieżki breadcrumbs generowanej dla wyszukiwarki. | Default (Long), Short |
Wartości pola Type:
| Wartość | Znaczenie |
|---|---|
Default (Long) |
Pełna ścieżka, np. Store > Category > Subcategory > Product. |
Short |
Skrócona ścieżka, np. Store > Subcategory > Product. |
Include Your Site Name in Search Results
Sekcja odpowiada za dane typu WebSite, które mogą pomóc Google rozpoznać nazwę witryny.
| Pole | Znaczenie | Wartości |
|---|---|---|
Enabled |
Włącza generowanie danych WebSite. |
Yes, No |
Website Name |
Nazwa strony/sklepu przekazywana w danych strukturalnych. | Tekst, np. nazwa sklepu. |
Organization
Sekcja odpowiada za dane typu Organization.
| Pole | Znaczenie | Wartości |
|---|---|---|
Enabled |
Włącza generowanie danych organizacji. | Yes, No |
Organization Name |
Nazwa firmy lub sklepu. | Tekst; pole wymagane po włączeniu sekcji. |
Logo Url |
Pełny URL logo organizacji. | URL do pliku graficznego. |
Description |
Opis organizacji. | Tekst. |
Description Length |
Maksymalna liczba znaków opisu. | Liczba; puste oznacza brak skracania. |
Country |
Kraj organizacji. | Kod kraju z listy Magento. |
Region/State |
Region lub województwo. | Tekst. |
ZIP/Postal Code |
Kod pocztowy. | Tekst. |
City |
Miasto. | Tekst. |
Street Address |
Ulica i numer. | Tekst. |
Sales |
Telefon działu sprzedaży. | Numer w formacie międzynarodowym, np. +48.... |
Technical Support |
Telefon wsparcia technicznego. | Numer w formacie międzynarodowym. |
Customer Service |
Telefon obsługi klienta. | Numer w formacie międzynarodowym. |
Kraj z tej sekcji może być użyty jako fallback dla kraju wysyłki i kraju polityki zwrotów, jeśli odpowiednie pola w sekcji produktu pozostają puste.
Social Profiles
Sekcja dodaje profile społecznościowe organizacji. Aby dane miały sens, sekcja Organization powinna być włączona.
| Pole | Znaczenie | Wartości |
|---|---|---|
Enabled |
Włącza generowanie linków profili społecznościowych. | Yes, No |
Facebook |
URL profilu Facebook. | Pełny URL. |
Twitter |
URL profilu Twitter / X. | Pełny URL. |
Google+ |
URL profilu Google+. | Pełny URL; historyczne pole konfiguracji. |
Instagram |
URL profilu Instagram. | Pełny URL. |
YouTube |
URL kanału YouTube. | Pełny URL. |
LinkedIn |
URL profilu LinkedIn. | Pełny URL. |
Myspace |
URL profilu Myspace. | Pełny URL; historyczne pole konfiguracji. |
Pinterest |
URL profilu Pinterest. | Pełny URL. |
SoundCloud |
URL profilu SoundCloud. | Pełny URL. |
Tumblr |
URL profilu Tumblr. | Pełny URL. |
Puste pola są pomijane.
Search Box
Sekcja odpowiada za dane SearchAction, które mogą umożliwić wyświetlanie pola wyszukiwania sklepu w wynikach Google.
| Pole | Znaczenie | Wartości |
|---|---|---|
Enabled |
Włącza generowanie danych wyszukiwarki witryny. | Yes, No |
Category Rich Data
Sekcja odpowiada za generowanie danych produktów na stronach kategorii.
| Pole | Znaczenie | Wartości |
|---|---|---|
Show Products Data |
Dodaje dane strukturalne dla produktów widocznych na stronie kategorii. | Yes, No |
Włączenie tej opcji może pogorszyć wydajność stron kategorii, ponieważ moduł musi zebrać dane dla wielu produktów.
Product Rich Data
Sekcja odpowiada za główne dane produktu typu Product oraz za dane offers.
Podstawowe pola produktu
| Pole | Znaczenie | Wartości |
|---|---|---|
Enabled |
Włącza generowanie JSON-LD produktu na stronie produktu. | Yes, No |
Show Availability |
Dodaje availability w offers. |
Yes, No |
priceValidUntil Default Value |
Domyślna data ważności ceny. | Data. |
Use “Special Price To” Value for priceValidUntil Snippet |
Jeśli produkt ma aktywną cenę specjalną i datę Special Price To, ta data zastępuje wartość domyślną. |
Yes, No |
Show Condition |
Dodaje itemCondition w offers. |
Yes, No |
Description |
Określa źródło opisu produktu w JSON-LD. | None, Product Short Description, Product Full Description, Page Meta Description |
Wartości pola Description:
| Wartość | Znaczenie |
|---|---|
None |
Nie pobiera opisu z konfiguracji; kod może użyć nazwy produktu jako fallback, jeśli opis jest pusty. |
Product Short Description |
Używa krótkiego opisu produktu. |
Product Full Description |
Używa pełnego opisu produktu. |
Page Meta Description |
Używa meta description strony. |
Produkty konfigurowalne i grupowane
| Pole | Znaczenie | Wartości |
|---|---|---|
Show Configurable Products as |
Określa sposób generowania ofert dla produktów konfigurowalnych. | Main Offer, List of Associated Products Offers, Aggregate Offer |
Show Grouped Products as |
Określa sposób generowania ofert dla produktów grupowanych. | Main Offer, List of Associated Products Offers, Aggregate Offer |
Wartości:
| Wartość | Znaczenie |
|---|---|
Main Offer |
Generuje jedną ofertę dla produktu głównego. |
List of Associated Products Offers |
Generuje osobną ofertę dla każdego produktu prostego lub powiązanego. |
Aggregate Offer |
Generuje AggregateOffer z najniższą ceną, najwyższą ceną i liczbą ofert. |
Oceny i recenzje
| Pole | Znaczenie | Wartości |
|---|---|---|
Show Rating |
Dodaje aggregateRating i review do danych produktu. |
Yes, No |
Use Yotpo Reviews instead of Magento Reviews |
Pobiera recenzje z Yotpo zamiast Magento Reviews. | Yes, No |
Rating Format |
Określa skalę ocen. | Percentage Scale, Numeric Scale |
Number of Reviews |
Limit liczby najnowszych recenzji dodawanych do JSON-LD. | Liczba; puste oznacza wszystkie recenzje. |
Wartości pola Rating Format:
| Wartość | Znaczenie |
|---|---|
Percentage Scale |
Oceny są interpretowane w skali procentowej. |
Numeric Scale |
Oceny są interpretowane w skali liczbowej. |
Integracja z Yotpo wymaga dostępności modułu obsługującego Yotpo. Jeśli moduł nie jest zainstalowany, konfiguracja Yotpo nie powinna być włączana.
Brand, manufacturer i identyfikatory produktu
| Pole | Znaczenie | Wartości |
|---|---|---|
Brand |
Atrybut produktu używany do wygenerowania właściwości brand. |
Dowolny atrybut produktu z listy. |
EAN / GTIN Attribute |
Atrybut produktu używany jako globalny identyfikator produktu. | Dowolny atrybut produktu z listy. |
Manufacturer |
Atrybut produktu używany do wygenerowania właściwości manufacturer. |
Dowolny atrybut produktu z listy. |
Pole EAN / GTIN Attribute generuje właściwość zależnie od liczby cyfr:
| Liczba cyfr | Właściwość JSON-LD |
|---|---|
| 8 | gtin8 |
| 12 | gtin12 |
| 13 | gtin13 |
| 14 | gtin14 |
| Inna dodatnia liczba cyfr | gtin |
Moduł usuwa znaki inne niż cyfry z wartości EAN / GTIN przed wygenerowaniem JSON-LD.
Shipping details
Sekcja wysyłki odpowiada za wygenerowanie shippingDetails w offers. Dane są dodawane tylko wtedy, gdy sekcja jest włączona i ma komplet wymaganych wartości.
| Pole | Znaczenie | Wartości |
|---|---|---|
Show Shipping Details |
Włącza generowanie shippingDetails. |
Yes, No |
Shipping Country |
Kraj dostawy. | Kod kraju z listy Magento; jeśli puste, używany jest kraj z sekcji Organization. |
Shipping Price |
Koszt dostawy. | Liczba równa lub większa od 0; 0 oznacza darmową dostawę. |
Handling Time Min Days |
Minimalny czas obsługi zamówienia. | Liczba całkowita, dni. |
Handling Time Max Days |
Maksymalny czas obsługi zamówienia. | Liczba całkowita, dni. |
Transit Time Min Days |
Minimalny czas transportu. | Liczba całkowita, dni. |
Transit Time Max Days |
Maksymalny czas transportu. | Liczba całkowita, dni. |
Waluta kosztu wysyłki jest pobierana z waluty oferty produktu.
Przykład znaczenia wartości:
| Pole | Przykład | Znaczenie |
|---|---|---|
Shipping Price |
0 |
Darmowa wysyłka. |
Handling Time Min Days |
0 |
Zamówienie może zostać obsłużone tego samego dnia. |
Handling Time Max Days |
1 |
Obsługa zamówienia trwa maksymalnie 1 dzień. |
Transit Time Min Days |
1 |
Dostawa trwa co najmniej 1 dzień. |
Transit Time Max Days |
5 |
Dostawa trwa maksymalnie 5 dni. |
Merchant return policy
Sekcja polityki zwrotów odpowiada za wygenerowanie hasMerchantReturnPolicy w offers. Dane są dodawane tylko wtedy, gdy sekcja jest włączona i ma wymagane wartości.
| Pole | Znaczenie | Wartości |
|---|---|---|
Show Merchant Return Policy |
Włącza generowanie hasMerchantReturnPolicy. |
Yes, No |
Return Policy Country |
Kraj obowiązywania polityki zwrotów. | Kod kraju z listy Magento; jeśli puste, używany jest kraj z sekcji Organization. |
Return Policy Category |
Typ polityki zwrotu. | Finite Return Window, Returns Not Permitted, Unlimited Return Window |
Merchant Return Days |
Liczba dni na zwrot. | Liczba całkowita; wymagana dla Finite Return Window. |
Return Method |
Obsługiwana metoda zwrotu. | -- Empty --, Return By Mail, Return In Store, Return At Kiosk |
Return Fees |
Informacja o opłatach za zwrot. | -- Empty --, Free Return, Customer Responsibility, Return Shipping Fees |
Return Shipping Fee |
Kwota opłaty za przesyłkę zwrotną. | Liczba większa od 0; wymagana tylko dla Return Shipping Fees. |
Wartości pola Return Policy Category:
| Wartość | Wartość JSON-LD | Znaczenie |
|---|---|---|
Finite Return Window |
https://schema.org/MerchantReturnFiniteReturnWindow |
Zwrot możliwy przez określoną liczbę dni. Wymaga Merchant Return Days. |
Returns Not Permitted |
https://schema.org/MerchantReturnNotPermitted |
Zwroty nie są dozwolone. |
Unlimited Return Window |
https://schema.org/MerchantReturnUnlimitedWindow |
Zwrot bez określonego limitu dni. |
Wartości pola Return Method:
| Wartość | Wartość JSON-LD | Znaczenie |
|---|---|---|
-- Empty -- |
brak wartości | Metoda zwrotu nie jest dodawana do JSON-LD. |
Return By Mail |
https://schema.org/ReturnByMail |
Zwrot wysyłkowy. |
Return In Store |
https://schema.org/ReturnInStore |
Zwrot w sklepie stacjonarnym. |
Return At Kiosk |
https://schema.org/ReturnAtKiosk |
Zwrot w punkcie/kiosku. |
Wartości pola Return Fees:
| Wartość | Wartość JSON-LD | Znaczenie |
|---|---|---|
-- Empty -- |
brak wartości | Informacja o opłatach nie jest dodawana do JSON-LD. |
Free Return |
https://schema.org/FreeReturn |
Zwrot jest darmowy. |
Customer Responsibility |
https://schema.org/ReturnFeesCustomerResponsibility |
Koszt zwrotu ponosi klient. |
Return Shipping Fees |
https://schema.org/ReturnShippingFees |
Zwrot ma określoną opłatę za wysyłkę zwrotną. Wymaga Return Shipping Fee. |
Waluta pola Return Shipping Fee jest pobierana z waluty oferty produktu.
Custom Properties
Pole Custom Properties pozwala dodać własne właściwości do JSON-LD produktu.
Format:
wlasciwosc_jsonld,kod_atrybutu
Jeśli podany jest tylko jeden element, moduł traktuje go jednocześnie jako nazwę właściwości JSON-LD i kod atrybutu.
Domyślna wartość:
sku
mpn,sku
Znaczenie domyślnej wartości:
| Linia | Efekt |
|---|---|
sku |
Dodaje sku na podstawie atrybutu sku. |
mpn,sku |
Dodaje mpn na podstawie atrybutu sku. |
Przykład dodania własnego atrybutu:
color,color
material,material
Zalecana konfiguracja minimalna dla produktów
Aby ograniczyć ostrzeżenia Google Search Console dla danych produktowych, skonfiguruj co najmniej:
| Pole | Zalecenie |
|---|---|
Product Rich Data > Enabled |
Yes |
Show Availability |
Yes |
Brand |
Wybierz atrybut z marką produktu. |
EAN / GTIN Attribute |
Wybierz atrybut z EAN / GTIN, jeśli produkty mają globalny identyfikator. |
Show Shipping Details |
Yes, jeśli sklep ma jednolitą politykę wysyłki możliwą do opisania w konfiguracji. |
Show Merchant Return Policy |
Yes, jeśli sklep ma jednolitą politykę zwrotów możliwą do opisania w konfiguracji. |
Custom Properties |
Utrzymaj co najmniej sku; opcjonalnie dodaj mpn, jeśli sklep posiada taki identyfikator. |
Czyszczenie cache po zmianach konfiguracji
Po zmianie konfiguracji wykonaj:
php bin/magento cache:flush
Jeśli sklep używa dodatkowego cache HTTP, Varnish lub CDN, wyczyść również te warstwy cache.
Weryfikacja działania
- Otwórz stronę produktu na frontendzie.
- Sprawdź źródło strony i znajdź:
<script type="application/ld+json">
- Zweryfikuj, czy JSON-LD zawiera oczekiwane pola, np.:
{
"@type": "Product",
"brand": {
"@type": "Brand",
"name": "Example Brand"
},
"gtin13": "5901234123457",
"offers": [
{
"@type": "Offer",
"shippingDetails": {},
"hasMerchantReturnPolicy": {}
}
]
}
- Przetestuj adres URL produktu w narzędziu Google Rich Results Test lub w Google Search Console.
Uwagi wdrożeniowe
- Nie włączaj
shippingDetailsanihasMerchantReturnPolicy, jeśli wartości w konfiguracji nie odpowiadają rzeczywistej polityce sklepu. - Jeśli polityki wysyłki lub zwrotów różnią się per produkt, region, metoda dostawy albo koszyk, jedna globalna konfiguracja może nie być wystarczająca.
- Po zmianie atrybutów
Brand,ManufacturerlubEAN / GTIN Attributewarto przeindeksować dane produktu, jeśli sklep używa cache lub indeksów wpływających na odczyt atrybutów. - W sklepach wielojęzycznych i wielowalutowych sprawdź konfigurację osobno dla każdego Store View.
Wersja: 1.0.17
19.05.2026
Added
- Dodano obsługę pola
shippingDetailsw strukturzeoffersdla danych produktu JSON-LD. - Dodano obsługę pola
hasMerchantReturnPolicyw strukturzeoffersdla danych produktu JSON-LD. - Dodano konfigurację danych wysyłki:
- włączanie/wyłączanie generowania
shippingDetails, - kraj wysyłki,
- koszt wysyłki,
- minimalny i maksymalny czas obsługi zamówienia,
- minimalny i maksymalny czas transportu.
- włączanie/wyłączanie generowania
- Dodano konfigurację polityki zwrotów:
- włączanie/wyłączanie generowania
hasMerchantReturnPolicy, - kraj obowiązywania polityki,
- typ polityki zwrotu,
- liczba dni na zwrot,
- metoda zwrotu,
- opłaty za zwrot,
- opcjonalna kwota opłaty za przesyłkę zwrotną.
- włączanie/wyłączanie generowania
- Dodano wybór atrybutu EAN / GTIN w konfiguracji produktu.
- Dodano automatyczne mapowanie wartości EAN / GTIN na właściwości
gtin8,gtin12,gtin13,gtin14albogtin, zależnie od długości numeru. - Dodano source modele dla opcji konfiguracji polityki zwrotów:
ReturnPolicyCategory,ReturnMethod,ReturnFees.
Changed
- Usprawniono pobieranie wartości atrybutów
brandimanufacturerdo JSON-LD. - Dodano fallback pobierania wartości atrybutów z raw EAV value, gdy
getAttributeText()albogetData()nie zwraca wartości. - Dla produktów konfigurowalnych i grupowanych dodano fallback pobierania wartości brand / GTIN z produktów prostych.
- Przepięto przestarzałą metodę
Block\Product::getResultArray()na wspólną logikęModel\JsonLd\ProductInfo, żeby generowanie danych produktu było spójne na stronie produktu i w listach kategorii. - Rozszerzono klucz cache ofert o konfigurację wysyłki i polityki zwrotów, aby zmiany konfiguracji wpływały na wygenerowany JSON-LD.
Fixed
- Naprawiono przypadek, w którym skonfigurowany atrybut
Brandnie pojawiał się w JSON-LD produktu. - Uzupełniono brakujące dane wymagane przez Google Search Console dla merchant listing:
shippingDetails,hasMerchantReturnPolicy,- globalny identyfikator produktu przez EAN / GTIN.
Preguntas y respuestas
-
Plantilla Magento 2 optimizada para SEOFrom 153,75 € 125,00 €
To 615,00 € 500,00 €


























