=== Webstudio SEO Pro ===
Contributors: webstudio
Tags: seo, meta tags, open graph, twitter cards, sitemap, robots.txt
Requires at least: 5.8
Tested up to: 6.8
Requires PHP: 7.4
Stable tag: 3.9.21
License: Proprietary

Profesionálny SEO plugin s automatickými meta tagmi, Open Graph, Twitter Cards, robots.txt, sitemap.xml a llms.txt.

== Description ==

Webstudio SEO Pro je kompletný SEO plugin pre WordPress s moderným rozhraním inšpirovaným najlepšími SEO pluginmi.

**Hlavné funkcie:**

* ✅ Automatické Meta Title a Description
* ✅ Open Graph tagy pre Facebook, LinkedIn
* ✅ Twitter Cards
* ✅ Automatický robots.txt
* ✅ XML Sitemap generátor
* ✅ llms.txt pre AI boty (ChatGPT, Claude...)
* ✅ Podpora pre Gutenberg, Elementor, Themify Builder
* ✅ WooCommerce integrácia
* ✅ Noindex/Nofollow nastavenia
* ✅ Canonical URL
* ✅ Tabové rozhranie v editore

== Installation ==

1. Nahrajte plugin do priečinka `/wp-content/plugins/`
2. Aktivujte plugin cez menu 'Pluginy'
3. Prejdite do SEO Pro → Globálne SEO pre nastavenia

== Changelog ==

= 3.9.21 - Júl 2026 =
* 🐛 **Oprava Google Indexing API (Service Account JSON):** pri ukladaní JSON credentials chýbalo `wp_unslash()`, takže WordPress do JSON pridal spätné lomítka (`"` → `\"`, `\n` → `\\n`) a uložil sa poškodený JSON → test pripojenia hlásil „Neplatný formát JSON credentials". Teraz sa JSON ukladá správne (`trim(wp_unslash(...))`). Po aktualizácii treba JSON znova vložiť a uložiť.

= 3.9.20 - Júl 2026 =
* 🤖 **Prepis llms.txt na správny štandard ([llmstxt.org](https://llmstxt.org/)):** generátor `/llms.txt` teraz vytvára **spec-compliant** výstup — `# Názov`, `> zhrnutie`, krátky prozaický popis a sekcie `## Hlavné stránky` / `## Články` / `## Produkty` ako **zoznam odkazov `- [Názov](url): popis`** (predtým `### Nadpis` + `- URL:`, čo nie sú odkazy a striktné AI parsery ich nevytiahli). Sekundárne odkazy (Sitemap/RSS/soc. siete) sú v `## Optional`.
* 🧹 Odstránené neštandardné veci: sekcia „Povinné citovanie", emoji v nadpisoch, key-value „O firme" bordel a meniaci sa timestamp (súbor bol pri každom načítaní iný).
* 🛡️ **Poistka proti server erroru:** `serve_llms_txt()` je obalený v `try/catch` a vždy vráti platný `200` s aspoň `# Názov` — nikdy `500`. (Google Lighthouse „agentic browsing" audit flaguje llms.txt, ktorý vracia server error; čistý 404 alebo 200 je v poriadku.)
* ℹ️ Pozn.: Google **Search / AI Overviews llms.txt nepoužíva** (potvrdené Googlom) — súbor slúži pre AI agentov/nástroje, ktoré ho čítajú, a pre Lighthouse audit. `X-Robots-Tag: noindex` ostáva.
* 🔑 **Licenčný box:** pridaný riadok „Verzia pluginu" (pod Status) — vidno, ktorá verzia beží.

= 3.9.19 - Júl 2026 =
* 🧩 **Revízia štruktúrovaných dát pre Služby / Profesionálne služby / Lokálne podniky** (audit voči Google a schema.org):
* 🐛 **Type-safe kontakt a adresa:** telefón, e-mail a adresa (`PostalAddress`) sa už pridávajú **len na typy, ktoré ich naozaj podporujú** (Organization/Lokálny podnik a podtypy). Predtým sa lepili na akýkoľvek typ (Service, Článok, Podujatie, Stránka…), kde sú neplatné.
* 🐛 **Cena „0" už nevzniká sama:** pri **Službe** sa `offers` (ponuka) pridá **iba keď zadáš reálnu cenu** — koniec zavádzajúceho signálu „zadarmo" s cenou 0 €, keď cena nebola vyplnená.
* 🐛 **`priceValidUntil` len pri platenej cene:** pri Službe, Software aj Kurze sa dátum platnosti ceny už nenastavuje na bezplatné (0 €) ponuky (nezmysel „táto zadarmo služba o rok zdražie"). Bezplatné aplikácie/kurzy naďalej korektne majú `price: "0"` (Google to tak vyžaduje pre rich results).
* 🔗 **Prepojenie entít (@id):** `provider`/`seller` pri Službe a Software teraz odkazujú na hlavnú firemnú entitu (`#organization`) namiesto vytvárania duplicitnej, neprepojenej firmy v grafe. Page-schéma dostala vlastné `@id`.
* 🌍 **Presnejšie `areaServed`:** odstránené chybné pravidlo „čokoľvek do 3 znakov = krajina" (mestá ako „Spa"/„Pau" sa už neoznačia ako štát) a „eu" sa už neberie ako krajina.
* 📐 **`serviceType` vždy text** (schema.org `Text`) — už nie raz text, raz pole.
* 🛡️ **Zabránené dvojité vypálenie:** ak má stránka zvolený firemný typ schémy, nevytvorí sa navyše samostatná Service entita (dve konkurenčné firmy na jednej URL).
* ℹ️ **ProfessionalService** navádza zvoliť konkrétny podtyp (Advokát/Notár/Účtovník…) tam, kde sedí. Poznámka v kóde: `aggregateRating` na `Service` je platné, ale Google preň nezobrazuje hviezdičky (na recenzie slúži Lokálny podnik).

= 3.9.18 - Júl 2026 =
* 🥖 **Veľká revízia breadcrumbs (omrvinky) — opravy + nové funkcie na úrovni Yoast/RankMath/SEOPress:**
* 🐛 **Oprava dátumových archívov:** breadcrumb na archívoch podľa dátumu bral zlý/prázdny dátum (z aktuálneho príspevku v slučke) → rozbité názvy a neplatné `@id` URL typu `/blog//#breadcrumb`. Teraz sa berie z dopytu (rok/mesiac/deň) správne.
* 🐛 **Oprava neplatných odkazov v Schema:** ak `get_term_link()` zlyhal (zmazaný/chybný termín), mohol sa do JSON-LD dostať chybný objekt. Pridaná poistka, ktorá každú neplatnú položku vyhodí — do Google ide vždy čistý `BreadcrumbList`.
* ♿ **Prístupnosť (a11y):** aktuálna položka má vždy `aria-current="page"` (aj pri tučnom zvýraznení) a dekoratívny oddeľovač `›` je skrytý pred čítačkami (`aria-hidden`) — už ho nečíta ako „greater-than".
* 🧩 **Nový Gutenberg blok „Breadcrumbs (Webstudio SEO)"** — vloženie breadcrumbu priamo v editore, s náhľadom a nastavením oddeľovača/textu domov/ikony.
* 👨‍💻 **Template funkcia pre témy:** `wseo_the_breadcrumbs()` / `wseo_get_breadcrumbs()` — breadcrumb sa dá vypísať priamo v šablóne bez shortcode.
* ⚙️ **Nové nastavenia breadcrumbs:** vypínač JSON-LD schémy (proti duplicite s témou/iným pluginom), voľba oddeľovača (aj HTML entity), predpona (prefix), a možnosť schovať/zobraziť breadcrumb na domovskej stránke. Predvolene sa jednopoložkový breadcrumb na úvodnej stránke potláča (ako to robia Yoast/RankMath/SEOPress).
* 🌐 **RTL podpora** vizuálneho breadcrumbu (smer + logické okraje).
* 🧱 **Vlastné typy obsahu (CPT):** breadcrumb teraz dopĺňa aj rodičovské stránky (hierarchické CPT) a hlavnú kategóriu z vlastnej taxonómie (nehierarchické CPT) — nielen archív a aktuálnu položku.

= 3.9.17 - Júl 2026 =
* 📖 **Zjednotená čitateľnosť medzi Live SEO panelom a záložkou „Čitateľnosť":** obe teraz ukazujú **to isté číslo** (kompozitné skóre 0–100), počítané jednou kanonickou funkciou v engine (`WSEO_Live_Analysis::readability_from()`) podľa rovnakých váh (Flesch + dĺžka viet + dlhé vety + prechodové slová + trpný rod − opakovania + variabilita začiatkov). Predtým Live panel ukazoval čistý Flesch a záložka kompozit → mätúce rozdielne čísla na tom istom článku.
  * Záložka sa navyše **synchronizuje so živým editorom** (slová/vety/čas čítania/skóre v hlavičke sa aktualizujú počas písania), takže obe strany čítajú ten istý obsah. Čas čítania zjednotený na celé minúty.
  * Iba čítanie, žiadny vplyv na SERP.

= 3.9.16 - Júl 2026 =
* 🏷️ **Service Schema „Typ služby" podľa Google:** voľné textové pole nahradené **vyhľadávacím výberom z ~4000 oficiálnych kategórií Google Business Profile** — vyberieš jednu alebo viac presne podľa Google (žiadne vymyslené kategórie). Výstup do JSON-LD ako pole (viac) alebo text (jedna).
* 💅 Schema záložka: nadpisy sekcií FAQ a Recept/Podujatie zjednotené do rovnakého štýlu ako Service/Software (predtým ľahko prehliadnuteľné).

= 3.9.15 - Júl 2026 =
* 🧹 **llms.txt bez emoji:** generovaný `/llms.txt` už neobsahuje emoji v nadpisoch sekcií ani prenesené z titulkov/popisov (čistý strojovo-čitateľný výstup pre AI boty). Šípky (→) ostávajú zachované.
* 🗂️ **Konsolidácia Schema záložky:** samostatný meta-box „Recept & Podujatie" a samostatná záložka „FAQ" presunuté **priamo do záložky „Schema"** — všetko štruktúrované dáta na jednom mieste.
* 💅 Oprava „dvojitej čiary" pod nadpismi sekcií v editore.

= 3.9.14 - Júl 2026 =
* 🐛 Oprava zobrazenia na stránke Globálne SEO — chýbajúci `<script>` spôsoboval, že sa časť JavaScriptu vypisovala ako text.

= 3.9.13 - Júl 2026 =
* 🎯 **Zjednotenie čísel medzi „Live SEO skóre" a záložkami dole:** hustota kľúčového slova, počet slov/viet, Flesch a čas čítania sa teraz počítajú **jedným enginom** (`WSEO_Live_Analysis`) — koniec rozdielov medzi horným panelom a záložkami. Opravené slovenské skloňovanie v hustote (predtým `str_word_count`/`stripos` rátali diakritiku zle).

= 3.9.12 - Júl 2026 =
* ✂️ Odstránený text „Dáta z GSC meškajú ~2–3 dni." z GSC widgetu (na želanie).

= 3.9.11 - Júl 2026 =
* 🔤 Premenované „Živé SEO skóre" → „SEO skóre" v editore.

= 3.9.10 - Júl 2026 =
* 🔤 Oprava kódovania v GSC widgete (rozbité pomlčky „–" a „…" v texte obdobia).

= 3.9.9 - Júl 2026 =
* 🔒 **GSC bezpečnosť/súkromie:** plugin teraz **automaticky priradí len property tohto webu** namiesto ponúkania všetkých domén z pripojeného účtu. Predtým mohol klient v svojom WP vidieť všetky domény agentúry (viac klientov v jednom Google účte) — opravené. Property sa neberie z formulára (žiadne podstrčenie cudzej domény), len auto-match podľa domény webu.
* 🩺 GSC: zobrazenie presnej Google chyby pri pripojení + jasnejšia hláška pri access_denied (Testing mód → pridať test usera/publikovať appku).

= 3.9.8 - Júl 2026 =
* 🤖 **Automatický režim render-blocking (ako WP Rocket/Elementor):** async VŠETKY CSS + **automatické generovanie Critical CSS** (above-the-fold) per typ šablóny (homepage/článok/stránka/archív) pri prezeraní webu ako admin → rýchlo bez blikania. Critical CSS sa pri zapnutí auto režimu automaticky aktivuje. Keep-blocking safelist pre výnimky.
  * Generátor beží len pre admina, raz na typ šablóny (časový budget + strop pravidiel proti zamrznutiu). CSS-aware sanitizácia (blokuje @import/expression/javascript:/behavior) proti stored XSS.

= 3.9.7 - Júl 2026 =
* 🚀 **Eliminovať render-blocking (Performance):** nová sekcia v Globálnych nastaveniach — asynchrónne načítanie vybraných CSS (media=print + onload + noscript) a defer vybraných JS, aby neblokovali prvé vykreslenie (rýchlejšie LCP/FCP, bez bieleho flashu). List-based (deferuje sa len to, čo vypíšeš), default VYPNUTÉ, guardy (safe-mode/admin/login/builder), voliteľný defer jQuery. Analytics/tracking sa async/defer automaticky.

= 3.9.6 - Júl 2026 =
* 💅 Live SEO panel: skryté body (+N) pri jednotlivých kontrolách — ostáva len ikona stavu, text a „?“ tooltip. Celkové skóre (X/100) ostáva v hlavičke.

= 3.9.5 - Júl 2026 =
* 💅 Live SEO panel: zoznam kontrol rozdelený do **dvoch stĺpcov** (kompaktnejšie), s responzívnym fallbackom na jeden stĺpec pri úzkom paneli.

= 3.9.4 - Júl 2026 =
* ⚡ **Live SEO nahradilo záložku „Audit":** celý SEO audit (100 bodov / 14 kontrol) je teraz **živý** v paneli navrchu meta-boxu — aktualizuje sa počas písania, s presnými hláškami („Titulok je príliš krátky (7 znakov, odporúčané 30-60)"), **bodmi (+N)** pri každej kontrole a **„?" tooltipmi** s vysvetlením. Skóre sa zobrazuje ako body (X/100).
  * Statická záložka „Audit" bola zrušená (jej info je teraz živé). Záložka „Čitateľnosť" ostáva ako podrobný rozbor.
  * Engine `WSEO_Live_Analysis` prepísaný na verný port audit kontrol (titulok, popis, keyword v titulku/popise, hustota, dĺžka obsahu, nadpisy, obrázky+alt, interné odkazy, náhľadový obrázok, URL slug). Slovenské skloňovaniu-odolné vyhľadávanie keywordu.
  * Iba čítanie, žiadny vplyv na SERP.

= 3.9.3 - Júl 2026 =
* 🔍 **Google Search Console integrácia (OAuth):** pripojenie cez vlastnú Google Cloud OAuth aplikáciu (Client ID/Secret) → reálne **kliky, impresie, priemerná pozícia a CTR** za 28 dní + top dopyty priamo v dashboarde. Nová sekcia „Search Console" v Globálnych nastaveniach (pripojiť/vybrať property/odpojiť) + widget na dashboarde.
  * Izolovaný modul `WSEO_GSC` (core/class-wseo-gsc.php) — OAuth authorization-code + refresh token, `searchAnalytics.query`, cache 3 h.
  * Read-only (scope `webmasters.readonly`), nemení nič na frontende → **žiadny vplyv na SERP**. CSRF ochrana (nonce + OAuth state), admin-only.

= 3.9.2 - Júl 2026 =
* ⚡ **Živé SEO skóre v editore (real-time content analysis):** nový panel navrchu meta-boxu, ktorý sa aktualizuje **počas písania** (Gutenberg aj Classic editor) — celkové SEO skóre + kontroly: kľúčové slovo v titulku/popise/úvode, hustota, dĺžka titulku/popisu, dĺžka obsahu, štruktúra nadpisov, čitateľnosť (Flesch), trpný rod, dlhé vety. Slovenské skloňovaniu-odolné vyhľadávanie kľúčového slova (nájde „realitná kancelária" aj v „realitnú kanceláriu").
  * Nový izolovaný engine `WSEO_Live_Analysis` (core/class-wseo-live-analysis.php) — čisté, testovateľné jadro.
  * Iba čítanie (nič sa neukladá), nemení frontend → **žiadny vplyv na SERP**.
  * Podrobný statický rozbor v záložkách Audit/Čitateľnosť ostáva nezmenený (po uložení).

= 3.9.1 - Júl 2026 =
* 🧹 **Údržba a súlad (WordPress best-practice):**
  * Pridaný `uninstall.php` — pri odinštalovaní pluginu sa upracú vlastné `wseo_*` options, transienty, naplánované cron úlohy aj tabuľka opustených košíkov. Per-článok SEO meta (`_wseo_*`) sa **zachová**, kým to výslovne nepovolíš cez `wseo_delete_data_on_uninstall` (ochrana obsahu).
  * `Tested up to` aktualizované na 6.8.
  * Zjednotená licencia — `Proprietary` v readme aj v hlavičke pluginu (predtým protichodné GPLv2 vs Proprietary).

= 3.9.0 - Jún 2026 =
* 🏷️ **Kompletné Schema.org LocalBusiness typy** podľa Google noriem (148 podtypov — auto-moto, financie vrátane banky/bankomatu, zdravotníctvo, obchody, stravovanie, nemocnica/hasiči/polícia/pošta…); odstránený neplatný typ FoodService.
* 🎯 **Schema correctness audit (Google Rich Results):**
  * VacationRental/Lodging: `occupancy` vždy prítomné, `geo` + `address` aj v `containsPlace`, `identifier` ako platný Text.
  * Organization: logo zbavené nepodporovaných polí (creditText/license/creator…), ktoré Google hlásil ako warning.
  * Product (variabilný): variant obrázky v absolútnej URL.
  * VideoObject: fallback `thumbnailUrl`, vynútené `contentUrl`/`embedUrl`.
  * JobPosting: podpora `jobLocationType` (remote) + fallback.
* 🍽️ **Recept (Recipe) a Podujatie (Event) schéma — nový meta-box** „Recept & Podujatie": ingrediencie, postup, časy (ISO 8601), kalórie, dátumy, miesto, vstupenky. Predtým neaktívne, teraz plne funkčné + Google-compliant.

= 3.8.2 - Jún 2026 =
* 🎯 **SERP correctness audit fixes — odstránenie protichodných signálov pre Google**
* ✅ Sitemap: jeden zdroj pravdy pre indexovateľnosť — vylúčené noindex / heslom chránené / cudzo-canonicalizované URL (vrátane news a image sitemapu)
* ✅ Product schema: `offers` sa generujú vždy (aj free/0 cena a bez ceny), obrázok s fallbackom + absolútna URL (simple aj variabilné produkty) → product rich results
* ✅ Article/Page schema: obrázky vždy v absolútnej URL (Google odmietal relatívne)
* ✅ og:url teraz vždy zodpovedá canonicalu (singular, taxonómie, autor, homepage — vrátane stránkovania)
* ✅ Title: detekcia názvu firmy len na konci reťazca (koniec falošného „Pro" v „Professional")
* ✅ og:image rozmery z reálnych metadát prílohy (namiesto natvrdo 1200×630)
* ✅ Redirecty pri odstránení base: validácia celej hierarchickej cesty, wp_safe_redirect, zachovanie query stringu
* ✅ Kolízie slugov: krížová detekcia medzi taxonómiami
* ✅ robots.txt: zrušené blokovanie tracking parametrov (nech canonical konsoliduje)
* ✅ JSON-LD: `JSON_HEX_TAG` — obsah s „</script>" už nerozbije schému
* ✅ Last-Modified/304: priorita po redirectoch, odstránené tiché potlačenie chýb

= 2.6.0 - Január 2026 =
* 🏆 **MAJOR RELEASE: Centrálne globálne nastavenia pre Person!**
* 🔥 **NEW: Sekcia "Predvolené údaje autora/zakladateľa" v Globálnych nastaveniach**
* ✅ Meno, Fotka, Pozícia, URL, Sociálne siete - vyplní sa raz
* ✅ Organization.founder používa centrálne nastavenia
* ✅ WebPage.author používa centrálne nastavenia  
* ✅ Article.author používa centrálne nastavenia
* 🎯 **Priorita: Post meta → Centrálne nastavenia → WordPress profil**
* 🏆 **Vyplní sa raz v admin paneli → použije sa všade! 100% garantované!**

= 2.4.5 - Január 2026 =
* ✅ **Automatické vyplnenie všetkých odporúčaných polí z WordPress dát**
* ✅ ImageObject.name - z ALT textu obrázka
* ✅ ImageObject.description - z Caption/Description obrázka
* ✅ ImageObject.author - z creator (automaticky)
* ✅ Person.image - WordPress avatar autora
* ✅ Person.worksFor - Organization (názov webu)
* 🎯 **0 chýb v Google Search Console pre ImageObject a Person**
* 🚀 Žiadna manuálna práca - všetko automatické!

= 2.4.4 - Január 2026 =
* ✅ Pridané povinné polia pre ImageObject schema (Search Console)
* ✅ Pridané pole "creditText" (autor/zdroj obrázka)
* ✅ Pridané pole "license" (URL licencie)
* ✅ Pridané pole "acquireLicensePage" (stránka s licenciou)
* ✅ Pridané nepovinné pole "creator" (tvorca obrázka)
* ✅ Pridané nepovinné pole "copyrightNotice" (copyright oznámenie)
* ✅ Globálne nastavenia pre logo metadata
* ✅ Individuálne nastavenia pre featured images
* ✅ **Automatické predvyplnenie polí z globálnych nastavení**
* 🔧 Oprava 5 chýb z Google Search Console

= 2.0.0 =
* Kompletne prepracované rozhranie
* Tabová navigácia (Všeobecné, Sociálne, Viditeľnosť)
* Vylepšené progress bary
* Náhľad pre sociálne siete
* Noindex/Nofollow nastavenia
* Canonical URL podpora
