FeedMender

FeedMender/Wat we controleren

Dekking

Waar een feedbestand op gecontroleerd kan worden

Er zijn 225 afzonderlijke controles. Deze pagina groepeert ze zoals het scanrapport dat doet, en legt de redenering uit achter de controles die er het meest toe doen. Wil je de ruwe lijst, met elke code, het attribuut dat hij leest en de ernst ervan, dan is dat de volledige lijst met controles.

Google publiceert enkele honderden pagina's aan eisen voor productdata. Een bestand kan ze niet allemaal aantonen, en dat pretenderen we ook niet. Wat volgt is het deel dat uit het bestand zelf kan worden vastgesteld, plus de twee gebieden waarvoor één netwerkverzoek nodig is: de afbeeldingen en de robots-regels. Wat een bestand niet kan zeggen, staat bewust op een aparte pagina.

Kunnen we het bestand überhaupt lezen

Dit draait voordat er naar ook maar één waarde wordt gekeken, want een waardecontrole op een slecht geparsed bestand is erger dan geen controle: het is een stellig antwoord over de verkeerde data. Het scheidingsteken wordt gekozen op basis van welk teken een consistent aantal velden oplevert, niet op basis van welk teken het vaakst voorkomt. Andere coderingen dan UTF-8 worden gelezen en omgezet. Een byte order mark wordt verwijderd voordat iets verderop in de keten hem ziet. XML wordt getest op well-formedness, op de Google-namespace en op de aanwezigheid van item-elementen.

Waar een bestand dubbelzinnig is op een manier die data tussen kolommen zou verschuiven, stopt de scan in plaats van te gokken. Met het verkeerde scheidingsteken belanden prijzen in het availability-veld en is elke bevinding daarna fictie. Waar alleen rijen wegvallen, zegt de telling dat in duidelijke cijfers: een rapport over 48 van de 50 producten dat zich als volledig presenteert, is de ene fout die een klant niet kan opmerken, dus het is de ene die we weigeren te produceren.

Prijzen en valuta

Komma's als decimaalteken, een ontbrekende valutacode en door elkaar gebruikte duizendtal- en decimaaltekens worden allemaal gevangen. Het echt dubbelzinnige geval wordt eerlijk benoemd in plaats van gegokt: 1.234 is 1234 in continentale notatie en 1.234 in Engelse notatie, en niets in het bestand bepaalt welke van de twee het is. We weigeren hem liever dan een product met een factor duizend te herprijzen.

Naast het formaat leest de scan de relaties tussen prijsvelden: een sale_price in een andere valuta dan price, een actieperiode zonder actieprijs erin, een leden- of loyaliteitsprijs die in het gewone prijsveld staat, en eenheden voor unit pricing uit een andere familie dan de basiseenheid, kilogrammen tegenover liters. Een prijs van nul wordt alleen gemarkeerd buiten de gevallen waarin Google die daadwerkelijk toestaat, zoals een mobiel toestel dat met een abonnement wordt verkocht. De volledige redenering staat op de pagina over prijs en valuta.

Productidentifiers

Elke GTIN wordt getoetst aan het GS1 mod-10-controlecijfer, en de exemplaren die te herstellen zijn, een ISBN-10 naar ISBN-13, een UPC-E naar UPC-A, worden hersteld. De controles die vrijwel niemand anders doet, zijn die op de beperkte prefixen: een barcode met een correct controlecijfer die Google toch afwijst omdat hij met 2, 02 of 04 begint, of omdat het een couponprefix is, afgelezen van de met nullen aangevulde 13-cijferige vorm. Dat onderscheid doet ertoe: een 12-cijferige UPC-A die met 98 begint, normaliseert naar 098, een volkomen legitieme bedrijfsprefix, dus de ruwe tekenreeks is het verkeerde om te testen.

De wetenschappelijke notatie van Excel (8,71234E+12) wordt gevangen, een ontbrekend merk wordt gescheiden gehouden van een ontbrekende MPN omdat ze aan verschillende regels moeten voldoen, en een identifier_exists: no die een opgegeven GTIN of merk-plus-MPN tegenspreekt, wordt gerapporteerd. De pagina over identifiers loopt door waarom een geldig ogende barcode toch wordt geweigerd.

Titels en beschrijvingen

Promotietekst waarmee een product wordt afgekeurd, gratis verzending, het woord SALE, een percentage, een prijs in de titel, wordt gemarkeerd. Meer dan 150 tekens wordt gerapporteerd als waarschuwing en niet als afkeuring, omdat Google afkapt en het product met een afgekapte titel toont, en dat is een andere, stillere kostenpost. Schreeuwende hoofdletters worden genormaliseerd zonder echte acroniemen als USB, LED of XL plat te slaan. Beschrijvingen worden gecontroleerd op HTML, op de limiet van 5.000 tekens, en op te mager zijn om Google te laten begrijpen wat het product eigenlijk is.

Voorraad, datums en beschikbaarheid

Nederlandse, Franse en Duitse voorraadbewoordingen worden afgebeeld op de vier waarden die Google accepteert, en limited_availability, dat in bestandsfeeds niet meer bestaat, wordt uitgefaseerd. Beschikbaarheid wordt afgeleid uit een kolom met voorraadaantallen wanneer het statusveld leeg is. Elk datumveld wordt gehouden aan ISO 8601, een expiration_date die meer dan 30 dagen vooruit ligt wordt gevangen (de verwarring tussen 30 en 365 dagen), en een sale_price_effective_date die niet uit precies twee datums bestaat, of waarvan het einde vóór het begin valt, wordt gerapporteerd.

Voorraadtegenstrijdigheden, in_stock met een aantal van nul, worden gerapporteerd in plaats van gerepareerd. Welk veld klopt, hangt ervan af of de shop of het magazijn de autoriteit is, en dat kan een bestand niet zeggen. Gokken zou óf voorraad verbergen die de verkoper heeft, óf voorraad adverteren die er niet is.

Varianten en attributen

Hexcodes en getallen in een kleurveld worden gevangen; aan elkaar geplakte kleuren, ZwartWitGrijs, worden gesplitst, maar alleen wanneer elk segment een herkende kleur is, dus MidnightBlue blijft één kleur. Een verpakkingsaantal in het maatveld (6-pack) wordt gemarkeerd, gesloten waardelijsten voor size_system, size_type, gender en age_group worden afgedwongen, en kledingvarianten die alleen op maat of kleur verschillen zonder gedeeld item_group_id worden gerapporteerd, zodat elke maat niet langer concurreert met zijn eigen varianten. Op een claim over de staat van het product wordt alleen gehandeld wanneer de eigen tekst van de verkoper die zonder ontkenning stelt: "geen tweedehands" betekent het tegenovergestelde en telt niet.

Afbeeldingen, video en robots.txt

De hoofdafbeelding van elk product wordt daadwerkelijk opgehaald, zestien tegelijk. Een spreadsheet laat je nooit zien dat 212 van de 3.400 afbeeldingen een 404 teruggeven, en dat is de bevinding waar verkopers op reageren. Elke afbeelding wordt gecontroleerd op haar respons, haar pixelafmetingen tegen zowel het huidige minimum als de 500x500 die op 2027-01-31 verplicht wordt, haar werkelijke formaat tegen de extensie die ze claimt, en op megapixel- en byteplafonds. Videolinks worden gevalideerd op vorm, inclusief de veelgemaakte fout om naar een pagina met een videospeler te verwijzen in plaats van naar het ruwe videobestand.

Daarna wordt robots.txt gelezen, één verzoek per domein, met drie user agents die apart worden gecontroleerd: Googlebot, Googlebot-image en AdsBot-Google. Dit is een steekproef en geen uitputtende dekking: hooguit drie domeinen en vijf landingspagina-paden per domein. De reden dat alle drie apart worden gecontroleerd, is dat AdsBot-Google de wildcard-groep negeert, wat de allerverwarrendste afkeuring die er bestaat oplevert.

Verzending, retouren en EU-naleving

Dit is het deel dat tools die voor de Amerikaanse markt zijn gebouwd, doorgaans weglaten. Verzending en retouren zijn samengestelde attributen waarvan de subattributen in de kolomkop staan en waarvan de waarden positioneel zijn, en beide worden gevalideerd tegen de syntaxis die Google daadwerkelijk documenteert. Eén verzendprijs op productniveau kan de verzendinstellingen van het account voor die locatie uitschakelen, dus de scan plaatst een notitie op bestandsniveau zodra er één opduikt. Retourwaarden zijn in hoofdletters en vormen een gesloten lijst, en een juiste waarde met verkeerd hoofdlettergebruik wordt gerapporteerd met dat hoofdlettergebruik als benoemde oorzaak.

Aan de EU-kant: unit pricing waar de prijsaanduidingsrichtlijn waarschijnlijk van toepassing is, de vorm van EPREL-certificering, en energy_efficiency_class dat sinds april 2025 beperkt is tot CH, NO en GB. In totaal worden 15 samengestelde attributen ondersteund, met inhoudsvalidatie op 11 ervan en 57 harde teken- en waardelimieten die uit de constanten worden gedeclareerd in plaats van met de hand getypt.

Elk van deze controles is een regel in de volledige lijst met controles, en het getal bovenaan die pagina wordt bij het bouwen uit de code gelezen. Om te zien welke ervan je eigen bestand raakt, draai je een scan.