- [Case Studies](/kategorie/case-studies)
- [E‑commerce tipy](/kategorie/e-commerce-tipy)
- [E‑shopové riešenia a platformy](/kategorie/e-shopove-riesenia-platformy)
- [Mergado Pack](/kategorie/mergado-pack)
- [Mergado tipy](/kategorie/mergado-tipy)
- [Novinky v Mergade](/kategorie/novinky-v-mergade)
- [Novinky z porovnávačov cien](/kategorie/novinky-z-porovnavacov-cien)
- [Pracujeme s Mergadom](/kategorie/pracujeme-s-mergadom)
- [Rozhovory](/kategorie/rozhovory)
- [Rozšírenia](/kategorie/aplikacie)
- [S Mergadom do zahraničia](/kategorie/s-mergadom-do-zahranicia)
- [Zo života Mergada](/kategorie/zo-zivota-mergada)
 



 

 1. [  Domov  ](/)
2. [     Blog  ](/blog)
3. [     Pracujeme s Mergadom  ](/kategorie/pracujeme-s-mergadom)
4. <a class="flex items-center gap-2 hover:underline" href="" itemid="" itemprop="item" itemscope="" itemtype="https://schema.org/Thing">    **Ako opraviť časté chyby v XML feede? II. diel** </a>
 
  

 

#  **Ako opraviť časté chyby v XML feede? II. diel** 

 

 

 [    ![](https://www.mergado.sk/sites/default/files/perm/user-avatar/dan-mergado.jpg)   Daniel Czetner  ](/blog/daniel-czetner) [Pracujeme s Mergadom](/kategorie/pracujeme-s-mergadom) 

25. 11. 2016

4 minúty čítania

 

 

 

 

 

  ![](https://www.mergado.sk/sites/default/files/field/image/pana-mergada-anotacny-sk4.png)  

Chybám v XML feede sme sa začali venovať už v prvom dieli seriálu pred pár týždňami. Teraz na neho nadviažeme a ukážeme si ďalšie riešenia častých chýb, ktoré z auditu XML vyplynú.



 

 

 
                function tableOfContents() {
                  return {
                    headings_menu: [],
                    heading_active: '', // Added to track the active section
                    shouldBeSticky: false,

                    generateToC() {
                      const headings = document.querySelectorAll('.js-article-full-headings h2, .js-article-full-headings h3');
                      let headingMap = {};

                      headings.forEach((heading) => { // Use an arrow function to maintain `this` context
                        // Normalize heading text to remove diacritics, then replace non-alphanumeric characters with dashes
                        var normalizedText = heading.textContent.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); // Remove diacritics
                        var id = heading.id ? heading.id : normalizedText.trim().toLowerCase()
                          .split(' ').join('-').replace(/[^a-z0-9\-]/ig, ''); // Updated regex to replace non-alphanumeric characters
                        headingMap[id] = headingMap[id] !== undefined ? ++headingMap[id] : 0;

                        // Use the updated `id` with diacritics removed for the heading id and the TOC
                        const finalId = headingMap[id] ? `${id}-${headingMap[id]}` : id;
                        this.headings_menu.push({
                          id: finalId,
                          title: heading.textContent,
                          level: heading.tagName.toLowerCase(), // Track heading level
                          active: false, // Initially set active to false
                        });
                        heading.id = finalId;
                      });
                    },

                    checkStickyNeeded() {
                      const ul = this.$el.querySelector('ul');
                      if (ul) {
                        this.shouldBeSticky = ul.scrollHeight < window.innerHeight;
                      }
                    },

                    setActiveHeading() {
                      // disabled not working with active state on click
                      // add @scroll.window="setActiveHeading()" to the parent div

                      // const headings = document.querySelectorAll('.js-article-full-headings h2');
                      // let activeHeading = '';
                      // let closestHeadingDistance = Infinity;

                      // headings.forEach((heading) => {
                      //   const rect = heading.getBoundingClientRect();
                      //   const offset = rect.top - window.innerHeight / 2; // Consider heading in the middle of the screen as active

                      //   if (offset < 0 && Math.abs(offset) < closestHeadingDistance) {
                      //     activeHeading = heading.id;
                      //     closestHeadingDistance = Math.abs(offset);
                      //   }
                      // });

                      // // Update the active state in headings_menu
                      // if (activeHeading !== this.heading_active) {
                      //   this.headings_menu = this.headings_menu.map(item => ({
                      //     ...item,
                      //     active: item.id === activeHeading,
                      //   }));
                      //   this.heading_active = activeHeading;

                      // }
                    },

                    setActiveItem(clickedId) {
                      this.headings_menu.forEach(item => {
                        item.active = (item.id === clickedId);
                      });
                      this.heading_active = clickedId; // Optionally update the heading_active property if used
                    },
                  };
                }
               1. <a :class="{ 'border-r-[3px] border-secondary': item.active, 'text-sm': item.level === 'h3' }" :href="'#' + item.id" class="inline-block text-balance hover:underline p-0.5 pr-3">  — </a>
  



 

V minulom dieli sme písali o tom, ako sa vysporiadať **s chýbajúcimi elementy MANUFACTURER a DELIVERY DATE** alebo neplatnými hodnotami v elementoch **CATEGORYTEXT alebo EAN.** Dnes sa pozrieme na ďalšie elementy a ich úpravy.

## Element PRODUCT obsahuje nepovolenú hodnotu

Na Heureke **sa element PRODUCT zobrazuje v porovnaní cien**. Podľa špecifikácie tam patria medzi nepovolené rozširovania napríklad: Doprava zdarma, Distribúcia, Splátkový predaj alebo Zľava na ďalší nákup. Zboží.cz využíva tento element **pri zobrazovaní výsledkov vyhľadávania.** Oproti Heureke má miernejšie požiadavky na povolené a zakázané slová, ani tu sa ale nesmú vyskytovať reklamné slogany, nadmerná interpunkcia alebo emotikony. Naopak **informácie o darčeku alebo zľave** sem umiestniť môžete. Ak teda viete o tom, že sa vo vašom elementu PRODUCT niečo podobné vyskytuje, potom môžete jednoducho využiť pravidlo *Nájsť a nahradiť*, kedy v tomto elemente **vyhľadáte požadovaný výraz a nahradíte ho prázdnym výrazom** (do kolónky *Nahradiť*) teda nenapíšete nič.![PRODUCT obsahuje nepovolenú hodnotu](/sites/default/files/users/product_odstraneni.png)+

## Element PRODUCT neobsahuje hodnotu elementu PRODUCTNAME

Tu ide o trochu opačný problém ako v predchádzajúcom príklade. Tentoraz **v elemente PRODUCT informácie chýbajú** a je nutné ich tam doplniť (zo špecifikácie Heureky vyplýva, že tento element obsahuje PRODUCTNAME + informáciu naviac). Výber týchto produktov vykonáme v rozšírenom nastavení a následne ich môžeme upraviť.![PRODUCT neobsahuje hodnotu elementu PRODUCTNAME](/sites/default/files/users/vyber.png) Ako na to? Najprv je nutné **manuálne skontrolovať pár produktov**, ktorých sa táto chyba týka a podľa toho zvoliť jej nápravu. Pokúsime sa tu ukázať niektoré najčastejšie možnosti.

- Táto informácia **v elemente úplne chýba** (najjednoduchšia varianta) a doplníme ju tam pomocou pravidla *Prepísať*, kedy budeme prepisovať pomocou **premenných PRODUCTNAME A PRODUCT**, aby sme zachovali aj existujúce informácie.

![Doplnenie](/sites/default/files/users/doplneni.png)

- Informácia **v elemente je, ale je zlá, resp. sa od seba text v PRODUCTNAME a PRODUCT líšia** napríklad len farbou (*PRODUCT Tričko Superman modré, PRODUCTNAME Tričko Superman červené*). V takom prípade je nutné skontrolovať na niekoľkých produktoch, **ktorá informácia je zlá** a tú prepísať (buď prepisujeme element *PRODUCT elementom PRODUCTNAME alebo naopak*).
- Ďalšou chybou môže byť **prehodené poradie slov** (*Superman tričko modré vs. Tričko Superman modré*). Najjednoduchšou úpravou je potom rovnako ako v predchádzajúcom prípade prepísanie elementu.
- Element **PRODUCT sa od PRODUCTNAME líši len jednou medzerou navyše.** V takom prípade sa oplatí skôr **zmazať tieto dve medzery** v elemente a to skrz pravidlo *Nájsť a nahradiť*, kedy budeme pomocou regulárneho výrazu hľadať dve medzery v elemente PRODUCTNAME a nahradíme ich jednou medzerou.

![Úprava PRODUCTNAME](/sites/default/files/users/uprava_productname.png)

## Hodnota elementu PRODUCT nie je unikátna

Duplicity v tomto elemente môžu **zhoršiť alebo úplne znemožniť zobrazenie produktov vo vyhľadávaní**, oplatí sa ich preto odstrániť. Aj tu je viac možností riešenia. V prvom rade skontrolujte, či sa **skutočne nejde o duplicitné produkty**, kedy je jeden z nich možné skryť. Touto kontrolou tiež zistíme, aká je **príčina duplicity.** Často sa jedná o rôzne varianty jedného produktu, ktoré musíme **odlíšiť pridaním informácie o danom parametre** (veľkosť alebo farba). Ak ich váš feed neobsahuje, ale v e‑shope máte varianty rozlíšené, kontaktujte správcu či vývojárov svojho e‑shopu, ktorí vám s generovaním parametra pomôžu. Potom už stačí hodnotu elementu PARAM **pridať do elementu PRODUCT.**

## Element DESCRIPTION obsahuje HTML značky

S týmto si Mergado jednoducho poradí pomocou pravidla odstrániť HTML značky z popisu.![Pravidlo odstrániť HTML značky](/sites/default/files/users/html.png)

## Element DESCRIPTION má zlý formát

Túto chybu MERGADO nahlási v prípade, že má váš **popis produktu menej ako 5 slov.** Na vás je teda zhodnotiť, či sú v popise všetky potrebné informácie, a ak nie, je vhodné popisky manuálne doplniť. Časová investícia do tejto úpravy sa vám iste oplatí.

## Hodnota elementu DESCRIPTION nie je unikátna

Aj tu odporúčame **manuálnu úpravu popiskov** tak, aby zodpovedali jednotlivým produktom a odlišovali ich od seba navzájom a zároveň aj od konkurenčných ponúk.

## Element DELIVERY\_ID obsahuje nepovolenú hodnotu

Táto chyba vo feede pre Heureku naznačuje, že máte u svojich produktov nastavenú inú dopravu ako je v špecifikácii Heureky (teda: *SLOVENSKA\_POSTA, SLOVENSKA\_POSTA\_BALIK\_NA\_POSTU, DHL, DPD, GEBRUDER\_WEISS, GEIS, GLS, HDS, INTIME, PPL,* ReMax Courier Service*, FeDex, Expres Kuriér*, *TNT, TOPTRANS, UPS, VLASTNA\_PREPRAVA*). S nastavením dopravy môžete ľahko pracovať pomocou pravidla Nastavenie ceny dopravy, kde jednotlivých dopravcov (ktorých názov predstavuje ono ID v pomenovaní elementu) pridáte a rovno k nim doplníte i cenu za typ služby.![Nastavenie dopravy](/sites/default/files/users/nastaveni_doprava.png) Ak máte tipy na ďalšie časté chyby v XML feede, dajte nám o nich vedieť do komentárov alebo na [fórum](http://forum.mergado.cz), nabudúce sa môžeme venovať napríklad práve im. Prípadne sa nám rovno ozvite na [technickú podporu](mailto:mergado@mergado.sk).



 

- [  PRODUCT ](/tema/product)
 
 [    ![](https://www.mergado.sk/sites/default/files/perm/user-avatar/dan-mergado.jpg)  ](/blog/daniel-czetner)###  [ Daniel Czetner ](/blog/daniel-czetner) 

Daniela ste poznali zo slovenskej podpory Mergada. Pomáhal riešiť problémy, písal návody v nápovede a testoval nové funkcie v Mergade. Mal jednoznačne najdlhšie dredy v tíme a jeho drsnému humoru sa vyrovnal snáď len jeho spolupracovník Přemek.

 

 

 

 

 

 

 

 

 

## Mohlo by vás *zaujímať*

 

 [    ![](https://www.mergado.sk/sites/default/files/perm/image/shoptet_shopify_sk.jpg)  

### Ako sme s Mergadom previedli e‑shop zo Shoptetu na Shopify: kompletná migrácia bez straty dát

 

 ](/blog/ako-sme-s-mergadom-previedli-e-shop-zo-shoptetu-na-shopify-kompletna-migracia-bez-straty-dat) 

 [    ![nastavenie uživatelských účtov](https://www.mergado.sk/sites/default/files/perm/image/new-nahladovka-na-blog-1200-x-628-px-38.png)  

### Ako nastavovať užívateľské účty agentúrnych pracovníkov v Mergade

 

 ](/blog/opravnenie-uzivatelskych-uctov-pre-agentury) 

 [    ![produktový feed 5 najčastějších cýb](https://www.mergado.sk/sites/default/files/perm/image/new-nahladovka-na-blog-1200-x-628-px-19_0.png)  

### 5 najčastejších chýb v produktovom feede a ako ich upraviť v Mergade

 

 ](/blog/najcastejsie-chyby-v-produktovom-feede) 

 

 

 

## Nenechajte si nič *ujsť*

 Prihláste sa k odberu nášho newslettera 

   

       

   Prihlásením súhlasíte s tým, že vaše údaje budeme spracovávať v súlade s našimi [zásadami ochrany osobných údajov](/vyhlasenie-o-cookies). 

  Ďakujeme, úspešne ste sa pripojili k nášmu zoznamu odberateľov. 

 

 

 
      function ml_webform_success_5807248() {
        var r = ml_jQuery || jQuery
        r('.ml-subscribe-form-5807248 .row-success').show(), r('.ml-subscribe-form-5807248 .row-form').hide()
      }