<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>PavelZanek.com - Blog</title>
        <link>https://www.pavelzanek.com/cs/blog</link>
        <description>Moje články, poznatky a novinky z praxe</description>
        <language>cs</language>
        <lastBuildDate>Wed, 20 May 2026 05:59:23 +0200</lastBuildDate>
        <atom:link href="https://www.pavelzanek.com/cs/feed.xml" rel="self" type="application/rss+xml"/>

                    <item>
                <title><![CDATA[Návod na generování souborů v Laravelu pomocí Artisan Console – příkaz &quot;make:&quot;]]></title>
                <link>https://www.pavelzanek.com/cs/blog/artisan-console-command-make</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/artisan-console-command-make</guid>
                <pubDate>Fri, 01 Sep 2023 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Průvodce Vás provede používáním příkazu make v Laravel Artisan Console. Naučte se rychle generovat třídy, upravovat šablony a efektivně řešit běžné chyby.]]></description>
                
                                    <content:encoded><![CDATA[Co je Artisan Console v Laravelu
Artisan Console je výkonný nástroj pro příkazovou řádku, který je součástí Laravelu, populárního PHP frameworku. Umožňuje vývojářům snadno a rychle vykonávat různé úkoly spojené s vývojem aplikace, od generování kódu až po správu databází. Artisan je nezbytný nástroj pro efektivní a produktivní vývoj v Laravelu.

Přehled příkazu 'make' a jeho význam
Příkaz make v Artisan Console je určen k generování různých typů souborů, které jsou běžně používány při vývoji Laravel aplikací. Pomocí tohoto příkazu můžete snadno a rychle vytvářet kontrolery, modely, migrace, testy a mnoho dalších komponent. Příkaz make výrazně zvyšuje produktivitu vývojáře tím, že automatizuje rutinní úkoly spojené s vytvářením nových souborů a tříd.

Proč je příkaz 'make' důležitý

Umožňuje vývojářům rychle a konzistentně generovat kód, což zvyšuje efektivitu a snižuje možnost chyb.
Zvyšuje produktivitu tím, že automatizuje opakující se úkoly, což umožňuje vývojářům soustředit se na logiku a funkcionalitu aplikace.
Je flexibilní a umožňuje vývojářům přizpůsobit generované soubory svým potřebám.


Základy příkazu 'make'

Co je příkaz 'Make'
Příkaz make je součástí Artisan Console v Laravelu. Umožňuje vývojářům generovat různé typy souborů, které jsou potřebné pro vývoj Laravel aplikace. Tento příkaz je navržen tak, aby automatizoval a zjednodušil proces vytváření nových komponent aplikace.

Jak používat příkaz 'Make'

Pro použití příkazu make, otevřete terminál a navigujte do kořenového adresáře vaší Laravel aplikace.
Zadejte php artisan make: následované názvem komponenty, kterou chcete vytvořit.


Příklad použití
Vytvoření nového kontroleru:
php artisan make:controller UserController

Různé možnosti a parametry
Příkaz make má různé možnosti a parametry, které umožňují vývojářům upřesnit, jaký typ souboru chtějí vytvořit a jaké vlastnosti bude mít.

Tabulka možností a parametrů

ParametrPopis

-mVytvoří i soubor migrace pro model
--resourceVytvoří kontroler typu resource
--apiVytvoří kontroler pro API
--factoryVytvoří i továrničku (factory) pro model
--seedVytvoří i seeder pro model



Příklad použití s parametry
Generování modelu spolu s příslušnou databázovou migrací:
php artisan make:model Post -m

Kde najít generované soubory
Po spuštění příkazu make se nově vytvořené soubory umístí do příslušných adresářů Laravel aplikace. Například: Kontrolery se nacházejí v adresáři app/Http/Controllers.

Generování různých typů souborů

NázevKrátký popis

make:castVytvoří novou třídu castu
make:channelVytvoří novou třídu broadcast channelu
make:componentVytvoří novou třídu komponenty view
make:commandVytvoří nový Artisan příkaz
make:controllerVytvoří novou třídu kontroleru
make:eventVytvoří novou třídu události (event)
make:exceptionVytvoří novou třídu výjimky
make:factoryVytvoří novou třídu továrničky (factory)
make:jobVytvoří novou třídu úlohy (job)
make:listenerVytvoří novou třídu posluchače (listener)
make:mailVytvoří novou třídu mailable
make:middlewareVytvoří novou třídu middleware
make:modelVytvoří novou třídu modelu
make:notificationVytvoří novou třídu notifikace
make:observerVytvoří novou třídu pozorovatele (observer)
make:policyVytvoří novou třídu pravidla (policy)
make:providerVytvoří novou třídu poskytovatele služeb (service provider)
make:requestVytvoří novou třídu validačního požadavku
make:resourceVytvoří novou třídu prostředku (resource)
make:ruleVytvoří novou validační třídu pravidla
make:scopeVytvoří novou třídu rozsahu dotazu (query scope)
make:seederVytvoří novou třídu seederu
make:testVytvoří novou třídu testu
make:livewireVytvoří novou třídu Livewire komponenty
make:migrationVytvoří nový soubor migrace databáze



Tato tabulka poskytuje přehled různých typů souborů, které můžete generovat pomocí příkazu `make` v Artisan Console Laravelu. Pro každý typ souboru je uveden jeho název a krátký popis toho, co tato třída nebo soubor dělá.

Práce se šablonami (Stubs)

Co jsou šablony (Stubs)
Šablony, známé jako _stubs_, jsou šablony souborů, které Artisan používá při generování nových tříd a souborů. Jsou to v podstatě předdefinované šablony kódu, které Laravel používá jako základ pro generování nových souborů.

Jak používat šablony
Když použijete příkaz `make`, Artisan automaticky použije odpovídající šablonu pro generování nového souboru. Můžete však také upravit tyto šablony podle svých potřeb.

Příklad
Pokud chcete upravit šablonu, kterou Laravel používá pro generování nových kontrolerů, můžete najít odpovídající šablonu v adresáři: `vendor/laravel/framework/src/Illuminate/Routing/Console/stubs`

Customizace šablon
Laravel umožňuje publikování a customizaci těchto šablon. Po publikování šablon můžete upravit jejich obsah podle svých potřeb.

Jak publikovat šablony

Spusťte následující Artisan příkaz:php artisan stub:publish
Tento příkaz zkopíruje všechny šablony do adresáře `stubs/` ve vašem kořenovém adresáři aplikace.
Nyní můžete upravit tyto soubory podle svých potřeb.


Proč customizovat šablony
Customizace šablon vám umožní definovat vlastní strukturu a obsah generovaných souborů. To je užitečné, pokud chcete, aby všechny vaše generované soubory měly konzistentní styl a strukturu, která odpovídá vašim standardům kódování.

Pokročilé techniky a tipy

Vytváření vlastních příkazů 'make'
Laravel umožňuje vytvářet vlastní Artisan příkazy, včetně vlastních příkazů `make`. To je užitečné, pokud potřebujete generovat specifické typy souborů, které nejsou standardně zahrnuty v Laravelu.

Jak vytvořit vlastní příkaz 'make'

Vytvořte nový příkaz: `php artisan make:command CustomMakeCommand`
Upravte Soubor Příkazu: Otevřete nově vytvořený soubor příkazu (např. `app/Console/Commands/CustomMakeCommand.php`) a nastavte logiku generování souboru.
Registrujte příkaz: Přidejte nový příkaz do pole `$commands` ve třídě `Kernel` v `app/Console/Kernel.php`.
Nyní můžete použít svůj nový příkaz `make` stejně jako jakýkoli jiný Artisan příkaz: Použijte Příkaz: `php artisan make:custom`


Automatizace procesu generování souborů
Můžete vytvořit skripty nebo Artisan příkazy, které automatizují proces generování souborů, aby se snížila potřeba manuálního zadávání příkazů.

Příklad automatizace
Vytvoření Artisan příkazu, který automaticky generuje model, kontroler, migraci a seeder najednou:
Artisan::call('make:model', ['name' => 'Post', '--migration' => true, '--controller' => true]);
Artisan::call('make:seeder', ['name' => 'PostsTableSeeder']);

Optimalizace Šablon pro Týmovou Práci
Pokud pracujete v týmu, je důležité zajistit, že všechny generované soubory budou mít konzistentní a očekávanou strukturu. Customizované šablony můžete uložit do verzovacího systému (např. Git), aby je mohl celý tým používat.

Tipy pro týmovou práci

Sdílejte Customizované Šablony: Uložte je v repozitáři, aby měl přístup celý tým.
Dokumentujte Změny: Když upravíte šablonu, dokumentujte, co a proč jste změnili, aby to bylo jasné pro ostatní členy týmu.


Běžné chyby a jak je řešit

Chyba: třída již existuje
Chyba se objeví, když se pokusíte vytvořit třídu, která již v aplikaci existuje.

Řešení

Zkontrolujte adresář: Ujistěte se, že třída skutečně již existuje, prohlédnutím příslušného adresáře.
Přejmenujte třídu: Pokud potřebujete vytvořit novou třídu s jiným účelem, zvažte přejmenování třídy, aby nedošlo ke konfliktu jmen.


Chyba: neplatné jméno třídy
Chyba nastane, pokud zadáte neplatné jméno třídy při používání příkazu `make`.

Řešení

Zkontrolujte syntaxi: Ujistěte se, že jméno třídy je ve správném formátu. Mělo by začínat velkým písmenem a nesmí obsahovat neplatné znaky.
Použijte správný příkaz: Ujistěte se, že používáte správný Artisan příkaz pro generování požadovaného typu souboru.


Chyba: šablona nebyla nalezena
Chyba se objeví, pokud Laravel nemůže najít potřebnou šablonu (stub) pro generování souboru.

Řešení

Zkontrolujte adresář se šablonami: Ujistěte se, že všechny šablony jsou na správném místě v adresáři `stubs/` ve vašem kořenovém adresáři aplikace.
Publikujte šablony znovu: Pokud chybí některé šablony, zkuste je znovu publikovat pomocí příkazu: `php artisan stub:publish`


Chyba: syntax error v generovaném souboru
Chyba nastane, pokud je v generovaném souboru chyba v syntaxi PHP.

Řešení

Zkontrolujte šablony: Chyba může být v šabloně, kterou Laravel použil k vytvoření souboru. Zkontrolujte šablonu a opravte chybu.
Zkontrolujte generovaný Soubor: Otevřete generovaný soubor a najděte a opravte chybu v syntaxi PHP.


Závěr

Příkaz `make` v Artisan Console Laravelu je silný nástroj, který výrazně zvyšuje produktivitu vývojáře tím, že automatizuje proces vytváření nových tříd a souborů.
Umožňuje generovat různé typy souborů, od kontrolerů a modelů až po testy a migrace.
Šablony (stubs) jsou klíčovou součástí tohoto procesu a mohou být customizovány podle potřeb vývojáře.
Běžné chyby při používání příkazu `make` jsou snadno řešitelné a většinou souvisí s názvy tříd, umístěním šablon nebo syntaxí PHP.


Důležitost efektivního využití příkazu 'make'
Efektivní využití příkazu `make` může výrazně zlepšit workflow vývojáře, umožňuje rychlejší vývoj a snižuje riziko chyb tím, že poskytuje konzistentní a spolehlivé způsoby generování kódu. Je to nástroj, který by měl být součástí každého Laravel vývojářova arzenálu.

Doporučení pro další kroky

Prozkoumejte další příkazy Artisan: Laravel Artisan nabízí mnoho dalších příkazů, které mohou usnadnit vývoj. Zkuste např. `php artisan list` pro zobrazení všech dostupných příkazů.
Studujte dokumentaci Laravelu: Dokumentace Laravelu je bohatým zdrojem informací. Věnujte čas jejímu procházení a učte se o dalších funkcích, které framework nabízí.
]]></content:encoded>
                
                                    <category><![CDATA[Laravel]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/1c/1c5eb3d6-5042-4d77-8c7b-bf256ae25984/conversions/artisan-console-command-make-full.jpg" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Generativní AI: Rychlý vzestup a dopad na technologický svět]]></title>
                <link>https://www.pavelzanek.com/cs/blog/generative-ai-rapid-rise-impact-tech-world</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/generative-ai-rapid-rise-impact-tech-world</guid>
                <pubDate>Tue, 15 Aug 2023 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Zjistěte, jak generativní AI mění technologický svět – od chatu po tvorbu obrázků. Přečtěte si o jejím vlivu na uživatele, trh a co nás čeká v budoucnu.]]></description>
                
                                    <content:encoded><![CDATA[Růst generativní AI v číslech
Generativní AI dosáhla více než 100 milionů uživatelů pouhé dva měsíce po spuštění ChatGPT. Naproti tomu smartphony potřebovaly více než dva roky, aby dosáhly 100 milionů uživatelů po uvedení iPhone v roce 2007. Tablety dosáhly 75 milionů uživatelů za zhruba dva roky po uvedení iPadu v roce 2010. Tedy adopce generativní AI výrazně překonala obě tyto kategorie.

Zdroj obrázku: eMarketer

Demografické trendy v generativní AI
Podle Emarketer je přijetí generativní AI mezi 18-34letými téměř dvojnásobné oproti starším demografickým skupinám. Mladší generace jsou více digitálně zdatné a jsou prvními přijímači nových technologií, jako je generativní AI.

Využití generativní AI
Zatímco generativní AI existuje již delší dobu, v poslední době zažila obrovský nárůst popularity. Uživatelé s nadšením experimentují s nástroji jako ChatGPT pro tvorbu poezie, Midjourney pro generování umění a AI chatboty od společností Google a Microsoft integrované do vyhledávání.

Příležitosti a rizika pro marketéry
Pro specialisty na SEO a digitální marketéry představuje generativní AI příležitosti i rizika. AI poháněné vyhledávání, jako je Google's Search Generative Experience (SGE), má za cíl zlepšit kvalitu vyhledávání. Existují však obavy, že SGE by mohlo povýšit více obsahu nízké kvality.

Pohled do budoucnosti
Jak se generativní AI bude dále vyvíjet, marketéři by měli pečlivě sledovat vývoj. S pečlivým testováním a hodnocením existuje potenciál využít tyto nástroje při minimalizaci možných nevýhod.

Zdroj: Search Engine Journal]]></content:encoded>
                
                                    <category><![CDATA[SEO]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/fa/fa050d05-435b-4575-9d5f-72af1957a27e/conversions/insiderintelligence-generative-ai-rapid-rise-impact-tech-world-full.png" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Amazon a revoluční nástroj pro generování popisů produktů pomocí AI]]></title>
                <link>https://www.pavelzanek.com/cs/blog/amazon-ai-generating-product-descriptions</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/amazon-ai-generating-product-descriptions</guid>
                <pubDate>Sun, 13 Aug 2023 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Amazon testuje nový AI nástroj pro generování popisů produktů, který by mohl zásadně změnit e-commerce. Tento nástroj má potenciál zjednodušit proces tvorby popisů.]]></description>
                
                                    <content:encoded><![CDATA[Amazon a revoluční nástroj pro generování produktových popisů pomocí AI
Amazon testuje nový AI nástroj pro generování produktových popisů, což může zásadně změnit e-commerce. Tento nástroj, aktuálně v testovací fázi, má potenciál zefektivnit proces vytváření popisů a zvýšit prodeje.
Amazon, světový e-commerce gigant, aktuálně testuje nový nástroj založený na generativní umělé inteligenci (AI), který má potenciál zásadně změnit způsob, jakým prodejci vytvářejí popisy svých produktů.
Umělá inteligence a tvorba produktových popisů
Podle zpráv z médií, zejména od zpravodajského serveru The Information, nový AI nástroj od Amazonu umožňuje prodejcům generovat názvy, popisy a klíčové body pro produkty. Stačí zadat klíčová slova charakterizující produkt a AI navrhne potenciální název a detaily pro výpis.
Tento nástroj je v současné době v testovací fázi a je dostupný pouze omezenému počtu prodejců. Amazon potvrdil, že se snaží vytvořit řešení, které by pomohlo prodejcům lépe oslovit zákazníky.
Pravidla pro obsah generovaný AI
Ačkoli tento nástroj může výrazně snížit nároky na copywriting, Amazon zdůrazňuje, že náhrada lidské kontroly a úprav není v plánu. Společnost má přísná pravidla týkající se popisů produktů, která zahrnují dodržování relevantních stylů, vyhýbání se použití HTML, JavaScriptu nebo urážlivého obsahu.
E-commerce platformy a AI nástroje
Amazon není první, kdo implementuje generativní AI nástroje pro prodejce. BigCommerce, Shopify a Wix již představily své vlastní AI řešení, která pomáhají prodejcům v různých oblastech, od chatbotů po generování obsahu.
Větší dopad generativní AI v e-commerce
Zavedení tohoto nástroje může prodejcům na Amazonu poskytnout výraznou výhodu tím, že sníží čas strávený psaním popisů produktů. Přesnější popisy produktů mohou vést k vyšším prodejům a menšímu počtu vrácených zboží. Nicméně je důležité si uvědomit potenciální výzvy a omezení spojená s implementací AI řešení.
Zdroj: Search Engine Journal]]></content:encoded>
                
                                    <category><![CDATA[Umělá inteligence]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/10/1048a46a-e989-4d91-8be3-d5ff499d5cc3/conversions/amazon-ai-generating-product-descriptions-full.jpg" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Jak vytvořit RSS feed ve frameworku Laravel]]></title>
                <link>https://www.pavelzanek.com/cs/blog/rss-feed-laravel</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/rss-feed-laravel</guid>
                <pubDate>Thu, 10 Aug 2023 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Zjistěte, jak snadno a rychle vytvořit RSS feed ve frameworku Laravel. Tento návod Vám ukáže celý postup od vytvoření tras a kontroleru až po výstup XML souboru.]]></description>
                
                                    <content:encoded><![CDATA[RSS feed, zn&aacute;m&yacute; tak&eacute; jako "Really Simple Syndication", je n&aacute;stroj, kter&yacute; umožňuje uživatelům snadno sledovat aktualizace webov&yacute;ch str&aacute;nek nebo aplikac&iacute;. M&iacute;sto toho, aby museli pravidelně nav&scaron;těvovat konkr&eacute;tn&iacute; webov&eacute; str&aacute;nky, mohou uživatel&eacute; jednodu&scaron;e odeb&iacute;rat RSS feed a dost&aacute;vat novinky př&iacute;mo do sv&eacute;ho čtečky RSS.

Aktualizace v re&aacute;ln&eacute;m čase: Jakmile je nov&yacute; obsah publikov&aacute;n, je okamžitě distribuov&aacute;n do v&scaron;ech odběratelů RSS feedu.
Personalizace: Uživatel&eacute; mohou vybrat, kter&eacute; webov&eacute; str&aacute;nky nebo t&eacute;ma chtěj&iacute; sledovat, což jim umožňuje m&iacute;t př&iacute;stup k obsahu, kter&yacute; je pro ně nejrelevantněj&scaron;&iacute;.
Efektivita: RSS feedy &scaron;etř&iacute; čas uživatelům t&iacute;m, že jim poskytuj&iacute; centralizovan&yacute; způsob, jak sledovat aktualizace z různ&yacute;ch zdrojů.

Důležitost ručn&iacute;ho vytv&aacute;řen&iacute; RSS feedu
Ačkoli existuje mnoho n&aacute;strojů a bal&iacute;čků, kter&eacute; usnadňuj&iacute; vytv&aacute;řen&iacute; RSS feedu, je důležit&eacute; rozumět z&aacute;kladn&iacute;m principům a vědět, jak vytvořit RSS feed ručně. Toto pochopen&iacute; v&aacute;m umožn&iacute;:

Vět&scaron;&iacute; kontrola: M&aacute;te plnou kontrolu nad t&iacute;m, jak&yacute; obsah je zahrnut do va&scaron;eho feedu a jak je prezentov&aacute;n.
Flexibilita: Můžete přizpůsobit svůj RSS feed specifick&yacute;m potřeb&aacute;m va&scaron;eho projektu.
Lep&scaron;&iacute; porozuměn&iacute;: Když vytv&aacute;ř&iacute;te RSS feed ručně, z&iacute;sk&aacute;v&aacute;te hlub&scaron;&iacute; porozuměn&iacute; tomu, jak technologie funguje, což v&aacute;m může pomoci při ře&scaron;en&iacute; probl&eacute;mů nebo při dal&scaron;&iacute;m v&yacute;voji.

V n&aacute;sleduj&iacute;c&iacute;ch č&aacute;stech se pod&iacute;v&aacute;me na to, jak krok za krokem vytvořit RSS feed ve frameworku Laravel bez použit&iacute; ž&aacute;dn&eacute;ho extern&iacute;ho bal&iacute;čku.
Co je RSS feed a proč je důležit&yacute;
Definice RSS feedu
RSS, což je zkratka pro "Really Simple Syndication", je standardizovan&yacute; form&aacute;t pro distribuci a publikaci obsahu na internetu. Umožňuje webov&yacute;m str&aacute;nk&aacute;m a aplikac&iacute;m sd&iacute;let aktualizace, novinky a dal&scaron;&iacute; obsah v univerz&aacute;ln&iacute;m form&aacute;tu, kter&yacute; mohou čtečky RSS snadno interpretovat a zobrazit.

Form&aacute;t: RSS feed je obvykle ve form&aacute;tu XML, což umožňuje snadnou integraci s různ&yacute;mi platformami a aplikacemi.
Struktura: Obsahuje z&aacute;kladn&iacute; informace o kan&aacute;lu (např. n&aacute;zev, popis, odkaz na web) a položky (jednotliv&eacute; čl&aacute;nky nebo aktualizace) s titulem, popisem, odkazem a dal&scaron;&iacute;mi metadaty.

V&yacute;hody použ&iacute;v&aacute;n&iacute; RSS feedu
RSS feedy přin&aacute;&scaron;ej&iacute; řadu v&yacute;hod pro webov&eacute; str&aacute;nky, aplikace i jejich uživatele:

Centralizovan&eacute; sledov&aacute;n&iacute; obsahu: Uživatel&eacute; mohou sledovat aktualizace z mnoha různ&yacute;ch zdrojů na jednom m&iacute;stě pomoc&iacute; čtečky RSS.
Automatizace: Webov&eacute; str&aacute;nky a aplikace mohou automaticky generovat a aktualizovat sv&eacute; RSS feedy, což zaji&scaron;ťuje, že uživatel&eacute; vždy dostanou nejnověj&scaron;&iacute; obsah.
Zv&yacute;&scaron;en&iacute; n&aacute;v&scaron;těvnosti: RSS feedy mohou přil&aacute;kat v&iacute;ce n&aacute;v&scaron;těvn&iacute;ků na va&scaron;i webovou str&aacute;nku, protože uživatel&eacute; mohou snadno sledovat va&scaron;e aktualizace a kliknout na odkazy, kter&eacute; je přivedou zpět na va&scaron;e str&aacute;nky.
Sn&iacute;žen&iacute; z&aacute;těže serveru: M&iacute;sto toho, aby uživatel&eacute; neust&aacute;le nač&iacute;tali celou webovou str&aacute;nku, mohou jednodu&scaron;e st&aacute;hnout mal&yacute; RSS feed, což snižuje z&aacute;těž na server.

RSS feedy se staly kl&iacute;čov&yacute;m n&aacute;strojem pro sd&iacute;len&iacute; obsahu na internetu. Nab&iacute;zej&iacute; efektivn&iacute; způsob, jak distribuovat a konzumovat obsah, a přin&aacute;&scaron;ej&iacute; řadu v&yacute;hod jak pro vydavatele, tak pro koncov&eacute; uživatele. Ať už jste v&yacute;voj&aacute;ř, market&eacute;r nebo prost&yacute; uživatel, porozuměn&iacute; RSS a jeho v&yacute;hod&aacute;m v&aacute;m může přin&eacute;st mnoho př&iacute;nosů.
Z&aacute;klady frameworku Laravel
Co je Laravel?
Laravel je modern&iacute; PHP framework, kter&yacute; byl navržen s c&iacute;lem usnadnit v&yacute;voj&aacute;řům vytv&aacute;řen&iacute; robustn&iacute;ch a &scaron;k&aacute;lovateln&yacute;ch webov&yacute;ch aplikac&iacute;. D&iacute;ky sv&eacute; modularitě a bohat&eacute; sadě n&aacute;strojů se rychle stal jedn&iacute;m z nejobl&iacute;beněj&scaron;&iacute;ch PHP frameworků na trhu.

Architektura: Laravel využ&iacute;v&aacute; model-view-controller (MVC) architekturu, což usnadňuje organizaci k&oacute;du a oddělen&iacute; logiky aplikace od prezentace.
Elegance: Laravel je zn&aacute;m&yacute; sv&yacute;m "elegantn&iacute;m" k&oacute;dem, což znamen&aacute;, že je snadno čiteln&yacute;, dobře organizovan&yacute; a intuitivn&iacute;.

Kl&iacute;čov&eacute; vlastnosti Laravelu
Laravel nab&iacute;z&iacute; řadu n&aacute;strojů a funkc&iacute;, kter&eacute; usnadňuj&iacute; v&yacute;voj webov&yacute;ch aplikac&iacute;:

Eloquent ORM: Intuitivn&iacute; způsob pr&aacute;ce s datab&aacute;zemi pomoc&iacute; objektově-relačn&iacute;ho mapov&aacute;n&iacute;.
Blade &scaron;ablonovac&iacute; engine: Flexibiln&iacute; a v&yacute;konn&yacute; n&aacute;stroj pro vytv&aacute;řen&iacute; dynamick&yacute;ch webov&yacute;ch str&aacute;nek.
Migrace a seedery: N&aacute;stroje pro snadn&eacute; vytv&aacute;řen&iacute; a naplňov&aacute;n&iacute; datab&aacute;z&iacute;.
Middleware: Filtry, kter&eacute; mohou prov&aacute;dět různ&eacute; &uacute;koly před nebo po zpracov&aacute;n&iacute; HTTP požadavku.
Artisan: V&yacute;konn&yacute; př&iacute;kazov&yacute; ř&aacute;dek pro různ&eacute; &uacute;koly, jako je generov&aacute;n&iacute; k&oacute;du nebo spr&aacute;va datab&aacute;z&iacute;.


Proč použ&iacute;vat Laravel pro vytv&aacute;řen&iacute; RSS feedu?
Ačkoli existuje mnoho frameworků, kter&eacute; mohou b&yacute;t použity k vytv&aacute;řen&iacute; RSS feedu, Laravel nab&iacute;z&iacute; několik v&yacute;hod:

Snadn&aacute; integrace: Laravel m&aacute; vestavěn&eacute; n&aacute;stroje a knihovny, kter&eacute; usnadňuj&iacute; integraci RSS feedu do va&scaron;&iacute; aplikace.
Bezpečnost: Laravel obsahuje řadu bezpečnostn&iacute;ch funkc&iacute;, kter&eacute; chr&aacute;n&iacute; v&aacute;&scaron; RSS feed před různ&yacute;mi hrozbami.
V&yacute;konnost: D&iacute;ky optimalizovan&eacute;mu k&oacute;du a efektivn&iacute;mu cachov&aacute;n&iacute; může Laravel nab&iacute;dnout rychl&eacute; a spolehliv&eacute; RSS feedy.

Laravel je v&yacute;konn&yacute; a flexibiln&iacute; framework, kter&yacute; nab&iacute;z&iacute; v&scaron;e, co v&yacute;voj&aacute;ři potřebuj&iacute; k vytv&aacute;řen&iacute; kvalitn&iacute;ch webov&yacute;ch aplikac&iacute;. Ať už jste zač&aacute;tečn&iacute;k nebo zku&scaron;en&yacute; v&yacute;voj&aacute;ř, Laravel v&aacute;m může poskytnout n&aacute;stroje a zdroje potřebn&eacute; k vytv&aacute;řen&iacute; efektivn&iacute;ch a bezpečn&yacute;ch RSS feedů.
Kroky k vytvořen&iacute; RSS feedu ve frameworku Laravel
1. Nastaven&iacute; datab&aacute;ze a modelů
Předt&iacute;m, než začneme s vytv&aacute;řen&iacute;m RSS feedu, je důležit&eacute; m&iacute;t spr&aacute;vně nastavenou datab&aacute;zi a modely, kter&eacute; budou reprezentovat obsah, kter&yacute; chceme zahrnout do na&scaron;eho feedu.

Konfigurace datab&aacute;ze: Ujistěte se, že m&aacute;te spr&aacute;vně nastaveny &uacute;daje pro připojen&iacute; k datab&aacute;zi v souboru .env.
Vytvořen&iacute; modelu: Použijte Artisan př&iacute;kaz php artisan make:model JmenoModelu k vytvořen&iacute; nov&eacute;ho modelu.

Migrace (database/migrations/{timestamp}_create_posts_table.php):
&lt;?php
  
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
  
return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table-&gt;id();
            $table-&gt;string('title');
            $table-&gt;string('slug');
            $table-&gt;text('body');
            $table-&gt;timestamps();
        });
    }
  
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
};
Model (app/Models/Post.php):
&lt;?php
  
namespace App\Models;
  
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
  
class Post extends Model
{
    use HasFactory;
  
    protected $fillable = [
        'title', 'slug', 'body'
    ];
}
2. Vytvořen&iacute; kontroleru pro generov&aacute;n&iacute; RSS feedu
Kontroler bude zodpovědn&yacute; za generov&aacute;n&iacute; XML struktury RSS feedu.

Vytvořen&iacute; kontroleru: Použijte Artisan př&iacute;kaz 'php artisan make:controller RssFeedController' k vytvořen&iacute; nov&eacute;ho kontroleru.
Generov&aacute;n&iacute; XML: V kontroleru vytvořte metodu, kter&aacute; bude generovat XML strukturu RSS feedu na z&aacute;kladě dat z datab&aacute;ze.

Kontroler (app/Http/Controllers/RSSFeedController.php):
&lt;?php
  
namespace App\Http\Controllers;
  
use Illuminate\Http\Request;
use App\Models\Post;
  
class RSSFeedController extends Controller
{
    public function index()
    {
        $posts = Post::latest()-&gt;get();
  
        return response()-&gt;view('rss', [
            'posts' =&gt; $posts
        ])-&gt;header('Content-Type', 'text/xml');
    }
}
&Scaron;ablona (resources/views/rss.blade.php):
&lt;?=
'&lt;?xml version="1.0" encoding="UTF-8"?&gt;'.PHP_EOL
?&gt;
&lt;rss version="2.0"&gt;
    &lt;channel&gt;
        &lt;title&gt;&lt;![CDATA[ PavelZanek.com.com ]]&gt;&lt;/title&gt;
        &lt;link&gt;&lt;![CDATA[ https://your-website.com/feed ]]&gt;&lt;/link&gt;
        &lt;description&gt;&lt;![CDATA[ Your website description ]]&gt;&lt;/description&gt;
        &lt;language&gt;en&lt;/language&gt;
        &lt;pubDate&gt;{{ now()-&gt;toRssString() }}&lt;/pubDate&gt;
  
        @foreach($posts as $post)
            &lt;item&gt;
                &lt;title&gt;{{ $post-&gt;title }}&lt;/title&gt;
                &lt;link&gt;{{ $post-&gt;slug }}&lt;/link&gt;
                &lt;description&gt;&lt;![CDATA[{!! $post-&gt;body !!}]]&gt;&lt;/description&gt;
                &lt;category&gt;{{ $post-&gt;category }}&lt;/category&gt;
                &lt;author&gt;Pavel Zaněk&lt;/author&gt;
                &lt;guid&gt;{{ $post-&gt;id }}&lt;/guid&gt;
                &lt;pubDate&gt;{{ $post-&gt;created_at-&gt;toRssString() }}&lt;/pubDate&gt;
            &lt;/item&gt;
        @endforeach
    &lt;/channel&gt;
&lt;/rss&gt;
3. Nastaven&iacute; routy pro RSS feed
Aby byl v&aacute;&scaron; RSS feed dostupn&yacute; pro uživatele a čtečky RSS, mus&iacute;te nastavit routu, kter&aacute; bude odkazovat na v&aacute;&scaron; kontroler.

Přid&aacute;n&iacute; routy: V souboru web.php přidejte novou routu, kter&aacute; bude odkazovat na metodu v RssFeedController, kter&aacute; generuje RSS feed.

Route (routes/web.php):
&lt;?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\RSSFeedController;

Route::get('feed', [RSSFeedController::class, 'index'])-&gt;name('rss-feed');
4. Testov&aacute;n&iacute; a ověřen&iacute; funkčnosti RSS feedu
Po dokončen&iacute; v&yacute;&scaron;e uveden&yacute;ch kroků je důležit&eacute; ověřit, že v&aacute;&scaron; RSS feed spr&aacute;vně funguje.

Ověřen&iacute; v prohl&iacute;žeči: Otevřete v&aacute;&scaron; RSS feed v webov&eacute;m prohl&iacute;žeči a ujistěte se, že vid&iacute;te spr&aacute;vnou XML strukturu.
Validace RSS feedu: Použijte online n&aacute;stroje, jako je W3C Feed Validation Service, k ověřen&iacute; spr&aacute;vnosti va&scaron;eho RSS feedu.

Vytvořen&iacute; RSS feedu ve frameworku Laravel může vyžadovat několik kroků, ale d&iacute;ky flexibilitě a n&aacute;strojům, kter&eacute; Laravel nab&iacute;z&iacute;, je tento proces snadn&yacute; a př&iacute;močar&yacute;. Nyn&iacute;, když m&aacute;te svůj RSS feed nastaven&yacute; a funkčn&iacute;, můžete zač&iacute;t sd&iacute;let svůj obsah s &scaron;ir&scaron;&iacute;m publikem a využ&iacute;vat v&yacute;hody, kter&eacute; RSS feedy přin&aacute;&scaron;ej&iacute;.
Tipy a triky pro optimalizaci RSS feedu
1. Jak zabezpečit v&aacute;&scaron; RSS feed
Zabezpečen&iacute; va&scaron;eho RSS feedu je kl&iacute;čov&eacute; k ochraně va&scaron;ich dat a uživatelů. N&aacute;sleduj&iacute;c&iacute; tipy v&aacute;m pomohou zajistit, že v&aacute;&scaron; RSS feed bude bezpečn&yacute;:

Použit&iacute; HTTPS: Vždy použ&iacute;vejte HTTPS pro va&scaron;e RSS feedy, aby byla data přen&aacute;&scaron;ena &scaron;ifrovaně.
Ověřen&iacute; př&iacute;stupu: Pokud chcete omezit př&iacute;stup k va&scaron;emu RSS feedu, můžete implementovat ověřen&iacute; uživatele.
Validace vstupů: Ověřte v&scaron;echny vstupy, kter&eacute; mohou ovlivnit obsah va&scaron;eho RSS feedu, aby byla zabr&aacute;něna SQL injekce a dal&scaron;&iacute; &uacute;toky.

2. Jak optimalizovat v&yacute;kon RSS feedu
Optimalizace v&yacute;konu va&scaron;eho RSS feedu zaji&scaron;ťuje rychl&eacute; nač&iacute;t&aacute;n&iacute; a lep&scaron;&iacute; uživatelskou zku&scaron;enost. Zde jsou někter&eacute; tipy, jak toho dos&aacute;hnout:

Cachov&aacute;n&iacute;: Použit&iacute; cache pro va&scaron;e RSS feedy může v&yacute;razně zv&yacute;&scaron;it rychlost nač&iacute;t&aacute;n&iacute;. Laravel nab&iacute;z&iacute; různ&eacute; možnosti cachov&aacute;n&iacute;, kter&eacute; můžete využ&iacute;t.
Minimalizace velikosti: Omezte velikost va&scaron;eho RSS feedu t&iacute;m, že zahrnete pouze nezbytn&eacute; informace a minimalizujete použit&iacute; b&iacute;l&yacute;ch znaků a koment&aacute;řů.
Spr&aacute;vn&aacute; struktura XML: Ujistěte se, že v&aacute;&scaron; XML je spr&aacute;vně strukturov&aacute;n a validn&iacute;. Nevalidn&iacute; XML může způsobit probl&eacute;my při čten&iacute; va&scaron;eho RSS feedu.

3. Personalizace a roz&scaron;&iacute;řen&iacute; va&scaron;eho RSS feedu
Va&scaron;emu RSS feedu můžete přidat dal&scaron;&iacute; hodnotu t&iacute;m, že jej přizpůsob&iacute;te a roz&scaron;&iacute;ř&iacute;te podle potřeb va&scaron;eho publika:

Přizpůsoben&iacute; obsahu: Můžete nab&iacute;dnout různ&eacute; verze va&scaron;eho RSS feedu pro různ&eacute; jazyky nebo t&eacute;mata.
Roz&scaron;&iacute;řen&iacute; metadat: Použit&iacute;m roz&scaron;&iacute;řen&yacute;ch metadat, jako jsou obr&aacute;zky, autoři nebo kategorie, můžete poskytnout bohat&scaron;&iacute; informace o va&scaron;em obsahu.

Optimalizace a zabezpečen&iacute; va&scaron;eho RSS feedu jsou kl&iacute;čov&eacute; aspekty, kter&eacute; by neměly b&yacute;t přehl&iacute;ženy. Využit&iacute;m těchto tipů a triků můžete zajistit, že v&aacute;&scaron; RSS feed bude nejen rychl&yacute; a bezpečn&yacute;, ale tak&eacute; přizpůsoben&yacute; a roz&scaron;&iacute;řen&yacute; tak, aby vyhovoval potřeb&aacute;m va&scaron;eho publika. Laravel nab&iacute;z&iacute; mnoho n&aacute;strojů a funkc&iacute;, kter&eacute; v&aacute;m mohou pomoci dos&aacute;hnout těchto c&iacute;lů, takže nev&aacute;hejte je využ&iacute;t ve sv&eacute;m projektu.
Z&aacute;věr
V průběhu tohoto n&aacute;vodu jsme pro&scaron;li kl&iacute;čov&yacute;mi aspekty vytv&aacute;řen&iacute; RSS feedu ve frameworku Laravel:

Definice a v&yacute;znam RSS feedu: Pojali jsme RSS jako n&aacute;stroj pro distribuci a publikaci obsahu, kter&yacute; přin&aacute;&scaron;&iacute; řadu v&yacute;hod pro webov&eacute; str&aacute;nky a jejich uživatele.
Z&aacute;klady frameworku Laravel: Představili jsme Laravel jako v&yacute;konn&yacute; a flexibiln&iacute; framework ide&aacute;ln&iacute; pro vytv&aacute;řen&iacute; RSS feedů.
Postup vytv&aacute;řen&iacute; RSS feedu: Krok za krokem jsme pro&scaron;li procesem vytv&aacute;řen&iacute; RSS feedu, od nastaven&iacute; datab&aacute;ze a modelů až po testov&aacute;n&iacute; a ověřen&iacute; funkčnosti.
Optimalizace a zabezpečen&iacute;: Nab&iacute;dli jsme tipy a triky, jak zabezpečit a optimalizovat v&aacute;&scaron; RSS feed pro lep&scaron;&iacute; v&yacute;kon a uživatelskou zku&scaron;enost.

Nyn&iacute;, když m&aacute;te v&scaron;echny informace a n&aacute;stroje potřebn&eacute; k vytvořen&iacute; vlastn&iacute;ho RSS feedu ve frameworku Laravel, je čas se pustit do pr&aacute;ce! Vytvořte svůj RSS feed, experimentujte s různ&yacute;mi funkcemi a optimalizujte jej podle potřeb va&scaron;eho publika. A nezapomeňte sd&iacute;let sv&eacute; zku&scaron;enosti a &uacute;spěchy s komunitou!
Děkuji v&aacute;m za přečten&iacute; tohoto n&aacute;vodu. Douf&aacute;m, že v&aacute;m poskytl cenn&eacute; informace a n&aacute;vody, kter&eacute; v&aacute;m pomohou vytvořit &uacute;spě&scaron;n&yacute; RSS feed ve frameworku Laravel. Pokud m&aacute;te dal&scaron;&iacute; dotazy nebo potřebujete dal&scaron;&iacute; pomoc, nev&aacute;hejte se obr&aacute;tit na komunitu Laravelu nebo na mě. Hodně &uacute;spěchů ve va&scaron;em v&yacute;voji!]]></content:encoded>
                
                                    <category><![CDATA[Laravel]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/9f/9fe6f451-100d-4000-9f2d-336f55c023de/conversions/laravel-rss-feed-example-full.png" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Google HowTo a FAQ Rich Results – Jak na to?]]></title>
                <link>https://www.pavelzanek.com/cs/blog/google-howto-faq-rich-results</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/google-howto-faq-rich-results</guid>
                <pubDate>Wed, 09 Aug 2023 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Zjistěte, jak implementovat HowTo a FAQ Rich Results pro Google, abyste zlepšili svou viditelnost ve výsledcích vyhledávání a přilákali více návštěvníků na svůj web.]]></description>
                
                                    <content:encoded><![CDATA[Co jsou bohat&eacute; v&yacute;sledky Google?
Bohat&eacute; v&yacute;sledky Google, zn&aacute;m&eacute; tak&eacute; jako Rich Results, jsou speci&aacute;ln&iacute; formou zobrazen&iacute; obsahu webov&yacute;ch str&aacute;nek ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;. Mohou zahrnovat karousely s vět&scaron;&iacute;mi obr&aacute;zky, jako jsou recepty, nebo mohou b&yacute;t zobrazeny s hvězdičkami pro hodnocen&iacute;.
Proč Google měn&iacute; viditelnost HowTo a FAQ?
Hlavn&iacute;m důvodem, proč Google prov&aacute;d&iacute; tyto změny, je poskytnout uživatelům "čist&scaron;&iacute; a konzistentněj&scaron;&iacute; vyhled&aacute;vac&iacute; z&aacute;žitek". Google nyn&iacute; omezuje zobrazen&iacute; FAQ bohat&yacute;ch v&yacute;sledků pouze na vl&aacute;dn&iacute; a zdravotn&iacute; weby s vysokou autoritou. FAQ se tedy bude zobrazovat pouze u autorativn&iacute;ch webů (vl&aacute;dn&iacute; weby a zdravotnictv&iacute;). A HowTo bude viditeln&eacute; pouze na desktopu.

Jak&eacute; jsou dopady pro vydavatele?
Mnoho vydavatelů investovalo čas a zdroje do přid&aacute;n&iacute; FAQ obsahu a př&iacute;slu&scaron;n&yacute;ch strukturovan&yacute;ch dat. Tato novinka může b&yacute;t vn&iacute;m&aacute;na jako zklam&aacute;n&iacute; pro ty, kteř&iacute; doufali v lep&scaron;&iacute; viditelnost d&iacute;ky těmto bohat&yacute;m v&yacute;sledkům.
Měli byste odstranit strukturovan&aacute; data FAQ &amp; HowTo?
I když Google ignoruje tato strukturovan&aacute; data pro &uacute;čely bohat&yacute;ch v&yacute;sledků, mohou je využ&iacute;vat jin&eacute; vyhled&aacute;vače. Pokud je pro v&aacute;s obt&iacute;žn&eacute; je odstranit, nen&iacute; to nutn&eacute;. Pokud v&scaron;ak použ&iacute;v&aacute;te plugin nebo jinou funkci, odstraněn&iacute; by mělo b&yacute;t snadn&eacute;.
Co d&aacute;l pro webmastery?
Je důležit&eacute; sledovat, jak se tyto změny projev&iacute; ve va&scaron;ich v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute; a přizpůsobit svou SEO strategii podle toho. Zat&iacute;mco někter&eacute; bohat&eacute; v&yacute;sledky mohou b&yacute;t m&eacute;ně viditeln&eacute;, st&aacute;le existuj&iacute; jin&eacute; možnosti, jak zv&yacute;&scaron;it viditelnost va&scaron;eho obsahu ve vyhled&aacute;v&aacute;n&iacute;.
Zdroj: Search Engine Journal, Google Search Central]]></content:encoded>
                
                                    <category><![CDATA[SEO]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/a4/a4499a58-1752-4ca8-9037-69c2d1d182b0/conversions/google-howto-faq-rich-results-featured-image-full.jpg" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Laravel Livewire CRUD]]></title>
                <link>https://www.pavelzanek.com/cs/blog/laravel-livewire-crud</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/laravel-livewire-crud</guid>
                <pubDate>Thu, 29 Jun 2023 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Naučte se, jak vytvořit plně funkční CRUD aplikaci pomocí Laravelu a Livewire. Tento návod pokrývá vše od instalace až po nasazení.]]></description>
                
                                    <content:encoded><![CDATA[Vstoup&iacute;me do světa Laravelu a Livewire, kde se nauč&iacute;me, jak vytvořit Livewire komponentu pro CRUD operace. Laravel je jedn&iacute;m z nejpopul&aacute;rněj&scaron;&iacute;ch PHP frameworků a Livewire je jeho v&yacute;konn&yacute; doplněk, kter&yacute; umožňuje vytv&aacute;řet modern&iacute;, dynamick&eacute; rozhran&iacute; př&iacute;mo v Laravelu. CRUD operace - vytv&aacute;řen&iacute; (Create), čten&iacute; (Read), &uacute;prava (Update) a maz&aacute;n&iacute; (Delete) - jsou z&aacute;kladn&iacute;mi stavebn&iacute;mi kameny jak&eacute;koliv aplikace. V tomto čl&aacute;nku se zaměř&iacute;me na to, jak vytvořit Livewire komponentu v Laravelu, kter&aacute; umožňuje prov&aacute;dět tyto z&aacute;kladn&iacute; operace. Nav&iacute;c se nauč&iacute;me, jak tyto komponenty testovat, aby byla na&scaron;e aplikace robustn&iacute; a spolehliv&aacute;. Připravte se na cestu plnou k&oacute;du, inovac&iacute; a nejlep&scaron;&iacute;ch postupů v oblasti v&yacute;voje webov&yacute;ch aplikac&iacute;.
Co je Livewire a Laravel
Než se pust&iacute;me do samotn&eacute;ho n&aacute;vodu, kde si uk&aacute;žeme jak krok za krokem vytvoř&iacute;t logiku v Livewire komponentě, je dobr&eacute; se sezn&aacute;mit s oběma frameworky. Možn&aacute; se mezi V&aacute;mi najdou nov&aacute;čci, kteř&iacute; sly&scaron;&iacute; o Laravelu nebo Livewire poprv&eacute;.
Laravel
Laravel je open-source PHP framework, kter&yacute; je vysoce ceněn&yacute; pro svou elegantn&iacute; syntaxi a schopnost usnadnit v&yacute;voj webov&yacute;ch aplikac&iacute; t&iacute;m, že poskytuje n&aacute;stroje pro běžn&eacute; &uacute;koly, jako je routov&aacute;n&iacute;, autentizace, relace a cachov&aacute;n&iacute;. Laravel je postaven na komponent&aacute;ch Symfony a jeho zdrojov&yacute; k&oacute;d je hostov&aacute;n na GitHubu.
Livewire
Livewire na druh&eacute; straně je plnohodnotn&yacute; framework pro Laravel, kter&yacute; umožňuje vytv&aacute;řet dynamick&eacute; rozhran&iacute; jednodu&scaron;e a bez nutnosti psan&iacute; JavaScriptu. Livewire využ&iacute;v&aacute; koncept komponent, kter&eacute; jsou podobn&eacute; jako v Reactu nebo Vue, ale jsou napsan&eacute; v čist&eacute;m PHP. To znamen&aacute;, že můžete vytv&aacute;řet komplexn&iacute;, reaktivn&iacute; aplikace s jedin&yacute;m jazykem.
Společně Laravel a Livewire tvoř&iacute; silnou kombinaci pro v&yacute;voj webov&yacute;ch aplikac&iacute;. Laravel poskytuje z&aacute;kladn&iacute; infrastrukturu a Livewire přid&aacute;v&aacute; dynamickou vrstvu, kter&aacute; umožňuje v&yacute;voj&aacute;řům vytv&aacute;řet interaktivn&iacute; uživatelsk&eacute; rozhran&iacute; s minimem k&oacute;du a složitosti.
&Uacute;vod k na&scaron;&iacute; uk&aacute;zce
Abyste l&eacute;pe pochopili uk&aacute;zku, nejdř&iacute;ve si projděte dř&iacute;ve vytvořen&yacute; čl&aacute;nek na pr&aacute;ci s CRUD operacemi v samotn&eacute;m Laravelu, kde se kromě z&aacute;kladn&iacute;ch infromac&iacute; (např. co je crud) dozv&iacute;te i č&aacute;sti k&oacute;du, kter&eacute; jsou předpokladem pro dal&scaron;&iacute; kroky v tomto n&aacute;vodu (migrace, model, akce, apod.). V tomto n&aacute;vodu se pak předpokl&aacute;d&aacute;, že m&aacute;te již nainstalovan&yacute; framework Laravel spolu s Laravel Livewire.
Pro testov&aacute;n&iacute; Livewire komponenty je pak tak&eacute; použit&nbsp;bal&iacute;ček Pest, kter&yacute; jsme v předchoz&iacute;m n&aacute;vodu tak&eacute; využili.
Vytvořen&iacute; Livewire komponenty
Vytvořen&iacute; Livewire komponenty v Laravelu je proces, kter&yacute; je jednoduch&yacute; a př&iacute;močar&yacute;. Začneme t&iacute;m, že otevřeme termin&aacute;l a navigujeme do kořenov&eacute;ho adres&aacute;ře na&scaron;eho Laravel projektu. Zde můžeme vytvořit novou Livewire komponentu pomoc&iacute; n&aacute;sleduj&iacute;c&iacute;ho př&iacute;kazu:
php artisan make:livewire ComponentName
Nahraďte "ComponentName" n&aacute;zvem va&scaron;&iacute; komponenty. Tento př&iacute;kaz vytvoř&iacute; dvě nov&eacute; soubory: tř&iacute;du komponenty a přidružen&yacute; Blade view/&scaron;ablonu. Tř&iacute;da komponenty je um&iacute;stěna v "app/Http/Livewire" a Blade view je v "resources/views/livewire".
Tř&iacute;da komponenty je m&iacute;sto, kde definujete ve&scaron;kerou logiku komponenty. Může obsahovat veřejn&eacute; vlastnosti, kter&eacute; jsou automaticky synchronizov&aacute;ny mezi backendem a frontendem, a metody, kter&eacute; mohou reagovat na ud&aacute;losti uživatele.
Blade view je m&iacute;sto, kde definujete HTML rozhran&iacute; komponenty. Můžete zde použ&iacute;t jak&yacute;koliv platn&yacute; Blade syntax/direktivu a můžete tak&eacute; přistupovat k veřejn&yacute;m vlastnostem a metod&aacute;m tř&iacute;dy komponenty.
Vytvořen&iacute; Livewire komponenty je tedy ot&aacute;zkou vytvořen&iacute; těchto dvou souborů a definov&aacute;n&iacute; potřebn&eacute; logiky a rozhran&iacute;. Jakmile m&aacute;te tyto soubory připraven&eacute;, můžete zač&iacute;t použ&iacute;vat svou Livewire komponentu v jak&eacute;mkoliv Laravel view pomoc&iacute; Livewire direktivy:
@livewire('component-name')
Opět nahraďte "component-name" n&aacute;zvem va&scaron;&iacute; komponenty. Tato direktiva vlož&iacute; va&scaron;i Livewire komponentu do Va&scaron;&iacute; &scaron;ablony.
Uk&aacute;zka Laravel Livewire komponenty pro CRUD operace
Na&scaron;&iacute;m c&iacute;lem je v&scaron;ak vytvořit komponentu, kter&aacute; bude zpracov&aacute;vat data z tabulky "example_items", kterou jsme si vytvořili dle předchoz&iacute;ho n&aacute;vodu. Pojďme se tedy pod&iacute;vat, jak by mohl vypadat k&oacute;d ve tř&iacute;dě komponenty a v Blade &scaron;abloně.
Tř&iacute;da Livewire komponenty ("app/Http/Livewire/Examples")
&lt;?php

namespace App\Http\Livewire\Examples;

use App\Actions\Examples\ExampleItems\CreateExampleItemAction;
use App\Actions\Examples\ExampleItems\RemoveExampleItemAction;
use App\Actions\Examples\ExampleItems\UpdateExampleItemAction;
use App\Enums\Examples\ExampleItemType;
use App\Models\Examples\ExampleItem;
use Illuminate\Validation\Rules\Enum;
use Livewire\Component;
use Livewire\WithPagination;

class ExampleItemManager extends Component
{
    use WithPagination;

    public $q;
    public $sortBy = 'created_at';
    public $sortAsc = false;

    public $item;
    public $exampleItemTypes;

    public $confirmingItemDeletion = false;
    public $confirmingItemAdd = false;

    protected $queryString = [
        'q' =&gt; ['except' =&gt; ''],
        'sortBy' =&gt; ['except' =&gt; 'created_at'],
        'sortAsc' =&gt; ['except' =&gt; false],
    ];

    public function mount()
    {
        $this-&gt;exampleItemTypes = ExampleItemType::all();
    }

    public function render()
    {
        $items = ExampleItem::when($this-&gt;q, function($query) {
                return $query-&gt;where(function( $query) {
                    $query-&gt;where('title', 'like', '%' . $this-&gt;q . '%');
                });
            })
            -&gt;orderBy($this-&gt;sortBy, $this-&gt;sortAsc ? 'ASC' : 'DESC')
            -&gt;paginate(20);

        return view('livewire.examples.example-item-manager', [
            'items' =&gt; $items,
        ]);
    }

    public function updatingQ() 
    {
        $this-&gt;resetPage();
    }

    public function sortBy($field) 
    {
        if( $field == $this-&gt;sortBy) {
            $this-&gt;sortAsc = !$this-&gt;sortAsc;
        }
        $this-&gt;sortBy = $field;
    }

    public function confirmItemAdd() 
    {
        $this-&gt;reset(['item']);
        $this-&gt;confirmingItemAdd = true;
    }

    public function confirmItemEdit(ExampleItem $exampleItem) 
    {
        $this-&gt;resetErrorBag();
        $this-&gt;item = $exampleItem-&gt;toArray();
        $this-&gt;confirmingItemAdd = true;
    }

    public function saveItem() 
    {
        $validatedData = $this-&gt;validate([
            'item.title' =&gt; 'required|string|max:255',
            'item.body' =&gt; 'nullable|string',
            'item.is_active' =&gt; 'nullable|boolean',
            'item.type' =&gt; [
                'required',
                'string',
                'max:8',
                new Enum(ExampleItemType::class),
            ],
        ]);

        if(isset($this-&gt;item['id'])) {
            (new UpdateExampleItemAction())-&gt;execute(
                ExampleItem::find($this-&gt;item['id']),
                $validatedData['item']
            );

            $this-&gt;dispatchBrowserEvent('alert',[
                'type'=&gt;'success',
                'message'=&gt; __('Example Item was successfully updated.')
            ]);
        } else {
            (new CreateExampleItemAction())-&gt;execute($validatedData['item']);

            $this-&gt;dispatchBrowserEvent('alert',[
                'type'=&gt;'success',
                'message'=&gt; __('Example Item was successfully created.')
            ]);
        }

        $this-&gt;reset(['item']);
        $this-&gt;confirmingItemAdd = false;
    }

    public function confirmItemDeletion($id) 
    {
        $this-&gt;confirmingItemDeletion = $id;
    }

    public function deleteItem(ExampleItem $exampleItem) 
    {
        (new RemoveExampleItemAction())-&gt;execute($exampleItem);

        $this-&gt;confirmingItemDeletion = false;

        $this-&gt;dispatchBrowserEvent('alert',[
            'type'=&gt;'success',
            'message'=&gt; __('Example Item was successfully removed.')
        ]);
    }
}
Blade view pro Livewire komponentu ("resources/views/livewire/examples")
&lt;div class="p-4 border-b border-gray-200"&gt;

    &lt;div class="mt-2 text-2xl flex justify-between"&gt;
        &lt;div class="text-gray-900 dark:text-gray-100"&gt;{{ __('Example Item Manager') }}&lt;/div&gt; 
        &lt;div class="mr-2"&gt;
            &lt;x-button wire:click="confirmItemAdd" class="bg-blue-500 hover:bg-blue-700"&gt;
                {{ __('Add New Item') }}
            &lt;/x-button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="mt-6"&gt;
        &lt;div class="flex justify-between"&gt;
            &lt;div class=""&gt;
                &lt;input wire:model.debounce.500ms="q" type="search" placeholder="{{ __('Search') }}" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5  dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" /&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="flex flex-col"&gt;
            &lt;div class="overflow-x-auto sm:-mx-6 lg:-mx-8"&gt;
                &lt;div class="inline-block min-w-full py-2 sm:px-6 lg:px-8"&gt;
                    &lt;div class="overflow-hidden"&gt;
                        &lt;table class="min-w-full text-left text-sm font-light"&gt;
                            &lt;thead class="border-b font-medium dark:border-neutral-500 dark:text-gray-100"&gt;
                                &lt;tr&gt;
                                    &lt;th scope="col" class="px-6 py-4"&gt;
                                        &lt;div class="flex items-center"&gt;
                                            &lt;button wire:click="sortBy('id')"&gt;{{ __('ID') }}&lt;/button&gt;
                                            @if($sortBy=='id')
                                                @if($sortAsc)
                                                 &lt;span class="ml-2"&gt;&lt;i class="fas fa-sort-up"&gt;&lt;/i&gt;&lt;/span&gt;
                                                @else
                                                 &lt;span class="ml-2"&gt;&lt;i class="fas fa-sort-down"&gt;&lt;/i&gt;&lt;/span&gt;
                                                @endif
                                            @endif
                                        &lt;/div&gt;
                                    &lt;/th&gt;
                                    &lt;th scope="col" class="px-6 py-4"&gt;
                                        &lt;div class="flex items-center"&gt;
                                            &lt;button wire:click="sortBy('title')"&gt;{{ __('Title') }}&lt;/button&gt;
                                            @if($sortBy=='title')
                                                @if($sortAsc)
                                                 &lt;span class="ml-2"&gt;&lt;i class="fas fa-sort-up"&gt;&lt;/i&gt;&lt;/span&gt;
                                                @else
                                                 &lt;span class="ml-2"&gt;&lt;i class="fas fa-sort-down"&gt;&lt;/i&gt;&lt;/span&gt;
                                                @endif
                                            @endif
                                        &lt;/div&gt;
                                    &lt;/th&gt;
                                    &lt;th scope="col" class="px-6 py-4"&gt;
                                        &lt;div class="flex items-center"&gt;
                                            &lt;button wire:click="sortBy('is_active')"&gt;{{ __('Is active') }}&lt;/button&gt;
                                            @if($sortBy=='is_active')
                                                @if($sortAsc)
                                                 &lt;span class="ml-2"&gt;&lt;i class="fas fa-sort-up"&gt;&lt;/i&gt;&lt;/span&gt;
                                                @else
                                                 &lt;span class="ml-2"&gt;&lt;i class="fas fa-sort-down"&gt;&lt;/i&gt;&lt;/span&gt;
                                                @endif
                                            @endif
                                        &lt;/div&gt;
                                    &lt;/th&gt;
                                    &lt;th scope="col" class="px-6 py-4"&gt;
                                        &lt;div class="flex items-center"&gt;
                                            &lt;button wire:click="sortBy('type')"&gt;{{ __('Type') }}&lt;/button&gt;
                                            @if($sortBy=='type')
                                                @if($sortAsc)
                                                 &lt;span class="ml-2"&gt;&lt;i class="fas fa-sort-up"&gt;&lt;/i&gt;&lt;/span&gt;
                                                @else
                                                 &lt;span class="ml-2"&gt;&lt;i class="fas fa-sort-down"&gt;&lt;/i&gt;&lt;/span&gt;
                                                @endif
                                            @endif
                                        &lt;/div&gt;
                                    &lt;/th&gt;
                                    &lt;th scope="col" class="px-6 py-4"&gt;
                                        &lt;div class="flex items-center"&gt;
                                            &lt;button wire:click="sortBy('created_at')"&gt;{{ __('Created at') }}&lt;/button&gt;
                                            @if($sortBy=='created_at')
                                                @if($sortAsc)
                                                 &lt;span class="ml-2"&gt;&lt;i class="fas fa-sort-up"&gt;&lt;/i&gt;&lt;/span&gt;
                                                @else
                                                 &lt;span class="ml-2"&gt;&lt;i class="fas fa-sort-down"&gt;&lt;/i&gt;&lt;/span&gt;
                                                @endif
                                            @endif
                                        &lt;/div&gt;
                                    &lt;/th&gt;
                                    &lt;th scope="col" class="px-6 py-4"&gt;
                                        &lt;div class="flex items-center"&gt;
                                            &lt;button wire:click="sortBy('updated_at')"&gt;{{ __('Updated at') }}&lt;/button&gt;
                                            @if($sortBy=='updated_at')
                                                @if($sortAsc)
                                                 &lt;span class="ml-2"&gt;&lt;i class="fas fa-sort-up"&gt;&lt;/i&gt;&lt;/span&gt;
                                                @else
                                                 &lt;span class="ml-2"&gt;&lt;i class="fas fa-sort-down"&gt;&lt;/i&gt;&lt;/span&gt;
                                                @endif
                                            @endif
                                        &lt;/div&gt;
                                    &lt;/th&gt;
                                    &lt;th scope="col" class="px-6 py-4"&gt;
                                        {{ __('Actions') }}
                                    &lt;/th&gt;
                                &lt;/tr&gt;
                            &lt;/thead&gt;
                            &lt;tbody&gt;
                                @forelse($items as $item)
                                    &lt;tr class="border-b transition duration-300 ease-in-out dark:text-gray-100 hover:bg-neutral-100 dark:border-neutral-500 dark:hover:bg-neutral-600 dark:hover:text-gray-200"&gt;
                                        &lt;td class="whitespace-nowrap px-6 py-4 font-medium"&gt;{{ $item-&gt;id }}&lt;/td&gt;
                                        &lt;td class="whitespace-nowrap px-6 py-4"&gt;{{ $item-&gt;title }}&lt;/td&gt;
                                        &lt;td class="whitespace-nowrap px-6 py-4"&gt;{{ $item-&gt;is_active ? __('Yes') : __('No') }}&lt;/td&gt;
                                        &lt;td class="whitespace-nowrap px-6 py-4"&gt;{{ $item-&gt;type-&gt;value }}&lt;/td&gt;
                                        &lt;td class="whitespace-nowrap px-6 py-4"&gt;{{ $item-&gt;created_at-&gt;diffForHumans() }}&lt;/td&gt;
                                        &lt;td class="whitespace-nowrap px-6 py-4"&gt;{{ $item-&gt;updted_at?-&gt;diffForHumans() }}&lt;/td&gt;
                                        &lt;td class="whitespace-nowrap px-6 py-4"&gt;
                                            &lt;a href="{{ route('example-items.show', ['language' =&gt; app()-&gt;getLocale(), 'example_item' =&gt; $item-&gt;id]) }}" class="inline-flex items-center px-4 py-2 bg-gray-800 dark:bg-gray-200 border border-transparent rounded-md font-semibold text-xs text-white dark:text-gray-800 uppercase tracking-widest hover:bg-gray-700 dark:hover:bg-white focus:bg-gray-700 dark:focus:bg-white active:bg-gray-900 dark:active:bg-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 transition ease-in-out duration-150"&gt;
                                                {{ __('Show') }}
                                            &lt;/a&gt;
                                            &lt;x-button wire:click="confirmItemEdit( {{ $item-&gt;id }})" class="inline-flex items-center px-4 py-2 bg-gray-800 dark:bg-gray-200 border border-transparent rounded-md font-semibold text-xs text-white dark:text-gray-800 uppercase tracking-widest hover:bg-gray-700 dark:hover:bg-white focus:bg-gray-700 dark:focus:bg-white active:bg-gray-900 dark:active:bg-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 transition ease-in-out duration-150"&gt;
                                                {{ __('Edit') }}
                                            &lt;/x-button&gt;
                                            &lt;x-danger-button wire:click="confirmItemDeletion({{ $item-&gt;id }})" wire:loading.attr="disabled"&gt;
                                                {{ __('Delete') }}
                                            &lt;/x-danger-button&gt;
                                        &lt;/td&gt;
                                    &lt;/tr&gt;
                                @empty
                                    &lt;tr class="border-b transition duration-300 ease-in-out dark:text-gray-100 hover:bg-neutral-100 dark:border-neutral-500 dark:hover:bg-neutral-600 dark:hover:text-gray-200"&gt;
                                        &lt;td class="whitespace-nowrap px-6 py-4 font-medium"&gt;
                                            {{ __('No item found') }}
                                        &lt;/td&gt;
                                    &lt;/tr&gt;
                                @endforelse
                            &lt;/tbody&gt;
                        &lt;/table&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="mt-4"&gt;
        {{ $items-&gt;links() }}
    &lt;/div&gt;

    &lt;x-dialog-modal wire:model="confirmingItemAdd"&gt;
        &lt;x-slot name="title"&gt;
            {{ isset( $this-&gt;item['id']) ? 'Edit Item' : 'Add Item'}}
        &lt;/x-slot&gt;

        &lt;x-slot name="content"&gt;
            &lt;div class=""&gt;
                &lt;x-label for="title" value="{{ __('Title') }}" /&gt;
                &lt;x-input id="title" type="text" wire:model.defer="item.title" class="mt-2 bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" /&gt;
                &lt;x-input-error for="item.title" class="mt-2" /&gt;
            &lt;/div&gt;

            &lt;div class="mt-4"&gt;
                &lt;x-label for="body" value="{{ __('Body') }}" /&gt;
                &lt;textarea wire:model.defer="item.body"
                    id="body"
                    class="block mt-2 p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
                    rows="4"&gt;&lt;/textarea&gt;
                &lt;x-input-error for="item.body" class="mt-2" /&gt;
            &lt;/div&gt;

            &lt;div class="mt-4"&gt;
                &lt;div class="flex items-center justify-start"&gt;
                    &lt;x-input wire:model.defer="item.is_active" id="is-active" type="checkbox" value="" class="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 dark:focus:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600" /&gt;
                    &lt;x-label for="is-active" value="{{ __('Is active') }}" class="ml-2" /&gt;
                &lt;/div&gt;
                &lt;x-input-error for="item.is_active" class="mt-2" /&gt;
            &lt;/div&gt;

            &lt;div class="mt-4"&gt;
                &lt;x-label for="type" value="{{ __('Type') }}" /&gt;
                &lt;select wire:model.defer="item.type" id="type" class="mt-2 bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"&gt;
                    &lt;option selected&gt;{{ __('Choose a type') }}&lt;/option&gt;
                    @foreach ($exampleItemTypes as $exampleItemType)
                        &lt;option value="{{ $exampleItemType['value'] }}"&gt;
                            {{ $exampleItemType['name'] }}
                        &lt;/option&gt;
                    @endforeach
                &lt;/select&gt;
                &lt;x-input-error for="item.type" class="mt-2" /&gt;
            &lt;/div&gt;
        &lt;/x-slot&gt;

        &lt;x-slot name="footer"&gt;
            &lt;x-secondary-button wire:click="$set('confirmingItemAdd', false)" wire:loading.attr="disabled"&gt;
                {{ __('Nevermind') }}
            &lt;/x-secondary-button&gt;
 
            &lt;x-button class="ml-2 bg-blue-500 hover:bg-blue-700" wire:click="saveItem()" wire:loading.attr="disabled"&gt;
                {{ __('Save') }}
            &lt;/x-button&gt;
        &lt;/x-slot&gt;
    &lt;/x-dialog-modal&gt;

    &lt;x-confirmation-modal wire:model="confirmingItemDeletion"&gt;
        &lt;x-slot name="title"&gt;
            {{ __('Delete Item') }}
        &lt;/x-slot&gt;
 
        &lt;x-slot name="content"&gt;
            {{ __('Are you sure you want to delete Item? ') }}
        &lt;/x-slot&gt;
 
        &lt;x-slot name="footer"&gt;
            &lt;x-secondary-button wire:click="$set('confirmingItemDeletion', false)" wire:loading.attr="disabled"&gt;
                {{ __('Nevermind') }}
            &lt;/x-secondary-button&gt;
 
            &lt;x-danger-button class="ml-2" wire:click="deleteItem({{ $confirmingItemDeletion }})" wire:loading.attr="disabled"&gt;
                {{ __('Delete') }}
            &lt;/x-danger-button&gt;
        &lt;/x-slot&gt;
    &lt;/x-confirmation-modal&gt;
&lt;/div&gt;
Testov&aacute;n&iacute; Livewire komponenty
Testov&aacute;n&iacute; je kl&iacute;čovou souč&aacute;st&iacute; v&yacute;voje softwaru a Livewire nen&iacute; v&yacute;jimkou. Laravel poskytuje vynikaj&iacute;c&iacute; n&aacute;stroje pro testov&aacute;n&iacute;, kter&eacute; můžeme využ&iacute;t i při testov&aacute;n&iacute; na&scaron;ich Livewire komponent.
Pro testov&aacute;n&iacute; Livewire komponent můžeme využ&iacute;t Laravelov&yacute; testovac&iacute; framework PHPUnit. Laravel poskytuje metodu test(), kterou můžeme použ&iacute;t k vytvořen&iacute; testovac&iacute;ch př&iacute;padů pro na&scaron;e komponenty. Nicm&eacute;ně jelikož jsem z&aacute;stance jednoduchosti a m&aacute;m rad&scaron;i čitelněj&scaron;&iacute; k&oacute;d, využijeme bal&iacute;ček Pest (s využit&iacute;m pluginu pro Livewire). Po jeho instalaci může vypadat test komponenty n&aacute;sledovně:
&lt;?php

use App\Enums\Examples\ExampleItemType;
use App\Models\Examples\ExampleItem;
use Livewire\Livewire;

it('can render the livewire item manager component', function () {
    Livewire::test('examples.example-item-manager')
        -&gt;assertStatus(200);
});

it('can add new item', function () {
    Livewire::test('examples.example-item-manager')
        -&gt;set('item.title', 'Test item')
        -&gt;set('item.body', 'Test body')
        -&gt;set('item.is_active', true)
        -&gt;set('item.type', ExampleItemType::TYPE2-&gt;value)
        -&gt;call('saveItem')
        -&gt;assertSee('Test item');
});

it('can edit existing item', function () {
    $item = ExampleItem::factory()-&gt;create();

    Livewire::test('examples.example-item-manager')
        -&gt;call('confirmItemEdit', $item-&gt;id)
        -&gt;set('item.title', 'Test edit')
        -&gt;call('saveItem')
        -&gt;assertSee('Test edit');
});

it('can delete an existing item', function () {
    $item = ExampleItem::factory()-&gt;create();

    Livewire::test('examples.example-item-manager')
        -&gt;call('confirmItemDeletion', $item-&gt;id)
        -&gt;call('deleteItem', $item-&gt;id)
        -&gt;assertDontSee($item-&gt;title);
});

it('can search for items', function () {
    $item1 = ExampleItem::factory()-&gt;create(['title' =&gt; 'First Item']);
    $item2 = ExampleItem::factory()-&gt;create(['title' =&gt; 'Second Item']);

    Livewire::test('examples.example-item-manager')
        -&gt;set('q', 'First')
        -&gt;assertSee($item1-&gt;title)
        -&gt;assertDontSee($item2-&gt;title);
});

it('can sort items', function () {
    $item1 = ExampleItem::factory()-&gt;create(['title' =&gt; 'First Item']);
    $item2 = ExampleItem::factory()-&gt;create(['title' =&gt; 'Second Item']);

    $component = Livewire::test('examples.example-item-manager');

    // sorting is ascending
    $component-&gt;set('sortBy', 'title')-&gt;set('sortAsc', true)-&gt;call('render');
    $this-&gt;assertEquals([$item1-&gt;id, $item2-&gt;id], $component-&gt;viewData('items')-&gt;pluck('id')-&gt;toArray());

    // now sort descending
    $component-&gt;set('sortBy', 'title')-&gt;set('sortAsc', false)-&gt;call('render');
    $this-&gt;assertEquals([$item2-&gt;id, $item1-&gt;id], $component-&gt;viewData('items')-&gt;pluck('id')-&gt;toArray());
});
Testov&aacute;n&iacute; je nezbytn&eacute; pro zaji&scaron;těn&iacute; kvality na&scaron;eho k&oacute;du a pro ověřen&iacute;, že na&scaron;e aplikace funguje tak, jak m&aacute;. Laravel a Livewire poskytuj&iacute; v&scaron;echny n&aacute;stroje, kter&eacute; potřebujeme k vytvořen&iacute; robustn&iacute;ch a spolehliv&yacute;ch testů pro na&scaron;e aplikace.

Z&aacute;věrem
V tomto čl&aacute;nku jsme se podrobně pod&iacute;vali na to, jak vytvořit Livewire komponentu v Laravelu pro CRUD operace včetně testov&aacute;n&iacute;. Pro&scaron;li jsme si z&aacute;klady Laravelu a Livewire, vytvořili jsme Livewire komponentu, implementovali jsme CRUD operace a naučili jsme se, jak testovat na&scaron;i komponentu.
Důležit&eacute; body, kter&eacute; vych&aacute;z&iacute; z tohoto n&aacute;vodu, jsou:

Laravel a Livewire jsou siln&aacute; kombinace pro v&yacute;voj webov&yacute;ch aplikac&iacute;.
CRUD operace jsou z&aacute;kladn&iacute;mi operacemi, kter&eacute; můžeme prov&aacute;dět na na&scaron;ich datech.
Testov&aacute;n&iacute; je nezbytn&eacute; pro zaji&scaron;těn&iacute; kvality na&scaron;eho k&oacute;du a pro ověřen&iacute;, že na&scaron;e aplikace funguje tak, jak m&aacute;.

Douf&aacute;m, že tento n&aacute;vod v&aacute;m pomůže vytvořit sv&eacute; vlastn&iacute; Livewire komponenty a že v&aacute;s inspiruje k dal&scaron;&iacute;mu prozkoum&aacute;v&aacute;n&iacute; možnost&iacute;, kter&eacute; Laravel a Livewire nab&iacute;zej&iacute;.]]></content:encoded>
                
                                    <category><![CDATA[Laravel]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/30/30de7f39-26e1-4988-a210-9525688d63b2/conversions/laravel-livewire-crud-full.jpg" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Laravel CRUD]]></title>
                <link>https://www.pavelzanek.com/cs/blog/laravel-crud</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/laravel-crud</guid>
                <pubDate>Sat, 24 Jun 2023 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Naučte se, jak implementovat základní operace pro správu dat – Create, Read, Update a Delete – ve frameworku Laravel a jak je efektivně propojit s databází a uživatelským rozhraním.]]></description>
                
                                    <content:encoded><![CDATA[Co je CRUD?

CRUD je základním konceptem, který je nezbytný pro správu dat v jakékoli webové aplikaci. CRUD je akronym pro Create (Vytvořit), Read (Číst), Update (Aktualizovat) a Delete (Smazat). Tyto čtyři operace tvoří základní funkce, které jsou potřebné pro interakci s databází.

V Laravelu je práce s CRUD usnadněna díky jeho ORM (Object-Relational Mapping) nazývanému Eloquent. Eloquent umožňuje vývojářům pracovat s databázovými tabulkami jako s objekty a poskytuje jednoduché rozhraní (dalo by se říci API) pro běžné databázové operace.

Vytváření (Create) se v Laravelu provádí pomocí metody create(), která vytvoří nový záznam v databázi. Čtení (Read) se provádí pomocí metod jako get(), all(), find() apod., které načtou záznamy z databáze. Aktualizace (Update) se provádí pomocí metody update(), která upraví existující záznam v databázi. A nakonec, mazání (Delete) se provádí pomocí metody delete(), která odstraní záznam z databáze.

Úvod k naší ukázce

Představte si, že chceme vytvořit model ExampleItem, který bude obsahovat tyto atributy:


title (string)
body (string / text)
is_active (boolean)
type (string)


Předpokladem je mít nainstalovaný framework Laravel. Jelikož jsem testoval tento kód na již upravené aplikaci, navíc zde najdete lokalilizaci aplikace a omezení přístupu pouze uživateli s rolí superadmin.

Struktura souborů je přizpůsobena pro ukázku, tedy kromě názvu souborů uvádím i složku, ve které se daný soubor nachází. Nicméně použití je pouze na Vás, strukturu si můžete upravit dle svých potřeb.

V rámci testování je pak použit balíček Pest.

Vytvoření migrace

Migrace v Laravelu jsou jako verzovací systém pro vaši databázi. Umožňují vám měnit strukturu databáze pomocí PHP kódu místo ručního psaní SQL. Migrace jsou také skvělým nástrojem pro sdílení a aktualizaci databázové struktury mezi členy týmu.

Vytvoření migrace v Laravelu je jednoduché díky příkazu Artisan. Příkaz "php artisan make:migration" vytvoří nový soubor migrace v adresáři "database/migrations". Název souboru obsahuje datum a čas vytvoření, což Laravelu umožňuje určit, v jakém pořadí by měly být migrace spuštěny.

Každý soubor migrace obsahuje dvě metody: "up" a "down". Metoda "up" je použita k přidání nových tabulek, sloupců nebo indexů do vaší databáze. Metoda "down" by měla provést opačné operace k těm, které jsou provedeny v metodě "up".

Po vytvoření migrace můžete migraci spustit pomocí příkazu "php artisan migrate". Tento příkaz spustí všechny dosud nespustěné migrace v pořadí, v jakém byly vytvořeny.

Migrace (database/migrations):

[full migration PHP code as fetched above]

Vytvoření modelu

Modely jsou jedním z klíčových aspektů frameworku. Jsou to reprezentace databázových tabulek a umožňují vám pracovat s databázovými záznamy jako s objekty. To znamená, že můžete provádět CRUD operace na svých modelech, aniž byste museli psát SQL.

Vytvoření modelu v Laravelu je jednoduché. Použijete Artisan příkaz "php artisan make:model", který vytvoří nový model v adresáři "app/Models". Název modelu by měl být v jednotném čísle a začínat velkým písmenem.

Každý model v Laravelu rozšiřuje třídu "Illuminate\\Database\\Eloquent\\Model" a obsahuje metody, které umožňují interakci s databází. Můžete také definovat vlastní metody a vlastnosti na svých modelech.

Modely také obsahují tzv. Eloquent vztahy, které umožňují definovat vztahy mezi různými modely. Například, pokud máte model "User" a model "Post", můžete definovat vztah, který říká, že jeden uživatel může mít mnoho příspěvků.

Model "ExampleItem" (app\\Models\\Examples):

[full model PHP code as fetched above]

Vytváření akcí

V Laravelu můžete akce definovat jako samostatné třídy, které zastupují jednotlivé operace, které vaše aplikace může provést. Toto je alternativní přístup k tradičnímu modelu, kde jsou akce definovány jako metody v kontrolerech.

Vytvoření akce jako samostatného souboru v Laravelu je jednoduché. Nejprve musíte vytvořit novou třídu v adresáři "app/Actions". Třída například může mít metodu "execute()", která provede požadovanou operaci.

Tento přístup má několik výhod. Jedním z nich je, že vaše akce jsou dobře izolované, snadno rozšiřitelné a testovatelné. Každá akce má jasně definovanou odpovědnost a je snadné ji testovat nezávisle na ostatních částech vaší aplikace.

[CreateExampleItemAction, UpdateExampleItemAction, RemoveExampleItemAction code as fully fetched above]

Vytvoření Enum

Vytváření enumerátorů (Enums) v Laravelu je silný způsob, jak definovat typ proměnné, který umožňuje mnoho různých, ale specifických hodnot. Tato funkce je obzvláště užitečná, když chcete omezit možnosti hodnoty proměnné tak, aby obsahovala pouze hodnotu z konkrétní sady. V Laravelu nejsou enumerátory vestavěné, ale lze je snadno implementovat pomocí tříd PHP.

Vytváření enumerátorů v Laravelu může být skvělý způsob, jak zpřehlednit a udržovat váš kód, zejména při práci s proměnnými, které by měly mít pouze specifickou sadu hodnot. Mohou být použity v různých částech vaší aplikace Laravel, například v modelech, kontrolerech a dokonce i ve vašich databázových migracích.

Kromě toho, že váš kód je čistší a snadněji pochopitelný, enumerátory také pomáhají snižovat chyby ve vašem kódu. Omezením možných hodnot proměnné můžete zajistit, že bude vždy obsahovat hodnotu, kterou má, čímž se snižuje pravděpodobnost, že neočekávané hodnoty způsobí chyby ve vašem kódu.

Pamatujte, že enumerátory jsou jen jednou z mnoha pokročilých funkcí, které Laravel nabízí, aby usnadnil vaše vývojářské práce v PHP. Ať už vytváříte malý osobní projekt nebo velkou podnikovou aplikaci, Laravel má nástroje a funkce, které potřebujete k vytvoření robustních, škálovatelných a udržitelných PHP aplikací.

"ExampleItemType" Enum (app\\Enums\\Examples):

[full enum PHP code as fetched above]

Vytvoření validace / validačních requestů

[Czech content as fully fetched above, including StoreExampleItemRequest and UpdateExampleItemRequest code]

Vytvoření kontroleru

[Czech content as fully fetched above, including full ExampleItemController code]

Vytvoření šablony

[Czech content as fully fetched above, including Index, Create, Edit, Show Blade template code]

Trasování (routing)

[Czech content as fully fetched above, including routing code]

Vytvoření továrny

[Czech content as fully fetched above, including ExampleItemFactory code]

Vytvoření testů

[Czech content as fully fetched above, including controller and action test code]

Závěr

V tomto návodu jsme se podrobně seznámili s procesem vytváření CRUD operací v Laravelu. Prošli jsme si všechny klíčové kroky, od vytváření migrací a modelů, přes definování akcí a validačních requestů, až po vytváření šablon, továren a testů. Doufám, že Vám tento návod pomohl pochopit, jak pracovat s Laravelem a že Vám poskytl pevný základ pro další vývoj Vašich vlastních aplikací.]]></content:encoded>
                
                                    <category><![CDATA[Laravel]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/02/0259a2c3-ce08-4aaf-bafb-408abf6f2386/conversions/laravel-crud-full.png" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[ChatGPT Browse with Bing: Od SEO k AI optimalizaci]]></title>
                <link>https://www.pavelzanek.com/cs/blog/seo-ai-optimization-chatgpt-browse-with-bing</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/seo-ai-optimization-chatgpt-browse-with-bing</guid>
                <pubDate>Thu, 22 Jun 2023 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Článek zkoumá schopnost ChatGPT &quot;číst&quot; weby pomocí &quot;Browse with Bing&quot; a důležitost přechodu od SEO k AI optimalizaci pro weby.]]></description>
                
                                    <content:encoded><![CDATA[V&iacute;tejte v nov&eacute;m světě, kde se uměl&aacute; inteligence st&aacute;v&aacute; st&aacute;le pokročilej&scaron;&iacute; a přin&aacute;&scaron;&iacute; n&aacute;m neomezen&eacute; možnosti. Jedn&iacute;m z těchto vzru&scaron;uj&iacute;c&iacute;ch v&yacute;vojů je ChatGPT, model uměl&eacute; inteligence vyvinut&yacute; společnost&iacute; OpenAI. Ale co když v&aacute;m řeknu, že ChatGPT může nyn&iacute; "č&iacute;st" va&scaron;i webovou str&aacute;nku pomoc&iacute; funkce nazvan&eacute; "Browse with Bing"? Ano, sly&scaron;&iacute;te spr&aacute;vně. Tento čl&aacute;nek se podrobně zab&yacute;v&aacute; touto fascinuj&iacute;c&iacute; funkc&iacute; a jak může změnit způsob, jak&yacute;m interagujeme s internetem a jak budeme přizpůsobovat SEO na webu tak, aby jednou z možn&yacute;ch odpověd&iacute; v ChatGPT byly odkazy na Va&scaron;e webov&eacute; str&aacute;nky.
ChatGPT je pokročil&yacute; chatbot, kter&yacute; využ&iacute;v&aacute; model jazyka GPT (Generative Pretrained Transformer) k vytv&aacute;řen&iacute; přesvědčiv&yacute;ch textů. Od sv&eacute;ho uveden&iacute; na trh se stal jedn&iacute;m z nejpopul&aacute;rněj&scaron;&iacute;ch n&aacute;strojů pro generov&aacute;n&iacute; textu, a to d&iacute;ky sv&eacute; schopnosti vytv&aacute;řet přirozeně zněj&iacute;c&iacute; odpovědi na různ&eacute; dotazy. O ChatGPT si můžete přeč&iacute;st v&iacute;ce informac&iacute; v jednom ze star&scaron;&iacute;ch čl&aacute;nků, kter&eacute; jsem pro V&aacute;s připravil.
Nyn&iacute;, s př&iacute;chodem funkce "Browse with Bing", se schopnosti ChatGPT je&scaron;tě v&iacute;ce roz&scaron;iřuj&iacute;. "Browse with Bing" je funkce, kter&aacute; umožňuje ChatGPT přistupovat k informac&iacute;m na webu v re&aacute;ln&eacute;m čase. To znamen&aacute;, že ChatGPT může nyn&iacute; poskytnout aktu&aacute;ln&iacute; a relevantn&iacute; odpovědi na va&scaron;e dotazy t&iacute;m, že "prohl&iacute;ž&iacute;" internet.
Co je funkce "Browse with Bing"?
Funkce "Browse with Bing" je inovativn&iacute; n&aacute;stroj (prozat&iacute;m u t&eacute;to funkce je zobrazen v ChatGPT &scaron;t&iacute;tek, že se jedn&aacute; o Beta verzi), kter&yacute; byl ned&aacute;vno představen jako souč&aacute;st ChatGPT. Tato funkce umožňuje ChatGPT přistupovat k internetu v re&aacute;ln&eacute;m čase a poskytovat aktu&aacute;ln&iacute; a relevantn&iacute; odpovědi na dotazy uživatelů. Ale jak přesně to funguje?
"Browse with Bing" je v podstatě plugin, kter&yacute; propojuje ChatGPT s vyhled&aacute;vačem Bing. Když uživatel zad&aacute; dotaz, ChatGPT použije Bing k vyhled&aacute;n&iacute; relevantn&iacute;ch informac&iacute; na webu/internetu.
Jednou z kl&iacute;čov&yacute;ch v&yacute;hod funkce "Browse with Bing" je jej&iacute; schopnost poskytnout aktu&aacute;ln&iacute; informace. Zat&iacute;mco ChatGPT je tr&eacute;nov&aacute;n na statick&eacute;m datasetu, kter&yacute; je aktualizov&aacute;n jen občas, "Browse with Bing" umožňuje ChatGPT přistupovat k nejnověj&scaron;&iacute;m informac&iacute;m na webu. To znamen&aacute;, že může poskytnout odpovědi na ot&aacute;zky o aktu&aacute;ln&iacute;ch ud&aacute;lostech, nov&yacute;ch v&yacute;zkumech a dal&scaron;&iacute;ch t&eacute;matech, kter&eacute; se rychle měn&iacute;.
"Browse with Bing" je tak&eacute; velmi flexibiln&iacute;. Může b&yacute;t použit pro &scaron;irokou &scaron;k&aacute;lu dotazů, od jednoduch&yacute;ch faktick&yacute;ch ot&aacute;zek až po složit&eacute; dotazy. Ať už potřebujete zjistit aktu&aacute;ln&iacute; počas&iacute;, naj&iacute;t nejnověj&scaron;&iacute; v&yacute;zkum v určit&eacute; oblasti nebo z&iacute;skat informace o konkr&eacute;tn&iacute;m produktu, "Browse with Bing" v&aacute;m může pomoci naj&iacute;t odpovědi.
Jak ChatGPT čte webov&eacute; str&aacute;nky pomoc&iacute; funkce "Browse with Bing"?
Proces, jak&yacute;m ChatGPT "čte" webov&eacute; str&aacute;nky pomoc&iacute; funkce "Browse with Bing", je fascinuj&iacute;c&iacute; kombinac&iacute; pokročil&yacute;ch technologi&iacute;. Tento proces zač&iacute;n&aacute;, když uživatel zad&aacute; dotaz. ChatGPT pak použije Bing k vyhled&aacute;n&iacute; relevantn&iacute;ch informac&iacute; na webu. Toto vyhled&aacute;v&aacute;n&iacute; je provedeno v re&aacute;ln&eacute;m čase, což znamen&aacute;, že informace, kter&eacute; ChatGPT poskytuje, jsou aktu&aacute;ln&iacute; a relevantn&iacute;.
Jakmile Bing najde odpov&iacute;daj&iacute;c&iacute; webov&eacute; str&aacute;nky, ChatGPT čte tyto str&aacute;nky t&iacute;m, že analyzuje jejich obsah a extrahuje z nich kl&iacute;čov&eacute; informace. Tento proces je možn&yacute; d&iacute;ky sofistikovan&yacute;m algoritmům pro zpracov&aacute;n&iacute; přirozen&eacute;ho jazyka, kter&eacute; ChatGPT použ&iacute;v&aacute;. Tyto algoritmy umožňuj&iacute; ChatGPT porozumět textu na webov&yacute;ch str&aacute;nk&aacute;ch stejně dobře, jako by to byl člověk.
Po extrakci kl&iacute;čov&yacute;ch informac&iacute; ChatGPT tyto informace zpracuje a vytvoř&iacute; odpověď na dotaz uživatele. Tato odpověď je pak zobrazena uživateli. Cel&yacute; tento proces se odehr&aacute;v&aacute; během několika sekund, což znamen&aacute;, že uživatel&eacute; mohou z&iacute;skat odpovědi na sv&eacute; dotazy t&eacute;měř okamžitě. U odpověd&iacute; si můžete v&scaron;imnout odkazů, ze kter&yacute;ch ChatGPT, resp. tato funkce čerpala:

Je důležit&eacute; poznamenat, že ačkoli ChatGPT proch&aacute;z&iacute; webov&eacute; str&aacute;nky, neukl&aacute;d&aacute; ž&aacute;dn&eacute; informace z těchto str&aacute;nek. Jakmile je odpověď na dotaz uživatele vygenerov&aacute;na, ve&scaron;ker&eacute; informace z&iacute;skan&eacute; z webov&yacute;ch str&aacute;nek jsou zahozeny. To znamen&aacute;, že ChatGPT respektuje soukrom&iacute; uživatelů a neukl&aacute;d&aacute; ž&aacute;dn&eacute; osobn&iacute; &uacute;daje.
SEO a ChatGPT s Browse with Bing
V oblasti webov&eacute;ho v&yacute;voje a marketingu jsme svědky fascinuj&iacute;c&iacute;ho posunu. Dř&iacute;ve jsme se zaměřovali na optimalizaci pro vyhled&aacute;vače (SEO), nyn&iacute; v&scaron;ak nast&aacute;v&aacute; &eacute;ra, kdy je potřeba optimalizovat webov&eacute; str&aacute;nky pro umělou inteligenci. Tento posun je důsledkem rychl&eacute;ho v&yacute;voje technologi&iacute; a rostouc&iacute;ho vlivu uměl&eacute; inteligence na na&scaron;e každodenn&iacute; životy.
V minulosti byla optimalizace pro vyhled&aacute;vače (SEO) kl&iacute;čovou strategi&iacute; pro zv&yacute;&scaron;en&iacute; viditelnosti webov&yacute;ch str&aacute;nek. SEO se zaměřuje na využit&iacute; kl&iacute;čov&yacute;ch slov, kvalitn&iacute;ho obsahu a dal&scaron;&iacute;ch technik pro zlep&scaron;en&iacute; pozic ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;, jako je Google. Tato praxe je st&aacute;le důležit&aacute;, ale s n&aacute;stupem uměl&eacute; inteligence se měn&iacute; pravidla hry.
Uměl&aacute; inteligence (AI) je schopna analyzovat a zpracov&aacute;vat obrovsk&eacute; množstv&iacute; dat rychleji a efektivněji než jak&yacute;koli člověk. To umožňuje AI poskytnout přesněj&scaron;&iacute; a personalizovaněj&scaron;&iacute; z&aacute;žitky pro uživatele. Např&iacute;klad AI může analyzovat chov&aacute;n&iacute; uživatele na webu, jeho z&aacute;jmy a preference a na z&aacute;kladě těchto informac&iacute; doporučit relevantn&iacute; obsah nebo produkty.
Proto je nyn&iacute; důležit&eacute; optimalizovat webov&eacute; str&aacute;nky pro umělou inteligenci. To znamen&aacute; vytv&aacute;řet webov&eacute; str&aacute;nky, kter&eacute; jsou př&aacute;telsk&eacute; k AI, což zahrnuje jasn&eacute; a strukturovan&eacute; informace, kter&eacute; mohou b&yacute;t snadno zpracov&aacute;ny AI, a vytv&aacute;řen&iacute; obsahu, kter&yacute; je relevantn&iacute; a užitečn&yacute; pro uživatele.
Optimalizace webov&yacute;ch str&aacute;nek pro AI může zahrnovat různ&eacute; techniky, včetně využit&iacute; AI n&aacute;strojů pro anal&yacute;zu a zlep&scaron;en&iacute; obsahu, využit&iacute; AI pro personalizaci uživatelsk&eacute; zku&scaron;enosti, využit&iacute; AI pro anal&yacute;zu a zlep&scaron;en&iacute; SEO strategi&iacute; a mnoho dal&scaron;&iacute;ho.
V&yacute;voj technologi&iacute; a rostouc&iacute; vliv uměl&eacute; inteligence na webov&yacute; v&yacute;voj a marketing představuj&iacute; vzru&scaron;uj&iacute;c&iacute; nov&eacute; možnosti. Jak se technologie d&aacute;le vyv&iacute;jej&iacute;, je jasn&eacute;, že optimalizace webov&yacute;ch str&aacute;nek pro AI bude hr&aacute;t st&aacute;le důležitěj&scaron;&iacute; roli v budoucnosti webov&eacute;ho v&yacute;voje a marketingu.
Jak zjistit, zda byl ChatGPT s využit&iacute;m funkce "Browse with Bing" proj&iacute;t Va&scaron;e webov&eacute; str&aacute;nky?
Pojďme se tedy pod&iacute;vat na men&scaron;&iacute; n&aacute;vod, jak si ověřit, že je ChatGPT s funkc&iacute; Browse with Bing proj&iacute;t Va&scaron;e webov&eacute; str&aacute;nky. Způsob, jak&yacute;m toto zjistit, je velmi prost&yacute;. Stač&iacute; využ&iacute;t tuto funkci a zeptat se na konkr&eacute;tn&iacute; URL, kter&aacute; n&aacute;s zaj&iacute;m&aacute;. Nejdř&iacute;ve si v&scaron;ak ukažme, co ChatGPT může zobrazit, pokud nen&iacute; schopen (respektive funkce Browse with Bing) webov&eacute; str&aacute;nky proch&aacute;zet:

Jak si můžete v&scaron;imnout, pokud algoritmus nen&iacute; schopen webov&eacute; str&aacute;nky proch&aacute;zet, uvid&iacute;me "Reading content failed".
Nyn&iacute; se pod&iacute;vejte, jak zjistit, zda je ChatGPT proch&aacute;zet Va&scaron;e webov&eacute; str&aacute;nky. Pro uk&aacute;zku použiji tento osobn&iacute; blog.

Jak můžete vidět, anal&yacute;za webov&yacute;ch str&aacute;nek je snadn&aacute;. Tento proces je v&scaron;ak manu&aacute;ln&iacute;. Mysl&iacute;m, že je ot&aacute;zkou času, kdy vzniknou n&aacute;stroje, kter&yacute; tento proces budou dělat automatizovaně.
Z&aacute;věr
Jak jsme se v tomto čl&aacute;nku dozvěděli, ChatGPT a funkce "Browse with Bing" představuj&iacute; průlom v oblasti uměl&eacute; inteligence a internetov&eacute;ho prohl&iacute;žen&iacute;. D&iacute;ky schopnosti ChatGPT "č&iacute;st" webov&eacute; str&aacute;nky v re&aacute;ln&eacute;m čase můžeme z&iacute;skat aktu&aacute;ln&iacute; a relevantn&iacute; odpovědi na na&scaron;e dotazy rychleji a efektivněji než kdy dř&iacute;ve.
Tato technologie m&aacute; obrovsk&yacute; potenci&aacute;l pro budoucnost. S rozvojem uměl&eacute; inteligence a strojov&eacute;ho učen&iacute; můžeme oček&aacute;vat, že schopnosti ChatGPT a "Browse with Bing" se budou d&aacute;le rozv&iacute;jet a zlep&scaron;ovat. To by mohlo v&eacute;st k je&scaron;tě rychlej&scaron;&iacute;m a přesněj&scaron;&iacute;m vyhled&aacute;v&aacute;n&iacute; informac&iacute; na internetu, což by n&aacute;m mohlo pomoci l&eacute;pe porozumět světu kolem n&aacute;s.
V z&aacute;věru bych V&aacute;m chtěl poděkovat za v&aacute;&scaron; z&aacute;jem o toto fascinuj&iacute;c&iacute; t&eacute;ma. Douf&aacute;m, že V&aacute;m tento čl&aacute;nek poskytl užitečn&eacute; a zaj&iacute;mav&eacute; informace o ChatGPT a funkci "Browse with Bing". Tomuto t&eacute;matu se nad&aacute;le budu věnovat a čl&aacute;nek budu doplňovat o nov&eacute; informace. Pokud m&aacute;te jak&eacute;koliv připom&iacute;nky, bez obav mi napi&scaron;te. Tě&scaron;&iacute;m se na dal&scaron;&iacute; průzkum světa uměl&eacute; inteligence a SEO př&iacute;mo s v&aacute;mi!]]></content:encoded>
                
                                    <category><![CDATA[Umělá inteligence]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/89/896f4c93-d457-4e30-b5d2-668db8f77f7a/conversions/seo-chatgpt-browse-with-bing-full.jpg" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Jak vytvořit newsletter systém v Laravelu]]></title>
                <link>https://www.pavelzanek.com/cs/blog/laravel-newsletter</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/laravel-newsletter</guid>
                <pubDate>Wed, 21 Jun 2023 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Naučte se, jak od základu vytvořit newsletter systém v Laravelu. Tento komplexní průvodce pokrývá vše od vytvoření předplatného až po odesílání e-mailů.]]></description>
                
                                    <content:encoded><![CDATA[Jak efektivně vytvořit systém pro přihlášení k newsletteru v Laravelu: od základů až po testování

Článek poskytuje komplexní průvodce vytvářením systému pro přihlášení k odběru novinek v Laravelu. Seznámíte se s tvorbou databázových modelů, e-mailových šablon, překladů a testováním pomocí Pest.

Vítejte v tomto rozsáhlém průvodci, kde se podíváme na to, jak efektivně vytvořit systém pro přihlášení k newsletteru v Laravelu. Laravel je silný a flexibilní framework pro PHP, který se hodí pro širokou škálu aplikací, včetně tvorby funkčního a přizpůsobivého newsletteru.

V dnešní době jsou newslettery jedním z nejdůležitějších nástrojů pro komunikaci se zákazníky nebo uživateli webové stránky. Ať už poskytujete informace o novinkách, vzdělávacích materiálech nebo speciálních nabídkách, je důležité, aby Váš systém pro odběr newsletteru byl snadno použitelný a efektivní.

Tento průvodce vás provede celým procesem vytváření takového systému v Laravelu, od základní přípravy databázové továrny, přes vytváření šablony pro email a Livewire komponenty, až po nastavení trasování. V neposlední řadě se podíváme na důležitost překladů a internacionalizaci a na to, jak toho v Laravelu docílit.

Samozřejmě, jakýkoliv vývoj by měl být doprovázen kvalitním testováním, a tak se také zaměříme na to, jak napsat efektivní testy pomocí nástroje Pest.

Pojďme tedy na to a zjistěte, jak vytvořit skvělý systém pro přihlášení k newsletteru v Laravelu!

Příprava databázové továrny

Pro práci s daty v Laravelu je jednou z nezbytných předpokladů příprava databázové továrny, která nám poskytne rámec pro manipulaci s daty a umožní nám efektivně a bezpečně pracovat s naší databází.

V rámci tohoto průvodce budeme pracovat s jedním konkrétním modelem - NewsletterUser. Tento model bude reprezentovat jednotlivé uživatele, kteří se přihlásí k odběru našeho newsletteru.

Prvním krokem je vytvoření továrny pro náš model. Sice tento postup není obvyklý, nabídne Vám ale lepší představu o tom, co bude model obsahovat. Továrna nám umožní generovat testovací data pro naše účely. Pomocí ní budeme moci snadno vytvářet instance našeho modelu NewsletterUser s náhodně generovanými daty, což se nám při zavěrečném testování bude hodit.

V Laravelu je tvorba továrny velmi jednoduchá. Stačí použít Artisan příkaz make:factory, který automaticky vygeneruje kostru továrny pro náš model.

php artisan make:factory NewsletterUserFactory --model=NewsletterUser

Tím vytvoříme novou třídu NewsletterUserFactory, kterou následně upravíme pro naše potřeby. V našem případě bude třeba nastavit alespoň následující atributy: email, language, verification_token a is_verified.

Výsledná třída by mohla vypadat následovně:

&lt;?php

namespace Database\Factories\Newsletter;

use App\Enums\Newsletter\NewsletterLanguage;
use App\Models\Newsletter\NewsletterUser;
use Illuminate\Database\Eloquent\Factories\Factory;

class NewsletterUserFactory extends Factory
{
    protected $model = NewsletterUser::class;

    public function definition()
    {
        return [
            'email' => $this->faker->email(),
            'language' => NewsletterLanguage::ENGLISH,
            'is_verified' => false,
        ];
    }
}

Tato továrna nám nyní umožní vytvářet testovací instance našeho modelu NewsletterUser s náhodnými daty. To se nám bude hodit při dalším vývoji a testování našeho systému pro přihlášení k newsletteru.

Migrace databáze

Migrace je klíčová součást Laravelu, která nám umožňuje vytvořit strukturu naší databáze přímo z našeho kódu. Vytvořme tedy migraci pomocí artisan příkazu:

php artisan make:migration create_newsletter_users_table

V našem případě jsme vytvořili migraci pro model NewsletterUser, který obsahuje všechny nezbytné informace pro správu odběratelů newsletteru, jako je email, jazyk a stav ověření.

&lt;?php

use App\Enums\Newsletter\NewsletterLanguage;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('newsletter_users', function (Blueprint $table) {
            $table->id();
            $table->string('email', 128)->unique();
            $table->string('language', 6)->default(NewsletterLanguage::ENGLISH->value);
            $table->boolean('is_verified')->default(false);
            $table->string('verification_token', 60)->nullable();
            $table->timestamps();
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('newsletter_users');
    }
};

Díky migraci můžeme snadno vytvářet, modifikovat i mazat tabulky v databázi, což je velmi užitečné při vývoji aplikace a distribuci mezi různými prostředími. Navíc, Laravel automaticky sleduje, jaké migrace již byly aplikovány, takže nemusíme řešit jejich opakované spouštění.

Vytvoření šablony pro email

Když uživatel zadá svůj email a vybere preferovaný jazyk newsletteru, potřebujeme mu poslat ověřovací email. Ten obsahuje ověřovací odkaz, na který musí uživatel kliknout pro ověření svého emailu. Pro tento účel budeme potřebovat vytvořit emailovou šablonu.

Laravel opět nabízí velmi pohodlnou práci s emailovými šablonami. Začneme tím, že vytvoříme novou třídu pro naši emailovou notifikaci pomocí Artisan příkazu:

php artisan make:mail NewsletterVerificationMail --markdown=emails.newsletter-verification

Tímto příkazem jsme vytvořili novou třídu NewsletterVerificationMail a zároveň jsme Laravelu řekli, že chceme použít markdown formát pro vytvoření naší emailové šablony. Laravel za nás automaticky vytvořil soubor pro tuto šablonu v adresáři resources/views/emails.

Nyní můžeme tuto šablonu upravit podle našich potřeb. V našem případě si pro ukázku potřebujeme v emailu zobrazit několik informací:


Uvítací zprávu
Ověřovací odkaz
Tlačítko pro přesměrování na naši webovou stránku


Výsledná šablona by mohla vypadat následovně:

&lt;x-mail::message&gt;
# {{ __('template.newsletter-email-verification-headline') }}

{{ __('template.newsletter-email-verification-description') }}
 
&lt;x-mail::button :url="$signedUrl"&gt;
    {{ __('template.newsletter-email-verification-verify-button') }}
&lt;/x-mail::button&gt;

&lt;x-mail::button :url="$homepageUrl"&gt;
    {{ __('template.newsletter-email-verification-homepage-button') }}
&lt;/x-mail::button&gt;
 
{{ __('template.newsletter-email-verification-thanks') }},&lt;br&gt;
{{ config('app.name') }}
&lt;/x-mail::message&gt;

V této šabloně jsme použili Laravelovské komponenty mail::message a mail::button, které nám umožňují snadno vytvořit strukturu našeho emailu. Texty jsou načítány z překladových souborů, takže můžeme snadno přepínat mezi různými jazyky podle toho, jaký jazyk si uživatel zvolil.

Nakonec je třeba tuto šablonu použít v naší třídě NewsletterVerificationMail:

&lt;?php

namespace App\Mail\App\Guest\Newsletter;

use App\Models\Newsletter\NewsletterUser;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\URL;

class NewsletterVerificationMail extends Mailable
{
    use Queueable, SerializesModels;

    public NewsletterUser $newsletterUser;

    public function __construct(NewsletterUser $newsletterUser)
    {
        $this->newsletterUser = $newsletterUser;
    }

    /**
     * Get the message envelope.
     */
    public function envelope(): Envelope
    {
        return new Envelope(
            subject: __('template.newsletter-email-verification-subject') . ' | PavelZanek.com',
        );
    }

    /**
     * Get the message content definition.
     *
     * @return \Illuminate\Mail\Mailables\Content
     */
    public function content()
    {
        $signedUrl = URL::signedRoute('newsletter.verify-user', [
            'language' => $this->newsletterUser->language,
            'token' => $this->newsletterUser->verification_token
        ]);

        return new Content(
            markdown: 'emails.app.guest.newsletter.verification-mail',
            with: [
                'newsletterUser' => $this->newsletterUser,
                'signedUrl' => $signedUrl,
                'homepageUrl' => route('homepage', ['language' => 'en']),
            ],
        );
    }
}

Zde není potřeba detailněji rozebírat ukázku kódu, využijeme poskytnutá data a nastavíme předmět emailu.

Vytvoření Livewire komponenty

Livewire je vynikající nástroj pro tvorbu dynamických komponent v Laravelu, který umožňuje snadno spojit JavaScript a PHP. Jeho hlavní výhodou je, že nevyžaduje znalost JavaScriptu a vše můžeme řešit přímo v PHP.

V našem případě využijeme Livewire komponentu pro tvorbu formuláře pro přihlášení k odběru newsletteru.

Nejdříve vytvoříme novou Livewire komponentu pomocí Artisan příkazu:

php artisan make:livewire NewSubscriberForm

Tímto vytvoříme dva nové soubory - NewSubscriberForm.php a new-subscriber-form.blade.php. První je třída, kde definujeme logiku komponenty. Druhá je šablona, která popisuje, jak komponenta vypadá.

V NewSubscriberForm.php třídě definujeme dva veřejné atributy - $email a $language, které představují hodnoty zadané uživatelem v našem formuláři. Dále zde musíme vytvořit metodu subscribe(), která se zavolá po odeslání formuláře.

&lt;?php

namespace App\Http\Livewire\Guest\Newsletter;

use App\Actions\Guest\Newsletter\CreateNewsletterUserAction;
use App\Enums\Newsletter\NewsletterLanguage;
use App\Mail\App\Guest\Newsletter\NewsletterVerificationMail;
use Illuminate\Support\Facades\Mail;
use Illuminate\Validation\Rules\Enum;
use Livewire\Component;

class NewSubscriberForm extends Component
{
    public string $email = '';
    public string $language = '';

    public function render()
    {
        return view('livewire.guest.newsletter.subscription-form');
    }

    public function subscribe()
    {
        $validatedData = $this->validate([
            'email' => 'required|email|max:128|unique:newsletter_users,email',
            'language' => [
                'required',
                'string',
                'max:6',
                new Enum(NewsletterLanguage::class),
            ],
        ]);

        $newsletterUser = (new CreateNewsletterUserAction())->execute($validatedData);

        // Send verification email
        Mail::to($this->email)
            ->locale($this->language)
            ->send(new NewsletterVerificationMail($newsletterUser));

        $this->reset('email');

        $this->dispatchBrowserEvent('alert',[
            'type'=> 'success',
            'message'=> __('template.newsletter-waiting-for-validation')
        ]);
    }
}

V metodě subscribe() ověřujeme, zda jsou vstupní data validní. Pokud nejsou, Livewire automaticky zobrazí chybové hlášky v naší šabloně.

Nakonec tedy v souboru new-subscriber-form.blade.php vytvoříme naši šablonu pro formulář:

&lt;div&gt;
    &lt;div class="items-top mb-3 space-y-4 sm:flex sm:space-y-0 max-w-4xl"&gt;
        &lt;div class="relative w-full mr-1"&gt;
            &lt;label for="newsletter_email" class="hidden mb-2 text-sm font-medium text-gray-900 dark:text-gray-300"&gt;
                {{ __('template.newsletter-email-label') }}
            &lt;/label&gt;
            &lt;div class="flex absolute inset-y-0 left-0 items-center pl-3 pointer-events-none"&gt;
                &lt;svg class="w-5 h-5 text-gray-500 dark:text-gray-400" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path d="M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z"&gt;&lt;/path&gt;&lt;path d="M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z"&gt;&lt;/path&gt;&lt;/svg&gt;
            &lt;/div&gt;
            &lt;input wire:model.defer="email" class="block p-3 pl-10 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 sm:rounded-none sm:rounded-l-lg focus:ring-primary-500 focus:border-primary-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-white dark:text-white dark:focus:ring-primary-500 dark:focus:border-primary-500" placeholder="{{ __('template.newsletter-email-placeholder') }}" type="email" id="newsletter_email"&gt;
            @error('email')
                &lt;p class='mt-2 text-sm text-red-600'&gt;{{ $message }}&lt;/p&gt;
            @enderror
        &lt;/div&gt;
        &lt;div class="relative w-full md:w-80 mr-1"&gt;
            &lt;label for="newsletter_language" class="hidden mb-2 text-sm font-medium text-gray-900 dark:text-gray-300"&gt;
                {{ __('template.newsletter-language-label') }}
            &lt;/label&gt;
            &lt;select wire:model.defer="language" id="newsletter_language" class="bg-gray-50 border border-gray-300 text-gray-900 rounded-lg text-sm focus:ring-blue-500 focus:border-blue-500 block w-full p-3 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"&gt;
                @foreach (config('app.locales') as $lang => $language)
                    &lt;option value="{{ $lang }}"&gt;{{ __('template.' . $lang) }}&lt;/option&gt;
                @endforeach
            &lt;/select&gt;
            @error('language')
                &lt;p class='mt-2 text-sm text-red-600'&gt;{{ $message }}&lt;/p&gt;
            @enderror
        &lt;/div&gt;
        &lt;div&gt;
            &lt;button wire:click="subscribe()" wire:loading.attr="disabled" type="submit" class="py-3 px-5 w-full text-sm font-medium text-center text-white rounded-lg border cursor-pointer bg-primary-700 border-primary-600 sm:rounded-none sm:rounded-r-lg hover:bg-primary-800 focus:ring-4 focus:ring-primary-300 dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800"&gt;
                {{ __('template.newsletter-subscribe-button') }}
            &lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

Tento kód definuje formulář pro zadání emailu a výběr jazyka. Používáme zde příkaz wire:model, který nám umožňuje dvoucestnou databázovou vazbu mezi PHP a HTML. Také používáme wire:submit.prevent="subscribe" pro odeslání formuláře a zavolání naší metody subscribe().

A to je vše, co potřebujeme pro vytvoření naší Livewire komponenty. Jak na její integraci do stránky a další kroky se dozvíte níže.

Implementace Livewire komponenty do šablony

Použití Livewire komponenty ve vaší aplikaci Laravel je přímočaré a snadné. Ve vašem Blade šablonovacím souboru jednoduše použijete direktivu @livewire. Tato direktiva přijímá jako první parametr jméno Livewire komponenty, kterou chcete vložit, a jako druhý parametr můžete předat pole s daty, která chcete komponentě předat.

&lt;section class="mb-4 md:mb-8"&gt;
    &lt;div class="mx-auto"&gt;

        &lt;h2 class="mb-2 text-xl tracking-tight font-extrabold text-gray-900 sm:text-2xl dark:text-white"&gt;
            {{ __('template.newsletter-headline') }}
        &lt;/h2&gt;
        &lt;p class="mx-auto mb-2 font-light text-gray-500 sm:text-xl dark:text-gray-400"&gt;
            {{ __('template.newsletter-description') }}
        &lt;/p&gt;

        @livewire('guest.newsletter.new-subscriber-form', ['language' => app()->getLocale()])

    &lt;/div&gt;
&lt;/section&gt;

V příkladu guest.newsletter.new-subscriber-form je jméno naší komponenty a ['language' => app()->getLocale()] jsou data, která předáváme komponentě - konkrétně jazyk, na kterém se uživatel momentálně nachází. Díky tomuto jednoduchému zápisu můžeme komponentu snadno použít kdekoliv ve vašem projektu.

Nastavení trasování

Trasování (routing) je klíčovým prvkem jakékoliv webové aplikace. Laravel poskytuje skvělou podporu pro definování tras pro vaše aplikace.

V našem případě potřebujeme definovat pouze jednu trasu:


Trasa pro ověření emailové adresy uživatele.


Trasu definujeme v souboru routes/web.php.

...
Route::group([
    'prefix' => "{language}", 
    'where' => ['language' => '[a-zA-Z]{2}']
    ], function () {

    Route::get('/newsletter/verify/{token}', [NewsletterUserController::class, 'verify'])
        ->name('newsletter.verify-user')
        ->middleware('signed');

});
...

Poznámka: Bylo by možné použít 2 trasy - pro ověření emailové adresy uživatele a druhou trasu přímo pro Livewire komponentu.

V našem případě využíváme tzv. signovanou trasu, která umožňuje vytvářet odkazy, které jsou bezpečné proti "padělání". Tato trasa vede k metodě verify v našem NewsletterVerificationController.

Překlady a internacionalizace

Laravel poskytuje mocný nástroj pro internacionalizaci vašich aplikací. Díky tomu můžete jednoduše vytvářet aplikace, které podporují více jazyků. Pro náš newsletter systém budeme potřebovat několik překladů.

Překlady v Laravelu jsou organizovány do souborů, které se nachází v adresáři resources/lang. Každý jazyk má svůj vlastní adresář a v něm jsou umístěny soubory s překlady.

V našem případě budeme potřebovat překlady pro dvě jazyky, češtinu a angličtinu. Vytvoříme tedy dva soubory:


resources/lang/cs/template.php
resources/lang/en/template.php


V těchto souborech definujeme překlady, které použijeme v našem systému pro přihlášení k odběru newsletteru. Každý soubor obsahuje pole, kde klíč představuje identifikátor překladu a hodnota je samotný překlad.

Ukázka pro český překlad:

&lt;?php

return [
    ...
    'newsletter-headline' => "Přihlašte se k odběru novinek",
    'newsletter-description' => "Přihlaste se k odběru novinek o AI, Laravelu, SEO a mnoho dalšího.",
    'newsletter-email-label' => "Email",
    'newsletter-email-placeholder' => "Zadejte svůj email",
    'newsletter-language-label' => "Jazyk",
    'newsletter-subscribe-button' => "Odebírat",
    'newsletter-waiting-for-validation' => "Na váš e-mailový účet byl odeslán ověřovací odkaz.",
    'newsletter-invalid-token' => "Neplatný token.",
    'newsletter-successfuly-verified' => "Úspěšně ověřeno.",
    'newsletter-email-verification-subject' => "Ověřte prosím svou emailovou adresu",
    'newsletter-email-verification-headline' => "Vítejte v mém Newsletteru!",
    'newsletter-email-verification-description' => "Děkujeme, že jste se přihlásili k odběru mého newsletteru. Kliknutím na tlačítko níže ověřte svou e-mailovou adresu a dokončete odebírání novinek.",
    'newsletter-email-verification-verify-button' => "Ověřit email",
    'newsletter-email-verification-homepage-button' => "Přejít na web",
    'newsletter-email-verification-thanks' => "Děkuji",
    ...
];

Ukázka pro anglický překlad:

&lt;?php

return [
    ...
    'newsletter-headline' => "Sign up for newsletter",
    'newsletter-description' => "Sign up for news on AI, Laravel, SEO and much more.",
    'newsletter-email-label' => "Email address",
    'newsletter-email-placeholder' => "Enter your email",
    'newsletter-language-label' => "Language",
    'newsletter-subscribe-button' => "Subscribe",
    'newsletter-waiting-for-validation' => "A verification link has been sent to your email account.",
    'newsletter-invalid-token' => "Invalid token.",
    'newsletter-successfuly-verified' => "Successfully verified.",
    'newsletter-email-verification-subject' => "Please verify your email address",
    'newsletter-email-verification-headline' => "Welcome to my Newsletter!",
    'newsletter-email-verification-description' => "Thank you for subscribing to my newsletter. Click the button below to verify your email address and complete your newsletter subscription.",
    'newsletter-email-verification-verify-button' => "Verify email",
    'newsletter-email-verification-homepage-button' => "Go to website",
    'newsletter-email-verification-thanks' => "Thanks",
    ...
];

Tyto překlady poté můžeme využít v našich šablonách nebo kódu pomocí helperu __ - jak již bylo ukázáno v předchozích částech kódu.

__('template.newsletter-email-verification-subject')

Tímto způsobem můžeme přidávat další jazyky do naší aplikace pouze přidáním dalších souborů s překlady. Laravel za nás automaticky vybere správný jazyk podle nastavení aplikace (což není obsahem tohoto článku).

Testování systému pomocí Pest

Když máme hotový systém pro přihlašování uživatelů k odběru newsletteru, je důležité se ujistit, že všechny jeho části fungují správně. K tomu slouží automatizované testy.

V Laravelu je pro testování populární nástroj Pest. Pest je elegantní wrapper nad PHPUnit, který umožňuje psát testy deklarativním stylem, který je často čitelnější a snazší na pochopení.

Pest umožňuje testovat všechny části naší aplikace. Můžeme testovat, zda se naše routy chovají správně, zda se data správně ukládají do databáze, nebo zda se odesílají správné e-maily.

Pro testování našeho newsletter systému vytvoříme dva testy:


Test pro ověření uživatele newsletteru.
Test pro odběr nových uživatelů pomocí Livewire komponenty.


V těchto testech ověříme, zda se uživatelé mohou přihlasit k newsletteru a ověřují, zda se odesílají ověřovací e-maily a zda se správně zobrazují flash zprávy.

Otestování Livewire komponenty - NewSubscriberFormTest.php:

&lt;?php

use App\Enums\Newsletter\NewsletterLanguage;
use App\Http\Livewire\Guest\Newsletter\NewSubscriberForm;
use App\Mail\App\Guest\Newsletter\NewsletterVerificationMail;
use App\Models\Newsletter\NewsletterUser;
use Illuminate\Support\Facades\Mail;
use Livewire\Livewire;

it('subscribes a new user to the newsletter and sends a verification email', function () {
    Mail::fake();

    Livewire::test(NewSubscriberForm::class)
        ->set('email', 'test@example.com')
        ->set('language', NewsletterLanguage::ENGLISH->value)
        ->call('subscribe')
        ->assertDispatchedBrowserEvent('alert');

    expect(NewsletterUser::where('email', 'test@example.com')->first())
        ->email->toEqual('test@example.com')
        ->language->toEqual(NewsletterLanguage::ENGLISH)
        ->is_verified->toBeFalse();

    Mail::assertSent(NewsletterVerificationMail::class, function ($mail) {
        return $mail->newsletterUser->email === 'test@example.com' && 
            $mail->newsletterUser->language === NewsletterLanguage::ENGLISH;
    });
});

it('validates the new user subscription input data', function () {
    Livewire::test(NewSubscriberForm::class)
        ->set('email', 'invalid-email')
        ->set('language', 'invalid-language')
        ->call('subscribe')
        ->assertHasErrors(['email', 'language']);
});

Otestování řadiče - NewsletterUserControllerTest.php:

&lt;?php

use App\Models\Newsletter\NewsletterUser;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\URL;

it('verifies a newsletter user successfully and redirects to the homepage with a success flash message', function () {
    $newsletterUser = NewsletterUser::factory()->create();

    $response = $this->get(URL::signedRoute('newsletter.verify-user', [
        'language' => $newsletterUser->language,
        'token' => $newsletterUser->verification_token
    ]));

    $response->assertStatus(302);
    $response->assertRedirect(route('homepage', ['language' => $newsletterUser->language]));
    $response->assertSessionHas('flashType', 'success');
    $response->assertSessionHas('flashMessage', __('template.newsletter-successfuly-verified'));

    $newsletterUser->refresh();
    expect($newsletterUser->is_verified)->toBeTrue();
});

it('fails to verify a newsletter user for an invalid token and redirects to the homepage with an error flash message', function () {
    $response = $this->get(URL::signedRoute('newsletter.verify-user', [
        'language' => Config::get('translatable.fallback_locale'),
        'token' => 'invalidtoken'
    ]));

    $response->assertStatus(302);
    $response->assertRedirect(route('homepage', ['language' => Config::get('translatable.fallback_locale')]));
    $response->assertSessionHas('flashType', 'error');
    $response->assertSessionHas('flashMessage', __('template.newsletter-invalid-token'));

    expect(NewsletterUser::where('is_verified', true)->count())->toBe(0);
});

Pro testování rout a HTTP odpovědí nám Pest poskytuje řadu metod pro přiřazování jako assertStatus, assertRedirect nebo například assertSessionHas. Pro ověření stavu v databázi můžeme využít metodu assertDatabaseHas.

Při psaní testů je důležité myslet na to, aby testy pokrývaly všechny možné scénáře a aby byly nezávislé na sobě. To znamená, že každý test by měl mít svůj vlastní izolovaný stav a neměl by ovlivňovat výsledky ostatních testů.

Práce s akcemi

Akce v Laravelu nám pomáhají udržet náš kód organizovaný a zároveň zajistit, že každá operace je jednoznačně definována. V našem systému pro přihlášení k odběru newsletteru jsme vytvořili dvě klíčové akce - CreateNewsletterUserAction a VerifyNewsletterUserAction, které jsme ve článku nijak nerozebírali.

CreateNewsletterUserAction se stará o vytvoření nového uživatele v naší databázi newsletteru. Zde dochází k zápisu e-mailu a jazyka, který si uživatel vybral pro odběr novinek.

&lt;?php

namespace App\Actions\Guest\Newsletter;

use App\Models\Newsletter\NewsletterUser;

class CreateNewsletterUserAction
{
    public function execute(array $validatedData): NewsletterUser
    {
        return NewsletterUser::create($validatedData);
    }
}

VerifyNewsletterUserAction poté ověřuje uživatele na základě tokenu, který obdržel v ověřovacím e-mailu. Tato akce také nastavuje příznak is_verified na true po úspěšném ověření.

&lt;?php

namespace App\Actions\Guest\Newsletter;

use App\Models\Newsletter\NewsletterUser;

class VerifyNewsletterUserAction
{
    public function execute(NewsletterUser $newsletterUser): NewsletterUser
    {
        $newsletterUser->update([
            'is_verified' => true,
            'verification_token' => null
        ]);

        return $newsletterUser;
    }
}

Tyto dvě akce ukazují, jak můžeme efektivně organizovat naše operace v Laravelu. Usnadňují nám do budoucna škálovatelnost našeho systému pro newslettery.

Využití Enum pro jazykové nastavení

Enumerátor NewsletterLanguage nám poskytuje elegantní a bezpečný způsob, jak manipulovat s jazykovými kódy v naší aplikaci. Pomocí Enum máme jistotu, že budeme pracovat pouze s povolenými hodnotami - v našem případě en pro angličtinu a cs pro češtinu.

Použití Enum také zvyšuje čitelnost kódu a usnadňuje údržbu, jelikož všechny možné hodnoty jsou centralizovány na jednom místě.

&lt;?php

namespace App\Enums\Newsletter;

use Illuminate\Support\Collection;

enum NewsletterLanguage: string
{
    case ENGLISH = 'en';
    case CZECH = 'cs';

    public static function all(): Collection
    {
        return collect(NewsletterLanguage::cases())->map(
            fn(NewsletterLanguage $code) => $code->details()
        );
    }

    public function details(): array
    {
        return match($this) 
        {
            self::ENGLISH => [
                'name'  => 'English',
                'value' => 'en',
            ],

            self::CZECH => [
                'name'  => 'Czech',
                'value' => 'cs',
            ],
        };
    }
}

Metody all a details pak umožňují snadno získat všechny dostupné jazyky a jejich podrobnosti, což je užitečné například při naplnění výběrového pole jazyků ve formuláři.

Domácí úkol


Využití enumerátoru v Livewire komponentěV šabloně u Livewire komponenty jsem pro výčet jazyků použil iteraci nad polem uvedeným v konfiguračním souboru, konkrétně v app.php - config('app.locales'). V produkci by však bylo ideálním použít enum.Nápověda: Pročpak máme v enumerátoru metodu all()? Nešla by využít?
Ošetření validačních zprávLivewire komponenta není celá přeložena. Laravel nám pro chybové hlášky dokáže vypsat zprávy v angličtině, nikoliv však v češtině.Nápověda: Livewire má pěkne popsanou dokumentaci a s využitím dokumentace od Laravelu by měl být tento úkol snadno vyřešitelný.
Vytvoření seederuPokud chcete mít naplněnou databázi náhodně generovanými daty a nechcete se spoléhat pouze na testy, určitě využijete seeder. To také usnadní dalším vývojářům pochopit Vaši aplikaci bez nutnosti vytvářet data ručně.Nápověda: Jelikož máme továrnu pro tvorbu instancí modelu včetně ukázky použití v testu, nemělo by Vám nic dělat problémy.
Odesílejte mail ve frontěAby uživatel nečekal, než se funkce vykoná (odešle se email), můžete u emailu použít zpracování přes tzv fronty.Nápověda: Laravel má opět vše pěkně shrnuté v dokumentaci. Osobně doporučuji "implementovat" v souboru pro logiku emailu využití front (aneb jediná třída, která není použita v naší ukázce, přesto ji soubor obsahuje - dokonce je přidána, pokud soubor generujete přes artisan příkaz).


Závěr

Vytvoření systému pro přihlášení k odběru newsletteru v Laravelu může vypadat jako složitá úloha. Tento článek by Vám měl ukázat, že to ale není tak složité, jak by se mohlo na první pohled zdát. Díky tomuto průvodci jste měli možnost seznámit se s celým procesem od základní přípravy přes implementaci jednotlivých částí až po testování.

Laravel je výkonný a flexibilní framework, který umožňuje vytvářet různé typy webových aplikací. Pomocí Livewire můžeme snadno vytvářet dynamické komponenty a díky Pestu můžeme efektivně testovat naši aplikaci a ujistit se, že vše funguje správně.

Důležité je také pamatovat na internacionalizaci a připravit naši aplikaci pro vícejazyčné uživatele. Laravel nabízí skvělé nástroje pro práci s překlady a lokalizací.

Doufám, že vám tento průvodce pomohl porozumět, jak v Laravelu vytvořit systém pro přihlášení k odběru newsletteru a že vás inspiroval k dalším projektům. Pamatujte, že nejdůležitější je praktická zkušenost, takže neváhejte a pusťte se do vlastního projektu!]]></content:encoded>
                
                                    <category><![CDATA[Laravel]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/47/47139203-32b9-48cc-bdb8-21e65429cf98/conversions/laravel-newsletter-system-full.jpg" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Factories pro Astrotomic Laravel Translatable]]></title>
                <link>https://www.pavelzanek.com/cs/blog/factory-astrotomic-laravel-translatable</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/factory-astrotomic-laravel-translatable</guid>
                <pubDate>Sun, 18 Jun 2023 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Naučte se vytvářet factories pro Astrotomic Laravel Translatable. Průvodce pokrývá nastavení, vytváření factories a jejich testování pro vícejazyčné aplikace.]]></description>
                
                                    <content:encoded><![CDATA[Jak vytvořit továrnu pro modely s balíčkem Astrotomic/laravel-translatable pro překlady

Tento článek vás provede procesem vytváření továrny pro modely v Laravelu s použitím balíčku pro překlady. Seznamte se s výhodami využití továren a překladů v Laravelu. Zjistěte, jak snadno a efektivně generovat testovací data pro vaše aplikace.

Co je továrna v Laravelu a proč ji používat

Továrna v Laravelu je nástroj, který usnadňuje generování velkého množství testovacích dat pro naše databázové tabulky. Továrny jsou nezbytné pro automatizované testování, kde potřebujeme vytvářet různé scénáře pro naše testy.

Použití továren v Laravelu přináší několik výhod. Jednou z nich je efektivita - místo manuálního vytváření jednotlivých záznamů v databázi můžeme využít továrnu, která za nás vygeneruje požadované množství dat. Další výhodou je flexibilita. Továrny nám umožňují definovat různé stavy našich modelů, což nám umožňuje snadno vytvářet různé databázové scénáře pro naše testy.

V následujících částech se podíváme na to, jak vytvořit základní továrnu v Laravelu a jak ji upravit pro použití s balíčkem Astrotomic/laravel-translatable pro překlady.

Základy vytváření továrny v Laravelu

Vytváření továrny v Laravelu je jednoduchý proces, který vám umožní rychle generovat testovací data pro vaše databázové tabulky. Zde je návod, jak vytvořit základní továrnu v Laravelu.

Prvním krokem je vytvoření továrny pomocí příkazu Artisan. Otevřete terminál a zadejte následující příkaz:

php artisan make:factory ExampleModelFactory --model=ExampleModel

Tímto příkazem vytvoříte novou továrnu s názvem ExampleModelFactory pro model ExampleModel. Laravel automaticky vytvoří soubor továrny v adresáři database/factories.

Otevřete nově vytvořený soubor továrny a uvidíte metodu definition(). Tato metoda je místo, kde definujete, jak by měly být generovány jednotlivé atributy vašeho modelu.

...
public function definition()
{
    return [
        'attribut_name' => $this->faker->word,
        // other attributes...
    ];
}
...

V metodě definition() využíváme tzv. Faker knihovnu, která nám umožňuje generovat různé typy náhodných dat, jako jsou slova, věty, čísla a jiná data.

Nyní, když máte vytvořenou továrnu, můžete ji použít k vytvoření dat pro vaše testy. To můžete udělat například takto:

$user = UserFactory::new()->create();

Tímto způsobem vytvoříte nový záznam v databázi s daty generovanými vaší továrnou. Továrny v Laravelu jsou mocným nástrojem, který vám umožní snadno a efektivně generovat testovací data pro vaše aplikace.

Jak používat balíček Astrotomic/laravel-translatable pro překlady

Balíček Astrotomic/laravel-translatable je nástroj, který umožňuje snadné překlady vašich modelů v Laravelu. Tento balíček je ideální pro projekty, které vyžadují vícejazyčnou podporu, a umožňuje vám ukládat překlady vašich modelů přímo v databázi.

Abychom mohli balíček používat, musíme ho nejprve nainstalovat. To lze provést pomocí následujícího příkazu:

composer require astrotomic/laravel-translatable

Po instalaci balíčku musíme v našem modelu, který chceme překládat, použít trait Translatable. Trait přidává metody, které nám umožňují snadno pracovat s překlady.

...
use Astrotomic\Translatable\Translatable;

class Post extends Model
{
    use Translatable;

    public $translatedAttributes = ['title', 'body'];

    ...
}

V tomto příkladu jsme v modelu Post použili trait Translatable a definujeme, že atributy title a body budou překládány. Kromě trait můžeme také přidat contract:

...
use Astrotomic\Translatable\Contracts\Translatable as TranslatableContract;
use Astrotomic\Translatable\Translatable;

class Post extends Model implements TranslatableContract
{
    use Translatable;

    public $translatedAttributes = ['title', 'body'];

    ...
}

Balíček Astrotomic/laravel-translatable nám pak umožňuje snadno přistupovat k překladům a pracovat s nimi. Například takto:

$post = Post::first();
echo $post->translate('en')->title;  // this will print the English title of the post

Balíček Astrotomic/laravel-translatable je mocný nástroj pro práci s překlady v Laravelu. V následující části se podíváme na to, jak ho můžeme využít při vytváření továren.

Vytváření továrny pro modely s balíčkem Astrotomic/laravel-translatable

Nyní, když máme základní představu o tom, jak funguje balíček Astrotomic/laravel-translatable, můžeme se podívat na to, jak vytvořit továrnu pro modely, které tento balíček využívají.

Představme si, že máme model Post, který používá balíček Astrotomic/laravel-translatable pro překlady atributů title a body. Jak bychom pro tento model vytvořili továrnu?

První krok je stejný, jako jsme si ukázali v předchozí části - vytvoříme továrnu pomocí příkazu Artisan:

php artisan make:factory PostFactory --model=Post

Následně otevřeme soubor továrny a upravíme metodu definition() tak, aby generovala překlady pro naše atributy. To můžeme udělat například takto:

...
public function definition()
{
    $locales = ['en', 'cs'];
    $translations = collect($locales)->mapWithKeys(function($locale) {
        return [
            $locale => [
                'title' => $this->faker->words(3, true),
                'body' => $this->faker->realText(500),
                ...
            ]
        ];
    })->toArray();

    return array_merge($translations, [
        'type' => PostType::POST,  // non-translatable attribute
    ]);
}
...

V tomto příkladu generujeme překlady pro angličtinu (en) a češtinu (cs) pomocí Faker knihovny. Můžeme přidat tolik jazyků, kolik potřebujeme.

Nyní, když máme vytvořenou továrnu, můžeme ji použít k vytvoření dat pro naše testy stejným způsobem, jak jsme si ukázali v předchozí části. Tímto způsobem můžeme snadno vytvářet továrny pro modely, které používají balíček Astrotomic/laravel-translatable pro překlady.

Závěr

V tomto článku jsme se podrobně seznámili s procesem vytváření továrny pro modely v Laravelu s použitím balíčku Astrotomic/laravel-translatable pro překlady. Prošli jsme si základy vytváření továrny, seznámili jsme se s balíčkem Astrotomic/laravel-translatable a nakonec jsme si ukázali, jak vytvořit továrnu pro modely, které tento balíček používají.

Doufáme, že vám tento průvodce pomohl pochopit, jak efektivně využívat továrny v Laravelu a jak je kombinovat s balíčkem pro překlady. Laravel je mocný framework, který nabízí mnoho nástrojů a funkcí, které usnadňují vývoj webových aplikací. Továrny a balíček pro překlady jsou jen malou částí toho, co Laravel nabízí.

Pokud chcete prohloubit své znalosti Laravelu a jeho funkcí, doporučuji se podívat na další zdroje a tutoriály/návody, které jsou k dispozici online. Také se nebojte experimentovat a zkoušet nové věci - to je nejlepší způsob, jak se naučit a zlepšit své dovednosti. Přeji Vám hodně úspěchů a radosti při vývoji s frameworkem Laravel!]]></content:encoded>
                
                                    <category><![CDATA[Laravel]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/7f/7f22f39b-f249-4529-9fcc-3d2377974ac4/conversions/factories-astrotomic-laravel-translatable-full.png" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Title tag – kompletní průvodce pro SEO]]></title>
                <link>https://www.pavelzanek.com/cs/blog/title</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/title</guid>
                <pubDate>Wed, 14 Jun 2023 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Průvodce title tagem pro SEO: Co je title tag, jak ho správně napsat, jaký má vliv na SEO a jak ho optimalizovat pro vyhledávače.]]></description>
                
                                    <content:encoded><![CDATA[Titulek str&aacute;nky, zn&aacute;m&yacute; tak&eacute; jako title tag, je kl&iacute;čov&yacute;m prvkem optimalizace pro vyhled&aacute;vače (SEO). Je to prvn&iacute; věc, kterou uživatel&eacute; vid&iacute;, když na va&scaron;i str&aacute;nku naraz&iacute; ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;, a může m&iacute;t velk&yacute; vliv na to, zda na v&aacute;&scaron; odkaz kliknou, nebo ne. V tomto čl&aacute;nku se dozv&iacute;te, co je titulek, jak ho vyhled&aacute;vače použ&iacute;vaj&iacute;, jak&eacute; jsou nejlep&scaron;&iacute; postupy pro jeho tvorbu a jak ho můžete využ&iacute;t pro zlep&scaron;en&iacute; va&scaron;&iacute; SEO strategie. Tak&eacute; se pod&iacute;v&aacute;me na n&aacute;stroje, kter&eacute; v&aacute;m mohou pomoci s kontrolou a vylep&scaron;en&iacute;m va&scaron;ich titulků. Ať už jste zač&aacute;tečn&iacute;k v SEO nebo zku&scaron;en&yacute; odborn&iacute;k, tento průvodce v&aacute;m poskytne hodnotn&eacute; informace a tipy, jak vytv&aacute;řet efektivn&iacute; titulky pro va&scaron;e webov&eacute; str&aacute;nky.
Co je titulek?
Titulek je kl&iacute;čov&yacute;m prvkem každ&eacute; webov&eacute; str&aacute;nky. Jedn&aacute; se o kr&aacute;tk&yacute; text, kter&yacute; popisuje obsah str&aacute;nky. Titulek se zobrazuje na několika důležit&yacute;ch m&iacute;stech. Nejviditelněj&scaron;&iacute; je v z&aacute;hlav&iacute; prohl&iacute;žeče nebo na kartě prohl&iacute;žeče, když je str&aacute;nka otevřen&aacute;. Titulek je tak&eacute; hlavn&iacute;m prvkem ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;, kde se zobrazuje jako klikateln&yacute; odkaz na va&scaron;i str&aacute;nku. Kromě toho se titulek může zobrazovat na extern&iacute;ch webech, jako jsou soci&aacute;ln&iacute; s&iacute;tě, když je str&aacute;nka sd&iacute;lena.
Titulek je pro SEO nesm&iacute;rně důležit&yacute;. Je to jedno z prvn&iacute;ch m&iacute;st, kde vyhled&aacute;vače (jako Google) hledaj&iacute; kl&iacute;čov&aacute; slova, když se snaž&iacute; pochopit, o čem je va&scaron;e str&aacute;nka. Spr&aacute;vně napsan&yacute; titulek může v&yacute;razně zlep&scaron;it viditelnost va&scaron;&iacute; str&aacute;nky ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;. Na druhou stranu, pokud je titulek &scaron;patně napsan&yacute; nebo pokud neobsahuje relevantn&iacute; kl&iacute;čov&aacute; slova, může to va&scaron;i str&aacute;nku ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute; po&scaron;kodit.
Uk&aacute;zka titulku:
&lt;title&gt;Useful links - Laravel framework - PavelZanek.com&lt;/title&gt;
Pravidla pro tvorbu titulku
Připravil jsem pro V&aacute;s p&aacute;r pravidel pro tvorbu titulků, kter&eacute; můžete využ&iacute;t. Pojďme se na ně pod&iacute;vat.

Jedinečnost titulkuKažd&aacute; str&aacute;nka na va&scaron;em webu by měla m&iacute;t jedinečn&yacute; titulek. Duplicitn&iacute; titulky mohou v&eacute;st ke zmaten&iacute; u vyhled&aacute;vačů a uživatelů. Můžete zkontrolovat jedinečnost va&scaron;ich titulků pomoc&iacute; n&aacute;strojů jako je Screaming Frog.
D&eacute;lka titulkuIde&aacute;ln&iacute; d&eacute;lka titulku je mezi 50-60 znaky. Pokud je titulek př&iacute;li&scaron; dlouh&yacute;, vyhled&aacute;vače ho mohou zkr&aacute;tit v SERPu (v&yacute;sledky vyhled&aacute;v&aacute;n&iacute;). Pokud je naopak př&iacute;li&scaron; kr&aacute;tk&yacute;, může to znamenat, že nevyuž&iacute;v&aacute;te dostatečně prostoru pro kl&iacute;čov&aacute; slova a pro přesvědčen&iacute; uživatelů, aby na v&aacute;&scaron; odkaz klikli.
Použit&iacute; kl&iacute;čov&yacute;ch slovKl&iacute;čov&aacute; slova by měla b&yacute;t souč&aacute;st&iacute; va&scaron;eho titulku. Měli byste se snažit um&iacute;stit hlavn&iacute; kl&iacute;čov&eacute; slovo co nejbl&iacute;že na zač&aacute;tek titulku. Vyhled&aacute;vače a uživatel&eacute; tak snadněji pochop&iacute;, o čem je str&aacute;nka.
Přesn&yacute; popis obsahuTitulek by měl přesně a stručně popisovat obsah str&aacute;nky. Uživatel&eacute; by měli b&yacute;t schopni po přečten&iacute; titulku rychle pochopit, co mohou na str&aacute;nce oček&aacute;vat.
Zaměřen&iacute; na uživatelePři tvorbě titulku myslete na sv&eacute; uživatele. Titulek by měl b&yacute;t atraktivn&iacute; a přesvědčiv&yacute;, aby uživatel&eacute; chtěli na v&aacute;&scaron; odkaz kliknout.
Použit&iacute; značky (brandbuilding)Pokud je va&scaron;e značka dobře zn&aacute;m&aacute;, může b&yacute;t užitečn&eacute; ji zahrnout do titulku. Obvykle se značka umisťuje na konec titulku.
Technick&eacute; aspektyTitulek by měl b&yacute;t spr&aacute;vně implementov&aacute;n v HTML k&oacute;du va&scaron;&iacute; str&aacute;nky pomoc&iacute; značky &lt;title&gt;. Měli byste se tak&eacute; vyhnout použ&iacute;v&aacute;n&iacute; neobvykl&yacute;ch znaků, kter&eacute; by mohly způsobit probl&eacute;my s k&oacute;dov&aacute;n&iacute;m.
Testov&aacute;n&iacute; a optimalizacePravidelně byste měli sledovat v&yacute;kon sv&yacute;ch titulků a prov&aacute;dět př&iacute;padně A/B testy, abyste zjistili, jak&eacute; form&aacute;tov&aacute;n&iacute; nebo jak&eacute; fr&aacute;ze vedou k vy&scaron;&scaron;&iacute; klikatelnosti a lep&scaron;&iacute;m pozic&iacute;m ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;.
Pravidla pro specifick&eacute; typy str&aacute;nekExistuj&iacute; tak&eacute; specifick&aacute; pravidla pro různ&eacute; typy str&aacute;nek. Např&iacute;klad pro produktov&eacute; str&aacute;nky by měl titulek obsahovat n&aacute;zev produktu a jeho hlavn&iacute; vlastnosti. Pro blogov&eacute; př&iacute;spěvky by měl titulek vzbudit z&aacute;jem a zvědavost čten&aacute;řů.
Vyh&yacute;b&aacute;n&iacute; se spamu kl&iacute;čov&yacute;ch slovNadbytečn&eacute; využit&iacute; kl&iacute;čov&yacute;ch slov v titulku může v&eacute;st k penalizaci vyhled&aacute;vači. M&iacute;sto toho se snažte vytvořit přirozeně zněj&iacute;c&iacute; titulek, kter&yacute; st&aacute;le obsahuje va&scaron;e kl&iacute;čov&eacute; slovo.
Využit&iacute; emoc&iacute; a akčn&iacute;ch slovEmočn&iacute; a akčn&iacute; slova mohou zv&yacute;&scaron;it klikatelnost va&scaron;eho titulku. Např&iacute;klad slova jako "nejlep&scaron;&iacute;", "nejrychlej&scaron;&iacute;" nebo "nejnověj&scaron;&iacute;" mohou přil&aacute;kat pozornost uživatelů.
Využit&iacute; č&iacute;sel a seznamůČ&iacute;sla a seznamy mohou tak&eacute; zv&yacute;&scaron;it klikatelnost va&scaron;eho titulku. Např&iacute;klad "Top 10 tipů pro..." nebo "5 nejlep&scaron;&iacute;ch..."
Využit&iacute; lok&aacute;ln&iacute;ho SEOPokud je va&scaron;e firma zaměřena na konkr&eacute;tn&iacute; geografickou oblast, může b&yacute;t užitečn&eacute; zahrnout n&aacute;zev města nebo regionu do titulku.
Využit&iacute; aktu&aacute;ln&iacute;ch ud&aacute;lost&iacute; a trendůPokud je to relevantn&iacute; pro v&aacute;&scaron; obsah, můžete zahrnout odkaz na aktu&aacute;ln&iacute; ud&aacute;losti nebo trendy do va&scaron;eho titulku.
Vyh&yacute;b&aacute;n&iacute; se klamav&yacute;m titulkůmKlamav&eacute; titulky mohou v&eacute;st k vysok&eacute; m&iacute;ře odchodů a mohou po&scaron;kodit va&scaron;i reputaci u vyhled&aacute;vačů i uživatelů. Ujistěte se, že v&aacute;&scaron; titulek přesně odpov&iacute;d&aacute; obsahu str&aacute;nky.
Využit&iacute; strukturovan&yacute;ch datStrukturovan&aacute; data mohou pomoci vyhled&aacute;vačům l&eacute;pe pochopit obsah va&scaron;&iacute; str&aacute;nky a mohou v&eacute;st k lep&scaron;&iacute;mu zobrazen&iacute; va&scaron;eho titulku ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;.
Využit&iacute; soci&aacute;ln&iacute;ch sign&aacute;lůSoci&aacute;ln&iacute; sign&aacute;ly, jako je sd&iacute;len&iacute; na soci&aacute;ln&iacute;ch s&iacute;t&iacute;ch, může tak&eacute; ovlivnit, jak vyhled&aacute;vače hodnot&iacute; a zobrazuj&iacute; v&aacute;&scaron; titulek. Ujistěte se, že v&aacute;&scaron; titulek je atraktivn&iacute; a sd&iacute;liteln&yacute;.
Vyh&yacute;b&aacute;n&iacute; se technick&yacute;m chyb&aacute;mTechnick&eacute; chyby, jako je např&iacute;klad nespr&aacute;vn&eacute; k&oacute;dov&aacute;n&iacute; speci&aacute;ln&iacute;ch znaků, mohou způsobit, že se v&aacute;&scaron; titulek zobraz&iacute; nespr&aacute;vně ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;. Ujistěte se, že v&aacute;&scaron; titulek je technicky spr&aacute;vn&yacute;.
Využit&iacute; konzistenceKonzistence ve form&aacute;tu a stylu va&scaron;ich titulků může pomoci uživatelům l&eacute;pe rozpoznat a zapamatovat si va&scaron;i značku.
Využit&iacute; aktu&aacute;lnostiAktualizace titulků na z&aacute;kladě aktu&aacute;ln&iacute;ch trendů, sez&oacute;nn&iacute;ch změn nebo nov&yacute;ch informac&iacute; může pomoci udržet va&scaron;e str&aacute;nky relevantn&iacute; a atraktivn&iacute; pro uživatele.
Využijte velk&aacute; a mal&aacute; p&iacute;smenaM&iacute;sto psan&iacute; titulků pouze velk&yacute;mi nebo mal&yacute;mi p&iacute;smeny zkuste využ&iacute;t kombinaci obou. Velk&aacute; p&iacute;smena mohou sloužit k zdůrazněn&iacute; kl&iacute;čov&yacute;ch č&aacute;st&iacute; titulku a pomoci tak udržet pozornost čten&aacute;ře.
Nepouž&iacute;vejte opakovaně speci&aacute;ln&iacute; znakyOpakovan&eacute; použ&iacute;v&aacute;n&iacute; speci&aacute;ln&iacute;ch znaků, jako jsou pomlčky (-), svisl&eacute; č&aacute;ry (|) nebo č&aacute;rky (,), v titulc&iacute;ch může působit ru&scaron;ivě a m&eacute;ně profesion&aacute;lně. Snažte se tyto znaky použ&iacute;vat s m&iacute;rou a vždy s ohledem na čitelnost a srozumitelnost titulku.


Tvorba efektivn&iacute;ch titulků je kl&iacute;čovou souč&aacute;st&iacute; SEO. Spr&aacute;vně vytvořen&yacute; titulek může zv&yacute;&scaron;it viditelnost va&scaron;eho webu ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;, zv&yacute;&scaron;it klikatelnost a přil&aacute;kat v&iacute;ce n&aacute;v&scaron;těvn&iacute;ků na va&scaron;e str&aacute;nky. Vždy se ujistěte, že v&aacute;&scaron; titulek je jedinečn&yacute;, relevantn&iacute;, atraktivn&iacute; a technicky spr&aacute;vn&yacute;.
Spr&aacute;vn&aacute; d&eacute;lka titulků
Při tvorbě titulků je jedn&iacute;m z kl&iacute;čov&yacute;ch aspektů jejich d&eacute;lka. Optim&aacute;ln&iacute; d&eacute;lka titulku je předmětem mnoha diskus&iacute; mezi odborn&iacute;ky na SEO. Obecně se doporučuje, aby d&eacute;lka titulku nepřesahovala 60-70 znaků. Tato d&eacute;lka je ide&aacute;ln&iacute; pro zobrazen&iacute; cel&eacute;ho titulku ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute; Google. Pokud je titulek del&scaron;&iacute;, Google ho může zkr&aacute;tit, což může v&eacute;st k ztr&aacute;tě důležit&yacute;ch informac&iacute;.
Znaky vs pixely
Je důležit&eacute; si uvědomit, že Google neomez&iacute; titulky podle počtu znaků, ale podle &scaron;&iacute;řky v pixelech. To znamen&aacute;, že d&eacute;lka titulku ve znac&iacute;ch může b&yacute;t různ&aacute; v z&aacute;vislosti na tom, jak&eacute; znaky jsou použity. Např&iacute;klad &scaron;irok&eacute; znaky, jako jsou 'W' nebo 'M', zab&iacute;raj&iacute; v&iacute;ce m&iacute;sta než už&scaron;&iacute; znaky, jako jsou 'i' nebo 't'. Proto je důležit&eacute; při tvorbě titulku zohlednit nejen počet znaků, ale tak&eacute; &scaron;&iacute;řku v pixelech. Existuj&iacute; v&scaron;ak n&aacute;stroje, kter&eacute; v&aacute;m mohou pomoci zkontrolovat, zda je d&eacute;lka va&scaron;eho titulku v r&aacute;mci doporučen&yacute;ch limitů.
D&eacute;lka titulků na desktopu a na mobilu
Při tvorbě titulků je důležit&eacute; vz&iacute;t v &uacute;vahu, že se mohou zobrazovat na různ&yacute;ch zař&iacute;zen&iacute;ch - na desktopu i na mobilu. V z&aacute;vislosti na zař&iacute;zen&iacute; se může měnit i zobrazovan&aacute; d&eacute;lka titulku.

DesktopNa desktopov&yacute;ch zař&iacute;zen&iacute;ch je obecně v&iacute;ce m&iacute;sta pro zobrazen&iacute; titulku. Google obvykle zobrazuje prvn&iacute;ch 50-60 znaků titulku. Pokud je titulek del&scaron;&iacute;, může b&yacute;t zkr&aacute;cen. Je tedy důležit&eacute;, aby byly nejdůležitěj&scaron;&iacute; informace um&iacute;stěny na zač&aacute;tek titulku.
Mobiln&iacute; zař&iacute;zen&iacute;Na mobiln&iacute;ch zař&iacute;zen&iacute;ch je m&iacute;sto pro zobrazen&iacute; titulku omezeněj&scaron;&iacute;. Google zde obvykle zobrazuje prvn&iacute;ch 40-60 znaků. I zde plat&iacute;, že pokud je titulek del&scaron;&iacute;, může b&yacute;t zkr&aacute;cen. Proto je je&scaron;tě důležitěj&scaron;&iacute; um&iacute;stit kl&iacute;čov&eacute; informace na zač&aacute;tek titulku.

Jak vyhled&aacute;vače pracuj&iacute; s titulky
Jak vyhled&aacute;vače čtou titulky
Vyhled&aacute;vače, jako je Google, použ&iacute;vaj&iacute; sofistikovan&eacute; algoritmy pro čten&iacute; a interpretaci titulků. Tyto algoritmy jsou navrženy tak, aby rozpoznaly kl&iacute;čov&aacute; slova a fr&aacute;ze v titulku, kter&eacute; jsou relevantn&iacute; pro obsah str&aacute;nky. Když uživatel zad&aacute; dotaz do vyhled&aacute;vače, algoritmus vyhled&aacute; str&aacute;nky s titulky, kter&eacute; nejl&eacute;pe odpov&iacute;daj&iacute; dotazu uživatele. Ale to je pouze jeden z mnoha faktorů, kter&eacute; vyhled&aacute;vače použ&iacute;vaj&iacute;.
Jak vyhled&aacute;vače hodnot&iacute; titulky
Vyhled&aacute;vače tak&eacute; hodnot&iacute; titulky na z&aacute;kladě několika faktorů. Jedn&iacute;m z nich je jedinečnost titulku. Str&aacute;nky s jedinečn&yacute;mi a origin&aacute;ln&iacute;mi titulky jsou často hodnoceny vy&scaron;&scaron;&iacute; než str&aacute;nky s duplicitn&iacute;mi titulky. Dal&scaron;&iacute;m faktorem je relevace titulku pro obsah str&aacute;nky. Str&aacute;nky, jejichž titulky přesně odpov&iacute;daj&iacute; obsahu str&aacute;nky, jsou často hodnoceny vy&scaron;&scaron;&iacute; než str&aacute;nky s neodpov&iacute;daj&iacute;c&iacute;mi titulky.
Jak vyhled&aacute;vače zobrazuj&iacute; titulky
Vyhled&aacute;vače zobrazuj&iacute; titulky ve sv&yacute;ch v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute; jako hlavn&iacute; odkaz na str&aacute;nku. Titulek je často prvn&iacute; věc, kterou uživatel&eacute; vid&iacute;, když se jejich str&aacute;nka objev&iacute; ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;, a může m&iacute;t velk&yacute; vliv na to, zda uživatel klikne na odkaz nebo ne. Někter&eacute; vyhled&aacute;vače, jako je Google, mohou tak&eacute; upravit zobrazen&iacute; titulku, aby l&eacute;pe odpov&iacute;dal dotazu uživatele.

Jak vyhled&aacute;vače použ&iacute;vaj&iacute; titulky pro řazen&iacute; v&yacute;sledků vyhled&aacute;v&aacute;n&iacute;
Vyhled&aacute;vače použ&iacute;vaj&iacute; titulky jako jeden z mnoha faktorů při řazen&iacute; str&aacute;nek ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;. Str&aacute;nky s titulky, kter&eacute; jsou dobře naps&aacute;ny a obsahuj&iacute; relevantn&iacute; kl&iacute;čov&aacute; slova, jsou často řazeny vy&scaron;&scaron;&iacute; než str&aacute;nky s &scaron;patně napsan&yacute;mi nebo neodpov&iacute;daj&iacute;c&iacute;mi titulky. Vyhled&aacute;vače tak&eacute; berou v &uacute;vahu, jak často je kl&iacute;čov&eacute; slovo použito v titulku, a mohou penalizovat str&aacute;nky, kter&eacute; přeplňuj&iacute; sv&eacute; titulky kl&iacute;čov&yacute;mi slovy.
Jak se vyhled&aacute;vače vyrovn&aacute;vaj&iacute; se změnami titulků

Jak vyhled&aacute;vače detekuj&iacute; změny v titulc&iacute;chVyhled&aacute;vače, jako je Google, pravidelně proch&aacute;zej&iacute; webov&eacute; str&aacute;nky, aby zjistily, zda do&scaron;lo ke změn&aacute;m. Tento proces se naz&yacute;v&aacute; crawling. Během tohoto procesu vyhled&aacute;vače zjist&iacute;, zda byly provedeny nějak&eacute; změny v titulc&iacute;ch str&aacute;nek. Pokud je detekov&aacute;na změna, vyhled&aacute;vač aktualizuje svůj index a může přehodnotit pozici str&aacute;nky ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;.
Jak vyhled&aacute;vače reaguj&iacute; na změny v titulc&iacute;chPokud vyhled&aacute;vač detekuje změnu v titulku str&aacute;nky, může to m&iacute;t vliv na to, jak je str&aacute;nka hodnocena a zobrazov&aacute;na ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;. Pokud je nov&yacute; titulek v&iacute;ce relevantn&iacute; a obsahuje kl&iacute;čov&aacute; slova, kter&aacute; jsou důležit&aacute; pro obsah str&aacute;nky, může to v&eacute;st k vy&scaron;&scaron;&iacute;mu hodnocen&iacute; str&aacute;nky. Na druhou stranu, pokud je nov&yacute; titulek m&eacute;ně relevantn&iacute; nebo neobsahuje důležit&aacute; kl&iacute;čov&aacute; slova, může to v&eacute;st k niž&scaron;&iacute;mu hodnocen&iacute; str&aacute;nky.
Jak dlouho trv&aacute;, než vyhled&aacute;vače zareaguj&iacute; na změny v titulc&iacute;chDoba, kterou vyhled&aacute;vače potřebuj&iacute; k reakci na změny v titulc&iacute;ch, se může li&scaron;it. Někter&eacute; změny mohou b&yacute;t detekov&aacute;ny a zohledněny během několika dn&iacute;, zat&iacute;mco jin&eacute; mohou trvat t&yacute;dny nebo dokonce měs&iacute;ce. Toto je d&aacute;no mnoha faktory, včetně frekvence crawlingu vyhled&aacute;vače, velikosti a popularitě webov&eacute; str&aacute;nky a povahy změn v titulku.

Dopady změn titulků na SEO

Vliv změn titulků na hodnocen&iacute; ve vyhled&aacute;vač&iacute;chJak již bylo řečeno, změna titulku může m&iacute;t v&yacute;znamn&yacute; dopad na hodnocen&iacute; va&scaron;&iacute; str&aacute;nky ve vyhled&aacute;vač&iacute;ch. Pokud je nov&yacute; titulek v&iacute;ce relevantn&iacute; a obsahuje kl&iacute;čov&aacute; slova, kter&aacute; jsou důležit&aacute; pro obsah str&aacute;nky, může to v&eacute;st k vy&scaron;&scaron;&iacute;mu hodnocen&iacute; str&aacute;nky.
Vliv změn titulků na m&iacute;ru prokliku (CTR)Změna titulku může tak&eacute; ovlivnit m&iacute;ru prokliku (CTR) va&scaron;&iacute; str&aacute;nky. Titulek je jedn&iacute;m z prvn&iacute;ch prvků, kter&eacute; uživatel&eacute; vid&iacute;, když se va&scaron;e str&aacute;nka objev&iacute; ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;, a může m&iacute;t velk&yacute; vliv na to, zda uživatel klikne na odkaz nebo ne. Pokud je nov&yacute; titulek atraktivněj&scaron;&iacute; nebo přesněji popisuje obsah str&aacute;nky, může to v&eacute;st k vy&scaron;&scaron;&iacute; m&iacute;ře prokliku.
Vliv změn titulků na n&aacute;v&scaron;těvnost str&aacute;nkyZměna titulku může tak&eacute; ovlivnit n&aacute;v&scaron;těvnost va&scaron;&iacute; str&aacute;nky. Pokud je nov&yacute; titulek v&iacute;ce relevantn&iacute; a přitažliv&yacute; pro uživatele, může to v&eacute;st k vy&scaron;&scaron;&iacute; n&aacute;v&scaron;těvnosti str&aacute;nky.
Vliv změn titulků na konverzeZměna titulku může tak&eacute; ovlivnit m&iacute;ru konverz&iacute; na va&scaron;&iacute; str&aacute;nce. Pokud je nov&yacute; titulek v&iacute;ce přesvědčiv&yacute; a motivuje uživatele k akci, může to v&eacute;st k vy&scaron;&scaron;&iacute; m&iacute;ře konverz&iacute;. Na druhou stranu, pokud je nov&yacute; titulek m&eacute;ně přesvědčiv&yacute; nebo m&eacute;ně motivuj&iacute;c&iacute;, může to v&eacute;st k niž&scaron;&iacute; m&iacute;ře konverz&iacute;.

Jak se vyhnout negativn&iacute;m dopadům změn titulků

Důkladn&yacute; v&yacute;zkum kl&iacute;čov&yacute;ch slovPřed proveden&iacute;m jak&yacute;chkoli změn v titulc&iacute;ch je důležit&eacute; prov&eacute;st důkladn&yacute; v&yacute;zkum kl&iacute;čov&yacute;ch slov. Kl&iacute;čov&aacute; slova jsou z&aacute;kladn&iacute;m stavebn&iacute;m kamenem SEO a mohou m&iacute;t velk&yacute; vliv na to, jak je va&scaron;e str&aacute;nka hodnocena ve vyhled&aacute;vač&iacute;ch. Při v&yacute;běru kl&iacute;čov&yacute;ch slov zvažte, jak jsou relevantn&iacute; pro obsah va&scaron;&iacute; str&aacute;nky, jak často jsou vyhled&aacute;v&aacute;ny a jak je konkurence pro tato kl&iacute;čov&aacute; slova.
Testov&aacute;n&iacute; a sledov&aacute;n&iacute; v&yacute;sledkůPokud provedete změny v titulc&iacute;ch, je důležit&eacute; tyto změny sledovat a měřit jejich v&yacute;sledky. To v&aacute;m umožn&iacute; zjistit, zda va&scaron;e změny vedly k pozitivn&iacute;m nebo negativn&iacute;m v&yacute;sledkům. Můžete sledovat metriky jako je pozice ve vyhled&aacute;v&aacute;n&iacute;, m&iacute;ra prokliku (CTR) a n&aacute;v&scaron;těvnost str&aacute;nky. Pokud zjist&iacute;te, že va&scaron;e změny vedly k negativn&iacute;m v&yacute;sledkům, můžete se rozhodnout vr&aacute;tit se k původn&iacute;mu titulku nebo vyzkou&scaron;et něco jin&eacute;ho.
Zohledněn&iacute; uživatelsk&eacute; zku&scaron;enostiPři změně titulků je tak&eacute; důležit&eacute; zohlednit uživatelskou zku&scaron;enost. Titulek je jedn&iacute;m z prvn&iacute;ch prvků, kter&eacute; uživatel&eacute; vid&iacute;, když nav&scaron;t&iacute;v&iacute; va&scaron;i str&aacute;nku, a může m&iacute;t velk&yacute; vliv na jejich dojem z va&scaron;&iacute; str&aacute;nky. Ujistěte se, že v&aacute;&scaron; titulek je přesn&yacute;, popisn&yacute; a přitažliv&yacute; pro uživatele.
Použit&iacute; profesion&aacute;ln&iacute;ch SEO n&aacute;strojůExistuj&iacute; různ&eacute; SEO n&aacute;stroje, kter&eacute; v&aacute;m mohou pomoci optimalizovat va&scaron;e titulky a sledovat v&yacute;sledky va&scaron;ich změn. Tyto n&aacute;stroje mohou poskytnout cenn&eacute; informace a n&aacute;hledy, kter&eacute; v&aacute;m pomohou udělat informovan&eacute; rozhodnut&iacute; o tom, jak nejl&eacute;pe upravit va&scaron;e titulky.

N&aacute;stroje pro kontrolu a vylep&scaron;en&iacute; titulků
Pod&iacute;vejte se na p&aacute;r vybran&yacute;ch n&aacute;strojů, kter&eacute; V&aacute;m pomohou s optimalizac&iacute; Va&scaron;ich titulků.

Meta Title TestTento n&aacute;stroj v&aacute;m umožn&iacute; zkontrolovat, zda v&aacute;&scaron; webov&yacute; titulek splňuje z&aacute;kladn&iacute; SEO požadavky. Zobrazuje n&aacute;zev va&scaron;&iacute; str&aacute;nky ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;, na vrcholu prohl&iacute;žeče uživatele a tak&eacute; když je va&scaron;e str&aacute;nka uložena v seznamu obl&iacute;ben&yacute;ch. Stručn&yacute;, popisn&yacute; titulek, kter&yacute; přesně odr&aacute;ž&iacute; t&eacute;ma va&scaron;&iacute; str&aacute;nky, je důležit&yacute; pro dobr&eacute; hodnocen&iacute; ve vyhled&aacute;vač&iacute;ch.
Meta Length CheckerTento n&aacute;stroj v&aacute;m umožn&iacute; zkontrolovat d&eacute;lku va&scaron;eho titulku. D&eacute;lka titulku je důležit&yacute; faktor v SEO, protože př&iacute;li&scaron; dlouh&eacute; titulky mohou b&yacute;t ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute; zkr&aacute;ceny.
Google SERP Snippet Optimization ToolTento n&aacute;stroj v&aacute;m umožn&iacute; optimalizovat, jak se v&aacute;&scaron; titulek zobraz&iacute; ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute; Google (SERP). Můžete experimentovat s různ&yacute;mi titulky a zjistit, jak se budou zobrazovat ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;.
Screaming FrogScreaming Frog je n&aacute;stroj pro optimalizaci SEO, kter&yacute; v&aacute;m umožn&iacute; optimalizovat titulky, meta popisy a dal&scaron;&iacute; aspekty va&scaron;eho webu. Tento n&aacute;stroj v&aacute;m může pomoci vylep&scaron;it hodnocen&iacute; va&scaron;eho webu ve vyhled&aacute;vač&iacute;ch.


Při použ&iacute;v&aacute;n&iacute; těchto n&aacute;strojů je důležit&eacute; m&iacute;t na paměti, že nejlep&scaron;&iacute; praxe SEO se mohou časem měnit, takže je důležit&eacute; b&yacute;t vždy na vrcholu nejnověj&scaron;&iacute;ch trendů a doporučen&iacute;.
12 tipů pro vylep&scaron;en&iacute; titulku

Použijte kl&iacute;čov&aacute; slovaKl&iacute;čov&aacute; slova jsou z&aacute;kladem SEO. Ujistěte se, že va&scaron;e kl&iacute;čov&aacute; slova jsou v titulku a že jsou relevantn&iacute; pro obsah str&aacute;nky.
Buďte stručn&iacute; a jasn&iacute;Titulek by měl b&yacute;t stručn&yacute; a jasn&yacute;. Měl by rychle a efektivně reflektovat, o čem je str&aacute;nka.
Použijte č&iacute;slaČ&iacute;sla v titulku mohou b&yacute;t velmi &uacute;činn&aacute;. Např&iacute;klad "10 tipů pro vylep&scaron;en&iacute; SEO" je v&iacute;ce přitažliv&yacute; než "Tipy pro vylep&scaron;en&iacute; SEO".
Použijte akčn&iacute; slovesaAkčn&iacute; slovesa mohou čten&aacute;ře motivovat k kliknut&iacute;. Např&iacute;klad "Zjistěte, jak vylep&scaron;it SEO" je lep&scaron;&iacute; využit&iacute; než "Vylep&scaron;en&iacute; SEO".
Vytvořte zvědavostPoužit&iacute; tajemstv&iacute; nebo zvědavosti v titulku může motivovat čten&aacute;ře k tomu, aby chtěli vědět v&iacute;ce.
Použijte emocion&aacute;ln&iacute; slovaEmocion&aacute;ln&iacute; slova mohou čten&aacute;ře v&iacute;ce zapojit a motivovat je k akci.
Ujistěte se, že titulek odpov&iacute;d&aacute; obsahu str&aacute;nkyNeslibujte nic v titulku, co obsah str&aacute;nky nesplňuje. To by mohlo v&eacute;st k vysok&eacute; m&iacute;ře odchodů a mohlo by to po&scaron;kodit va&scaron;e SEO.
Použijte unik&aacute;tn&iacute; titulky pro každou str&aacute;nkuDuplicitn&iacute; titulky mohou b&yacute;t matouc&iacute; pro vyhled&aacute;vače a mohou po&scaron;kodit va&scaron;e SEO.
Optimalizujte pro mobiln&iacute; zař&iacute;zen&iacute;Ujistěte se, že v&aacute;&scaron; titulek vypad&aacute; dobře na mobiln&iacute;ch zař&iacute;zen&iacute;ch, kde může b&yacute;t zobrazeno m&eacute;ně znaků.
Testujte a upravujteSEO je neust&aacute;l&yacute; proces. Testujte různ&eacute; titulky a sledujte, kter&eacute; funguj&iacute; nejl&eacute;pe.
Nezapomeňte na značku (brandbuilding)Značky mohou b&yacute;t užitečn&eacute; pro zv&yacute;&scaron;en&iacute; viditelnosti značky a zlep&scaron;en&iacute; SEO.
Použijte n&aacute;stroje pro kontrolu titulkůExistuj&iacute; n&aacute;stroje, kter&eacute; v&aacute;m mohou pomoci optimalizovat a vylep&scaron;it va&scaron;e titulky.

Spr&aacute;va titulků v redakčn&iacute;ch syst&eacute;mech
Redakčn&iacute; syst&eacute;my, zn&aacute;m&eacute; tak&eacute; jako Content Management Systems (CMS), jsou n&aacute;stroje, kter&eacute; usnadňuj&iacute; spr&aacute;vu a publikaci obsahu na webov&yacute;ch str&aacute;nk&aacute;ch. Tyto syst&eacute;my umožňuj&iacute; uživatelům vytv&aacute;řet, upravovat a publikovat obsah bez potřeby pokročil&yacute;ch technick&yacute;ch dovednost&iacute;.
V kontextu SEO a spr&aacute;vy titulků jsou redakčn&iacute; syst&eacute;my kl&iacute;čov&eacute;. Vět&scaron;ina modern&iacute;ch CMS umožňuje uživatelům snadno přid&aacute;vat a upravovat titulky str&aacute;nek, což je z&aacute;sadn&iacute; pro optimalizaci pro vyhled&aacute;vače. Někter&eacute; syst&eacute;my dokonce poskytuj&iacute; n&aacute;stroje pro sledov&aacute;n&iacute; d&eacute;lky titulku a zobrazuj&iacute; varov&aacute;n&iacute;, pokud je titulek př&iacute;li&scaron; dlouh&yacute; nebo kr&aacute;tk&yacute;.
Při v&yacute;běru redakčn&iacute;ho syst&eacute;mu je důležit&eacute; zv&aacute;žit, jak dobře syst&eacute;m podporuje SEO. Někter&eacute; funkce, kter&eacute; by měl m&iacute;t kvalitn&iacute; redakčn&iacute; syst&eacute;m, zahrnuj&iacute; možnost snadno upravovat titulky, meta popisky a dal&scaron;&iacute; SEO relevantn&iacute; prvky, podporu pro strukturovan&aacute; data a schopnost generovat a upravovat soubory sitemap a robots.txt.
V&yacute;běr spr&aacute;vn&eacute;ho redakčn&iacute;ho syst&eacute;mu může m&iacute;t z&aacute;sadn&iacute; vliv na &uacute;spěch va&scaron;eho SEO. Proto je důležit&eacute; pečlivě zv&aacute;žit v&scaron;echny možnosti a vybrat syst&eacute;m, kter&yacute; nejl&eacute;pe vyhovuje va&scaron;im potřeb&aacute;m.
Tip k titulkům ve Wordpressu
Jedn&iacute;m z tipů pro spr&aacute;vu titulků v redakčn&iacute;m syst&eacute;mu Wordpress je využit&iacute; SEO pluginů, jako je RankMath nebo Yoast SEO. Tyto pluginy poskytuj&iacute; pokročil&eacute; n&aacute;stroje pro spr&aacute;vu titulků a dal&scaron;&iacute;ch SEO prvků. Umožňuj&iacute; např&iacute;klad nastavit form&aacute;t titulků pro různ&eacute; typy str&aacute;nek, automaticky generovat titulky na z&aacute;kladě definovan&yacute;ch &scaron;ablon nebo analyzovat titulky a poskytovat zpětnou vazbu pro jejich optimalizaci.

Titulek a soci&aacute;ln&iacute; s&iacute;tě
Soci&aacute;ln&iacute; s&iacute;tě se staly ned&iacute;lnou souč&aacute;st&iacute; na&scaron;eho každodenn&iacute;ho života a hraj&iacute; kl&iacute;čovou roli v digit&aacute;ln&iacute;m marketingu. Když sd&iacute;l&iacute;me URL na&scaron;ich webov&yacute;ch str&aacute;nek na těchto platform&aacute;ch, titulek str&aacute;nky se st&aacute;v&aacute; hlavn&iacute;m nadpisem, kter&yacute; uživatel&eacute; vid&iacute;. M&iacute;t atraktivn&iacute; a přesvědčiv&yacute; titulek může v&yacute;razně zv&yacute;&scaron;it proklikovost na v&aacute;&scaron; web.
OpenGraph, TwitterCards a Schema.org: Tři pil&iacute;ře soci&aacute;ln&iacute;ch s&iacute;t&iacute;
OpenGraph, TwitterCards a Schema.org jsou značky, kter&eacute; umožňuj&iacute; webov&yacute;m str&aacute;nk&aacute;m komunikovat s soci&aacute;ln&iacute;mi s&iacute;těmi a poskytnout jim specifick&eacute; informace o obsahu str&aacute;nky. Pokud na va&scaron;&iacute; str&aacute;nce chyb&iacute; tyto značky, soci&aacute;ln&iacute; s&iacute;tě využij&iacute; titulek str&aacute;nky jako nadpis při sd&iacute;len&iacute; URL. Doporučuji v&scaron;ak tyto 3 tagy na Va&scaron;em webu uv&aacute;dět - až v krajn&iacute;m př&iacute;padě se můžete spol&eacute;hat na titulek. Nav&iacute;c m&aacute;te možnost m&iacute;t rozd&iacute;ln&eacute; titulky jak ve vyhled&aacute;vač&iacute;ch, tak na soci&aacute;ln&iacute;ch s&iacute;t&iacute;ch - což se někdy hod&iacute;, přeci jen je chov&aacute;n&iacute; c&iacute;lov&eacute; skupiny na soci&aacute;ln&iacute;ch s&iacute;t&iacute;ch jin&eacute; než ve vyhled&aacute;vač&iacute;ch.
Z&aacute;věr a dal&scaron;&iacute; kroky
V&yacute;znam titulku pro SEO je nesm&iacute;rn&yacute;. Je to jedna z prvn&iacute;ch věc&iacute;, kterou uživatel&eacute; i vyhled&aacute;vače vid&iacute;, když naraz&iacute; na va&scaron;i webovou str&aacute;nku. Spr&aacute;vně napsan&yacute; titulek může zv&yacute;&scaron;it va&scaron;i n&aacute;v&scaron;těvnost, zlep&scaron;it va&scaron;e hodnocen&iacute; v SERP a zv&yacute;&scaron;it celkovou viditelnost va&scaron;eho webu.

Použijte n&aacute;stroje pro kontrolu titulků: Existuj&iacute; různ&eacute; n&aacute;stroje, kter&eacute; v&aacute;m mohou pomoci zkontrolovat a vylep&scaron;it va&scaron;e titulky. Využijte je k optimalizaci va&scaron;ich titulků.
Experimentujte a testujte: SEO je neust&aacute;l&yacute; proces. Nebojte se experimentovat s různ&yacute;mi form&aacute;ty a slovy v titulc&iacute;ch a sledujte, co funguje nejl&eacute;pe pro va&scaron;e publikum a va&scaron;e c&iacute;le.
Nezapomeňte na ostatn&iacute; aspekty SEO: Zat&iacute;mco titulky jsou důležit&eacute;, nezapomeňte na ostatn&iacute; aspekty SEO, jako je meta popis, URL struktura, intern&iacute; a extern&iacute; odkazy, obsah str&aacute;nky a dal&scaron;&iacute;.
Vzděl&aacute;vejte se: SEO se neust&aacute;le měn&iacute; a vyv&iacute;j&iacute;. Udržujte se v obraze o nejnověj&scaron;&iacute;ch trendech a nejlep&scaron;&iacute;ch postupech v SEO, abyste mohli svůj web neust&aacute;le optimalizovat a zlep&scaron;ovat.

Pamatujte, že &uacute;spěch v SEO nen&iacute; o jednor&aacute;zov&eacute;m &uacute;sil&iacute;, ale o neust&aacute;l&eacute;m zlep&scaron;ov&aacute;n&iacute; a přizpůsobov&aacute;n&iacute; se měn&iacute;c&iacute;mu digit&aacute;ln&iacute;mu prostřed&iacute;. S těmito tipy a n&aacute;stroji jste nyn&iacute; připraveni vytv&aacute;řet efektivn&iacute; titulky, kter&eacute; přitahuj&iacute; n&aacute;v&scaron;těvn&iacute;ky a zlep&scaron;uj&iacute; va&scaron;e SEO.
FAQ / Často kladen&eacute; dotazy
Co je titulek str&aacute;nky?
Titulek str&aacute;nky je kr&aacute;tk&yacute; text, kter&yacute; popisuje obsah str&aacute;nky. Je to jedna z prvn&iacute;ch věc&iacute;, kterou uživatel&eacute; i vyhled&aacute;vače vid&iacute;, když naraz&iacute; na va&scaron;i webovou str&aacute;nku.
Jak zkontrolovat titulky?
Titulky můžete zobrazit v n&aacute;zvu z&aacute;ložky u va&scaron;eho prohl&iacute;žeče nebo pomoc&iacute; n&aacute;strojů pro SEO, kter&eacute; umožňuj&iacute; zobrazit a analyzovat meta data webov&yacute;ch str&aacute;nek (ačkoliv title nepatř&iacute; mezi meta data). V neposledn&iacute; řadě můžete rychle překontrolovat titulky pomoc&iacute; oper&aacute;toru site.
Jak dlouh&yacute; by měl b&yacute;t titulek str&aacute;nky?

Pro GoogleGoogle obecně doporučuje, aby titulky str&aacute;nek byly mezi 50-60 znaky. Pokud je titulek del&scaron;&iacute;, může b&yacute;t ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute; zkr&aacute;cen.
Pro BingBing nezveřejnil konkr&eacute;tn&iacute; doporučen&iacute; pro d&eacute;lku titulku, ale obecně se doporučuje držet se standardu 50-60 znaků, kter&yacute; je běžn&yacute; pro vět&scaron;inu vyhled&aacute;vačů.
Pro YahooPodobně jako Bing, ani Yahoo nezveřejnil konkr&eacute;tn&iacute; doporučen&iacute; pro d&eacute;lku titulku. Obecně se doporučuje držet se standardu 50-60 znaků.
Pro dal&scaron;&iacute; vyhled&aacute;vačePro ostatn&iacute; vyhled&aacute;vače se doporučuje držet se obecn&eacute;ho pravidla 50-60 znaků. Je důležit&eacute; m&iacute;t na paměti, že kromě d&eacute;lky by titulek měl b&yacute;t tak&eacute; relevantn&iacute; a popisn&yacute;.
]]></content:encoded>
                
                                    <category><![CDATA[SEO]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/4a/4a8f8026-0cae-489e-8f72-4b9e61b4bb02/conversions/title-tag-full.png" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Strukturovaná data – kompletní průvodce pro SEO]]></title>
                <link>https://www.pavelzanek.com/cs/blog/structured-data</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/structured-data</guid>
                <pubDate>Wed, 07 Jun 2023 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Průvodce strukturovanými daty pro SEO: Co jsou strukturovaná data, jak je implementovat na webu a jak mohou zlepšit vaše výsledky ve vyhledávačích.]]></description>
                
                                    <content:encoded><![CDATA[&Uacute;vod do strukturovan&yacute;ch dat
Strukturovan&aacute; data jsou kl&iacute;čov&yacute;m prvkem pro efektivn&iacute; SEO strategii. Pom&aacute;haj&iacute; vyhled&aacute;vačům, jako je Google, l&eacute;pe pochopit obsah na va&scaron;em webu a poskytuj&iacute; jim přesn&eacute; informace, kter&eacute; mohou zlep&scaron;it va&scaron;i viditelnost ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;.
Strukturovan&aacute; data jsou v podstatě k&oacute;d, kter&yacute; je přid&aacute;n na va&scaron;i webovou str&aacute;nku a kter&yacute; vyhled&aacute;vačům poskytuje v&iacute;ce informac&iacute; o obsahu str&aacute;nky. Mohou to b&yacute;t např&iacute;klad informace o autorovi čl&aacute;nku, hodnocen&iacute; produktu nebo datum a m&iacute;sto kon&aacute;n&iacute; ud&aacute;losti.
Co jsou strukturovan&aacute; data?
Strukturovan&aacute; data jsou specifick&yacute; form&aacute;t informac&iacute;, kter&yacute; je snadno srozumiteln&yacute; pro stroje. Jsou to v podstatě kousky k&oacute;du, kter&eacute; jsou přid&aacute;ny na webovou str&aacute;nku a kter&eacute; vyhled&aacute;vačům, jako je Google nebo Seznam, poskytuj&iacute; podrobn&eacute; informace o obsahu str&aacute;nky.
Form&aacute;ty strukturovan&yacute;ch dat: JSON-LD, Microdata, RDFa
Existuj&iacute; různ&eacute; form&aacute;ty, kter&eacute; můžete použ&iacute;t pro přid&aacute;n&iacute; strukturovan&yacute;ch dat na va&scaron;i webovou str&aacute;nku. Nejčastěji použ&iacute;van&eacute; form&aacute;ty jsou JSON-LD, Microdata a RDFa.

JSON-LD je form&aacute;t, kter&yacute; je doporučen&yacute; Googlem. Je to nejjednodu&scaron;&scaron;&iacute; form&aacute;t pro přid&aacute;n&iacute; strukturovan&yacute;ch dat na webovou str&aacute;nku a je tak&eacute; nejflexibilněj&scaron;&iacute;.
Microdata je dal&scaron;&iacute;m form&aacute;tem, kter&yacute; můžete použ&iacute;t. Je trochu složitěj&scaron;&iacute; než JSON-LD, ale je tak&eacute; velmi flexibiln&iacute;.
RDFa je form&aacute;t, kter&yacute; je často použ&iacute;v&aacute;n pro přid&aacute;n&iacute; strukturovan&yacute;ch dat na webov&eacute; str&aacute;nky, kter&eacute; jsou postaveny na HTML5.

Jak strukturovan&aacute; data ovlivňuj&iacute; SEO
Strukturovan&aacute; data hraj&iacute; kl&iacute;čovou roli v SEO, protože pom&aacute;haj&iacute; vyhled&aacute;vačům l&eacute;pe pochopit obsah na va&scaron;em webu. Když vyhled&aacute;vače l&eacute;pe rozum&iacute; obsahu va&scaron;eho webu, mohou přesněji indexovat a klasifikovat va&scaron;e str&aacute;nky, což může v&eacute;st k lep&scaron;&iacute;mu um&iacute;stěn&iacute; ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;.
Jak strukturovan&aacute; data zlep&scaron;uj&iacute; viditelnost ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;
Strukturovan&aacute; data tak&eacute; umožňuj&iacute; vyhled&aacute;vačům zobrazovat tzv. roz&scaron;&iacute;řen&eacute; v&yacute;sledky vyhled&aacute;v&aacute;n&iacute;, kter&eacute; mohou zv&yacute;&scaron;it m&iacute;ru prokliku na va&scaron;i webovou str&aacute;nku. Roz&scaron;&iacute;řen&eacute; v&yacute;sledky vyhled&aacute;v&aacute;n&iacute; mohou zahrnovat prvky, jako jsou hvězdičkov&aacute; hodnocen&iacute;, obr&aacute;zky a dal&scaron;&iacute; informace, kter&eacute; mohou přil&aacute;kat pozornost uživatelů.
Př&iacute;klady využit&iacute; strukturovan&yacute;ch dat pro SEO
Existuje mnoho způsobů, jak můžete využ&iacute;t strukturovan&aacute; data pro zlep&scaron;en&iacute; SEO. Např&iacute;klad, pokud m&aacute;te na sv&eacute;m webu čl&aacute;nek o receptu, můžete použ&iacute;t strukturovan&aacute; data k poskytnut&iacute; konkr&eacute;tn&iacute;ch informac&iacute; o receptu, jako je doba př&iacute;pravy, počet porc&iacute;, hodnocen&iacute; receptu a dal&scaron;&iacute;. Tato strukturovan&aacute; data mohou vyhled&aacute;vačům pomoci l&eacute;pe pochopit obsah va&scaron;eho čl&aacute;nku a zobrazit ho ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute; pro relevantn&iacute; dotazy.

Jak implementovat strukturovan&aacute; data na webu
Pod&iacute;vejte se na př&iacute;klad/uk&aacute;zku nasazen&iacute; strukturovan&yacute;ch dat pomoc&iacute; form&aacute;tu JSON-LD:

Vyberte typ strukturovan&yacute;ch dat, kter&yacute; chcete implementovat: Existuje mnoho různ&yacute;ch typů strukturovan&yacute;ch dat, kter&eacute; můžete implementovat na sv&eacute;m webu, včetně dat pro čl&aacute;nky, produkty, recenze, ud&aacute;losti a mnoho dal&scaron;&iacute;ch. Typ strukturovan&yacute;ch dat, kter&yacute; zvol&iacute;te, by měl odpov&iacute;dat obsahu va&scaron;eho webu.
Vytvořte JSON-LD skript pro va&scaron;e strukturovan&aacute; data: JSON-LD je form&aacute;t, kter&yacute; doporučuje Google pro implementaci strukturovan&yacute;ch dat. Tento skript by měl obsahovat v&scaron;echny informace, kter&eacute; chcete vyhled&aacute;vačům poskytnout o va&scaron;em obsahu.
Vložte JSON-LD skript do HTML k&oacute;du va&scaron;eho webu: Tento skript by měl b&yacute;t vložen do hlavičky (&lt;head&gt;) va&scaron;eho HTML k&oacute;du.
Otestujte sv&eacute; strukturovan&eacute; data: Po implementaci strukturovan&yacute;ch dat byste měli využ&iacute;t n&aacute;stroje jako Google's Structured Data Testing Tool k ověřen&iacute;, že va&scaron;e strukturovan&aacute; data jsou spr&aacute;vně implementov&aacute;na a že vyhled&aacute;vače je mohou spr&aacute;vně č&iacute;st.

N&aacute;stroje pro implementaci strukturovan&yacute;ch dat
Existuje řada n&aacute;strojů, kter&eacute; mohou usnadnit implementaci strukturovan&yacute;ch dat na va&scaron;em webu. Někter&eacute; z těchto n&aacute;strojů zahrnuj&iacute;:

Google's Structured Data Markup Helper: Tento n&aacute;stroj v&aacute;m pomůže vytvořit JSON-LD skript pro va&scaron;e strukturovan&aacute; data.
Schema.org: Toto je hlavn&iacute; zdroj pro různ&eacute; typy strukturovan&yacute;ch dat, kter&eacute; můžete implementovat na sv&eacute;m webu.
WordPress pluginy: Pokud použ&iacute;v&aacute;te WordPress pro spr&aacute;vu sv&eacute;ho webu, existuj&iacute; pluginy, kter&eacute; mohou automatizovat proces implementace strukturovan&yacute;ch dat - např&iacute;klad RankMath.

Typy strukturovan&yacute;ch dat
Strukturovan&aacute; data jsou kl&iacute;čov&yacute;m prvkem modern&iacute;ho SEO a jak již bylo řečeno, jejich spr&aacute;vn&eacute; využit&iacute; může v&yacute;razně zlep&scaron;it viditelnost va&scaron;eho webu ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;. Existuje několik různ&yacute;ch typů strukturovan&yacute;ch dat, kter&eacute; mohou b&yacute;t využity k různ&yacute;m &uacute;čelům.



Typ
Popis






Schema.org
Schema.org je společn&yacute; projekt společnost&iacute; Google, Microsoft, Yahoo a Yandex, kter&yacute; poskytuje sd&iacute;lenou sb&iacute;rku sch&eacute;mat pro strukturovan&aacute; data. Tato sch&eacute;mata pokr&yacute;vaj&iacute; &scaron;irokou &scaron;k&aacute;lu typů obsahu, včetně čl&aacute;nků, knih, filmů, hudebn&iacute;ch nahr&aacute;vek, recenz&iacute;, produktů a mnoho dal&scaron;&iacute;ch. Schema.org je doporučen&yacute;m form&aacute;tem pro strukturovan&aacute; data od Googlu.


Open Graph
Open Graph je typ strukturovan&yacute;ch dat, kter&yacute; byl původně vyvinut společnost&iacute; Facebook. Je navržen tak, aby umožnil lep&scaron;&iacute; integraci webov&yacute;ch str&aacute;nek s soci&aacute;ln&iacute;mi m&eacute;dii, poskytov&aacute;n&iacute;m metadat, kter&aacute; mohou b&yacute;t použita k vytv&aacute;řen&iacute; bohat&yacute;ch "snippetů" pro sd&iacute;len&iacute; na soci&aacute;ln&iacute;ch m&eacute;di&iacute;ch.


JSON-LD
JSON-LD (JavaScript Object Notation for Linked Data) je popul&aacute;rn&iacute; form&aacute;t pro strukturovan&aacute; data, kter&yacute; je snadno čiteln&yacute; pro lidi i stroje. JSON-LD je doporučen&yacute;m form&aacute;tem pro strukturovan&aacute; data od Googlu a je &scaron;iroce podporov&aacute;n mnoha dal&scaron;&iacute;mi vyhled&aacute;vači a platformami.


Microdata
Microdata je dal&scaron;&iacute; form&aacute;t pro strukturovan&aacute; data, kter&yacute; je integrov&aacute;n př&iacute;mo do HTML k&oacute;du webov&eacute; str&aacute;nky. Ačkoli nen&iacute; tak flexibiln&iacute; jako JSON-LD, je st&aacute;le &scaron;iroce podporov&aacute;n a může b&yacute;t vhodn&yacute; pro jednodu&scaron;&scaron;&iacute; implementace strukturovan&yacute;ch dat.



Konr&eacute;tn&iacute; typy strukturovan&yacute;ch dat
Čl&aacute;nek / Zpravodajsk&yacute; čl&aacute;nek / Blogov&yacute; př&iacute;spěvek
Tento typ sch&eacute;matu je určen pro popis čl&aacute;nků a blogov&yacute;ch př&iacute;spěvků (Article / NewsArticle / BlogPosting). Čl&aacute;nek je obecněj&scaron;&iacute; typ sch&eacute;matu, kter&yacute; může b&yacute;t použit pro jak&yacute;koli textov&yacute; obsah, kter&yacute; je strukturov&aacute;n jako čl&aacute;nek. Zpravodajsk&yacute; čl&aacute;nek je specifick&yacute; typ sch&eacute;matu, kter&yacute; je často využ&iacute;v&aacute;n vydavateli pro novinov&eacute; čl&aacute;nky. Blogov&yacute; př&iacute;spěvek je typ sch&eacute;matu, kter&yacute; je často využ&iacute;v&aacute;n organizacemi s webov&yacute;mi str&aacute;nkami obsahuj&iacute;c&iacute;mi blogov&eacute; př&iacute;spěvky. Tento typ sch&eacute;matu může obsahovat informace jako je autor, datum publikace, obr&aacute;zek a mnoho dal&scaron;&iacute;ho.
Ud&aacute;lost
Typ sch&eacute;matu Ud&aacute;lost (Event) popisuje jakoukoli pl&aacute;novanou aktivitu, včetně jej&iacute;ho m&iacute;sta a času zač&aacute;tku a konce. Může se jednat o konference, koncerty, sportovn&iacute; ud&aacute;losti, v&yacute;stavy a mnoho dal&scaron;&iacute;ho. Tento typ sch&eacute;matu může obsahovat informace jako je n&aacute;zev ud&aacute;losti, popis, datum a čas, m&iacute;sto kon&aacute;n&iacute;, organiz&aacute;tor a dal&scaron;&iacute; relevantn&iacute; informace.
Nab&iacute;dka pr&aacute;ce
Typ sch&eacute;matu Nab&iacute;dka pr&aacute;ce (Job Posting)&nbsp;popisuje konkr&eacute;tn&iacute; nab&iacute;dku pr&aacute;ce, včetně informac&iacute; jako je n&aacute;zev pozice, popis pr&aacute;ce, typ zaměstn&aacute;n&iacute; (pln&yacute; &uacute;vazek, č&aacute;stečn&yacute; &uacute;vazek, dočasn&yacute;, atd.), plat, měna, m&iacute;sto pr&aacute;ce, organizace, kter&aacute; nab&iacute;z&iacute; pr&aacute;ci, a dal&scaron;&iacute; relevantn&iacute; informace.

M&iacute;stn&iacute; podnik
Typ sch&eacute;matu M&iacute;stn&iacute; podnik (Local Business) popisuje fyzick&yacute; obchod nebo podnik, včetně informac&iacute; jako jsou otev&iacute;rac&iacute; hodiny, poloha, kontaktn&iacute; informace, typ podniku (restaurace, obchod, kav&aacute;rna, atd.), hodnocen&iacute; a dal&scaron;&iacute;. Tento typ sch&eacute;matu je velmi užitečn&yacute; pro lok&aacute;ln&iacute; SEO a pro zlep&scaron;en&iacute; viditelnosti podniku v lok&aacute;ln&iacute;ch vyhled&aacute;v&aacute;n&iacute;ch.
Organizace
Typ sch&eacute;matu Organizace (Organization) popisuje jakoukoli organizaci, včetně webov&eacute; adresy, profilů na soci&aacute;ln&iacute;ch m&eacute;di&iacute;ch, kontaktn&iacute;ch informac&iacute; a dal&scaron;&iacute;ch. Tento typ sch&eacute;matu je často využ&iacute;v&aacute;n pro organizace, kter&eacute; lid&eacute; fyzicky nenav&scaron;těvuj&iacute;, jako jsou online obchody, neziskov&eacute; organizace, vl&aacute;dn&iacute; organizace a dal&scaron;&iacute;.
Osoba
Typ sch&eacute;matu Osoba (Person) popisuje jednotlivce. Tento typ sch&eacute;matu může obsahovat informace jako je jm&eacute;no, titul, pracovn&iacute; pozice, kontaktn&iacute; informace, profil na soci&aacute;ln&iacute;ch m&eacute;di&iacute;ch, vzděl&aacute;n&iacute;, dovednosti a dal&scaron;&iacute;. Tento typ sch&eacute;matu je často využ&iacute;v&aacute;n v souvislosti s definov&aacute;n&iacute;m typu sch&eacute;matu Autor pro čl&aacute;nek, ale může b&yacute;t tak&eacute; použit pro popis jak&eacute;koliv osoby, včetně veřejně zn&aacute;m&yacute;ch osobnost&iacute;, zaměstnanců, členů t&yacute;mu a dal&scaron;&iacute;ch.
Produkt
Typ sch&eacute;matu Produkt (Product) popisuje jak&yacute;koli v&yacute;robek nebo službu nab&iacute;zenou organizac&iacute;. Tento typ sch&eacute;matu může obsahovat informace jako je n&aacute;zev produktu, popis, značka, cena, recenze, nab&iacute;dky a dal&scaron;&iacute;. Tento typ sch&eacute;matu je velmi užitečn&yacute; pro e-commerce weby a pro zlep&scaron;en&iacute; viditelnosti produktů v organick&yacute;ch v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;.

Recept
Typ sch&eacute;matu Recept (Recipe) popisuje jak&yacute;koli recept, včetně ingredienc&iacute;, postupu př&iacute;pravy, doby př&iacute;pravy a vařen&iacute;, počtu porc&iacute;, nutričn&iacute;ch informac&iacute;, obr&aacute;zků a dal&scaron;&iacute;ch. Tento typ sch&eacute;matu je velmi popul&aacute;rn&iacute; na webov&yacute;ch str&aacute;nk&aacute;ch s recepty a může pomoci zlep&scaron;it viditelnost receptů v organick&yacute;ch v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;.
Recenze
Typ sch&eacute;matu Recenze (Review) popisuje recenzi buď konkr&eacute;tn&iacute; položky nebo sb&iacute;rky položek, nebo kritickou recenzi. Tento typ sch&eacute;matu může obsahovat informace jako je autor recenze, hodnocen&iacute;, datum publikace recenze, položka, kter&aacute; je recenzov&aacute;na, a dal&scaron;&iacute;. Tento typ sch&eacute;matu je velmi užitečn&yacute; pro weby, kter&eacute; obsahuj&iacute; recenze produktů, služeb, m&iacute;st, ud&aacute;lost&iacute; a dal&scaron;&iacute;ch.
Uk&aacute;zky nasazen&iacute; strukturovan&yacute;ch dat
Pro lep&scaron;&iacute; pochopen&iacute; strukturovan&yacute;ch dat se pod&iacute;vejme na několik uk&aacute;zek jejich nasazen&iacute;.
Uk&aacute;zka nasazen&iacute; pro typ Organizace
Tento uk&aacute;zkov&yacute; k&oacute;d JSON-LD představuje strukturovan&aacute; data pro organizaci s n&aacute;zvem "PavelZanek.cz". K&oacute;d definuje několik kl&iacute;čov&yacute;ch informac&iacute; o organizaci, včetně jej&iacute;ho n&aacute;zvu, URL, kontaktn&iacute;ch &uacute;dajů a zakladatele (mrk mrk).
&lt;script type="application/ld+json"&gt;
{
    "@context": "http://schema.org",
    "@type": "Organization",
    "name": "PavelZanek.com",
    "url": "https://www.pavelzanek.com",
    "sameAs": [
        "https://www.facebook.com/pavelzanekcz"
    ],
    "contactPoint": {
        "@type": "ContactPoint",
        "telephone": "+420 608 838 170",
        "contactType": "work phone number",
        "email": "info@pavelzanek.com"
    },
    "founder": {
        "@type": "Person",
        "name": "Pavel Zaněk",
        "gender": "Male",
        "jobTitle": "Developer a SEO consultant",
        "image": "https://www.pavelzanek.com/template/pavelzanek.jpeg",
        "sameAs": [
            "https://pavelzanek.cz/",
            "https://twitter.com/PavelZanek",
            "https://www.linkedin.com/in/pavelzanek/",
            "https://github.com/pavelzanek"
        ]      
    },
    "foundingDate": "2022-14-01"
}
&lt;/script&gt;
V tomto k&oacute;du je @context nastaven na "http://schema.org", což znamen&aacute;, že použ&iacute;v&aacute;me schema.org pro definov&aacute;n&iacute; strukturovan&yacute;ch dat. @type je nastaven na "Organization", což znamen&aacute;, že tato struktura dat popisuje organizaci.
"name" a "url" definuj&iacute; n&aacute;zev a webovou adresu organizace. "sameAs" je pole, kter&eacute; obsahuje odkazy na jin&eacute; webov&eacute; str&aacute;nky, kter&eacute; reprezentuj&iacute; tuto organizaci, v tomto př&iacute;padě Facebookovou str&aacute;nku.
"contactPoint" je objekt, kter&yacute; definuje kontaktn&iacute; bod organizace, včetně telefonn&iacute;ho č&iacute;sla, typu kontaktu a e-mailov&eacute; adresy.
"founder" je dal&scaron;&iacute; objekt, kter&yacute; definuje zakladatele organizace, včetně jeho jm&eacute;na, pohlav&iacute;, pracovn&iacute; pozice, obr&aacute;zku a odkazů na jeho profil na různ&yacute;ch soci&aacute;ln&iacute;ch s&iacute;t&iacute;ch a webov&yacute;ch str&aacute;nk&aacute;ch.
Nakonec "foundingDate" definuje datum založen&iacute; organizace.
Uk&aacute;zka nasazen&iacute; pro typ Osoba
Dal&scaron;&iacute; uk&aacute;zkov&yacute; k&oacute;d JSON-LD představuje strukturovan&aacute; data pro osobu jm&eacute;nem "Pavel Zaněk" (Yeah, it's me!). K&oacute;d definuje několik kl&iacute;čov&yacute;ch informac&iacute; o mně, včetně jeho jm&eacute;na, pracovn&iacute; pozice, obr&aacute;zku, pohlav&iacute;, n&aacute;rodnosti, m&iacute;sta narozen&iacute;, webov&eacute; adresy a dal&scaron;&iacute;ch.
&lt;script type="application/ld+json"&gt;
{
    "@context": "http://schema.org",
    "@type": "Person",
    "name": "Pavel Zaněk",
    "jobTitle": "Developer a SEO consultant",
    "image": {
      "@type": "ImageObject",
      "image": "https://www.pavelzanek.com/template/pavelzanek.jpeg",
      "width": "128",
      "height": "128"
    },
    "gender": "Male",
    "nationality": "Czech",
    "birthPlace": "Chrudim",
    "url": "https://www.pavelzanek.com/",
    "sameAs": [
        "https://pavelzanek.cz/",
        "https://twitter.com/PavelZanek",
        "https://www.linkedin.com/in/pavelzanek/",
        "https://github.com/pavelzanek"
    ],
    "worksFor": [
        {
            "@type": "Organization",
            "name": "PavelZanek.cz",
            "sameAs": [
                "https://www.facebook.com/pavelzanekcz"
            ]
        }
    ],
    "email": "info@pavelzanek.com",
    "telephone": "+420 608 838 170",
    "address": {
        "@type": "PostalAddress",
        "streetAddress": "Slovensk&aacute; 518",
        "addressLocality": "Chrudim",
        "postalCode": "537 05",
        "addressCountry": "Česk&aacute; republika"
    }
}
&lt;/script&gt;
Ve v&yacute;&scaron;e uveden&eacute;m k&oacute;du je @context nastaven na "http://schema.org", což znamen&aacute;, že použ&iacute;v&aacute;me schema.org pro definov&aacute;n&iacute; strukturovan&yacute;ch dat. @type je nastaven na "Person", což znamen&aacute;, že tato struktura dat popisuje osobu.
"name", "jobTitle", "gender", "nationality", "birthPlace", "url", "email", "telephone" a "address" definuj&iacute; z&aacute;kladn&iacute; informace o mně. "sameAs" je pole, kter&eacute; obsahuje odkazy na jin&eacute; webov&eacute; str&aacute;nky, kter&eacute; mě reprezentuj&iacute;.
"worksFor" je pole, kter&eacute; obsahuje objekty definuj&iacute;c&iacute; organizace, pro kter&eacute; pracuji. Každ&yacute; objekt v tomto poli m&aacute; @type nastaven na "Organization", což znamen&aacute;, že popisuje organizaci, a "name" a "sameAs", kter&eacute; definuj&iacute; n&aacute;zev organizace a odkazy na jin&eacute; webov&eacute; str&aacute;nky, kter&eacute; reprezentuj&iacute; tuto organizaci.
Uk&aacute;zka nasazen&iacute; pro typ Drobečkov&aacute; navigace
Posledn&iacute; uk&aacute;zkov&yacute; k&oacute;d JSON-LD představuje strukturovan&aacute; data pro drobečkovou navigaci (BreadcrumbList). K&oacute;d definuje strukturu navigace na webov&eacute; str&aacute;nce, včetně n&aacute;zvů a URL jednotliv&yacute;ch prvků.
&lt;script type="application/ld+json"&gt;
{
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
        {
            "@type": "ListItem",
            "position": 1,
            "name": "Home",
            "item": "https://www.pavelzanek.com/en"
        },
        {
            "@type": "ListItem",
            "position": 2,
            "name": "Contact",
            "item": "https://www.pavelzanek.com/en/contact"
        }
    ]
}
&lt;/script&gt;
V tomto k&oacute;du je @context nastaven na "https://schema.org", což opět znamen&aacute;, že použ&iacute;v&aacute;me schema.org pro definov&aacute;n&iacute; strukturovan&yacute;ch dat. @type je nyn&iacute; nastaven na "BreadcrumbList", tud&iacute;ž tato struktura dat popisuje drobečkovou navigaci.
"itemListElement" je pole, kter&eacute; obsahuje objekty definuj&iacute;c&iacute; jednotliv&eacute; prvky drobečkov&eacute; navigace. Každ&yacute; objekt v tomto poli m&aacute; @type nastaven na "ListItem", to znamen&aacute;, že popisuje položku v seznamu, a "position", "name" a "item", kter&eacute; definuj&iacute; pozici položky v seznamu, n&aacute;zev položky a URL položky.
Využit&iacute; strukturovan&yacute;ch dat
Využit&iacute; strukturovan&yacute;ch dat je &scaron;irok&eacute; a různorod&eacute;, a pokud je spr&aacute;vně implementujete, mohou v&yacute;razně přispět k &uacute;spěchu va&scaron;&iacute; online prezentace. N&aacute;sleduj&iacute;c&iacute; sekce se podrobněji věnuje někter&yacute;m z nejčastěj&scaron;&iacute;ch využit&iacute; strukturovan&yacute;ch dat.
Zlep&scaron;en&iacute; SEO
Strukturovan&aacute; data jsou jedn&iacute;m z nejdůležitěj&scaron;&iacute;ch n&aacute;strojů pro optimalizaci pro vyhled&aacute;vače (SEO). Pom&aacute;haj&iacute; vyhled&aacute;vac&iacute;m motorům l&eacute;pe porozumět obsahu va&scaron;eho webu a poskytuj&iacute; jim podrobn&eacute; informace, kter&eacute; mohou zlep&scaron;it va&scaron;e pozice ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;.
Zv&yacute;&scaron;en&iacute; viditelnosti
Strukturovan&aacute; data mohou zv&yacute;&scaron;it viditelnost va&scaron;eho webu t&iacute;m, že umožňuj&iacute; vyhled&aacute;vac&iacute;m motorům zobrazit bohat&eacute; v&yacute;sledky (Rich Snippets), jako jsou hvězdičky hodnocen&iacute;, ceny produktů, obr&aacute;zky a dal&scaron;&iacute;. Tyto bohat&eacute; v&yacute;sledky mohou zv&yacute;&scaron;it klikatelnost (CTR) va&scaron;eho odkazu ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;.
Zlep&scaron;en&iacute; uživatelsk&eacute; zku&scaron;enosti
Strukturovan&aacute; data mohou tak&eacute; zlep&scaron;it uživatelskou zku&scaron;enost t&iacute;m, že poskytuj&iacute; uživatelům v&iacute;ce informac&iacute; př&iacute;mo ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;. Např&iacute;klad, pokud m&aacute;te e-shop, můžete pomoc&iacute; strukturovan&yacute;ch dat zobrazit ceny a hodnocen&iacute; produktů př&iacute;mo ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;, což uživatelům usnadn&iacute; rozhodov&aacute;n&iacute; o koupi.
Podpora pro specifick&eacute; typy obsahu
Strukturovan&aacute; data tak&eacute; podporuj&iacute; specifick&eacute; typy obsahu, jako jsou recepty, recenze, ud&aacute;losti a dal&scaron;&iacute;. Pokud na sv&eacute;m webu poskytujete tento typ obsahu, můžete pomoc&iacute; strukturovan&yacute;ch dat zlep&scaron;it jeho prezentaci ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;.

Kontrola nasazen&iacute;
Pokud jste si nasadili strukturovan&aacute; data na v&aacute;&scaron; web, pak je vždy dobr&eacute; si je zkontrolovat &ndash; zda při implementaci nedo&scaron;lo k nějak&eacute; z&aacute;važn&eacute; chybě či n&aacute;m vyhled&aacute;vač ned&aacute; př&iacute;padn&eacute; dal&scaron;&iacute; doporučen&iacute;.
Kontrolu nasazen&iacute; můžeme udělat 2 postupy. Buď použijete n&aacute;stroj od Google &ndash; Test strukturovan&yacute;ch dat, nebo použijete Google Search Console.
Pod&iacute;vejme se tedy na prvn&iacute; způsob kontroly. Stač&iacute; přej&iacute;t do n&aacute;stroje &ldquo;Test strukturovan&yacute;ch dat&rdquo; a zadat URL adresu, na kter&eacute; chcete zkontrolovat nasazen&iacute;. Př&iacute;padně pak můžete vložit zdrojov&yacute; k&oacute;d str&aacute;nky (hod&iacute; se, pokud str&aacute;nka nen&iacute; zat&iacute;m př&iacute;stupn&aacute; veřejnosti).

N&aacute;stroj v&aacute;m po analyzov&aacute;n&iacute; zobraz&iacute;, jak&aacute; strukturovan&aacute; data jsou na konkr&eacute;tn&iacute; URL (př&iacute;padně v k&oacute;du) implementov&aacute;ny a zda neobsahuj&iacute; chyby.
Nyn&iacute; se pojďme pod&iacute;vat na druh&yacute; bod a to je otestov&aacute;n&iacute; strukturovan&yacute;ch dat pomoc&iacute; n&aacute;stroje Google Search Console. GSC n&aacute;m dok&aacute;že zobrazit, jak jsou strukturovan&aacute; data implementov&aacute;na, zda neobsahuj&iacute; chyby a vid&iacute;me průběh nasazov&aacute;n&iacute; v čase. N&aacute;stroj v&aacute;m opět zobraz&iacute; př&iacute;padně chyby nebo doporučen&iacute;, kter&eacute; můžete opravit. Jedin&yacute; rozd&iacute;l mezi GSC a n&aacute;strojem &bdquo;Test strukturovan&yacute;ch dat&ldquo; je ten, že Test strukturovan&yacute;ch dat v&aacute;m zkontroluje pouze jednu URL, kterou do n&aacute;stroje vlož&iacute;te (př&iacute;padně pak zkop&iacute;rovan&yacute; zdrojov&yacute; k&oacute;d). GSC v&aacute;m d&aacute;v&aacute; přehled v&scaron;ech str&aacute;nek, na kter&yacute;ch jsou strukturovan&aacute; data nasazena a Googlebot si jich v&scaron;iml.

Nejlep&scaron;&iacute; postupy pro strukturovan&aacute; data a SEO
Strukturovan&aacute; data se stala kl&iacute;čov&yacute;m prvkem SEO a jejich spr&aacute;vn&eacute; využit&iacute; může v&yacute;razně přispět k lep&scaron;&iacute; viditelnosti va&scaron;eho webu ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;. V tomto z&aacute;věrečn&eacute;m odd&iacute;le se pod&iacute;v&aacute;me na někter&eacute; z nejlep&scaron;&iacute;ch postupů pro strukturovan&aacute; data a SEO.

Použ&iacute;vejte spr&aacute;vn&yacute; form&aacute;t: Google doporučuje použ&iacute;vat JSON-LD pro strukturovan&aacute; data. Je to jednodu&scaron;&scaron;&iacute; a čist&scaron;&iacute; než ostatn&iacute; form&aacute;ty, jako jsou mikrodata nebo RDFa.
Označte relevantn&iacute; obsah: Ne v&scaron;echny informace na va&scaron;em webu potřebuj&iacute; strukturovan&aacute; data. Zaměřte se na kl&iacute;čov&eacute; prvky, jako jsou n&aacute;zvy produktů, recenze, ceny, atd.
Testujte a ověřujte: Google nab&iacute;z&iacute; n&aacute;stroj pro testov&aacute;n&iacute; strukturovan&yacute;ch dat, kter&yacute; můžete použ&iacute;t k ověřen&iacute; spr&aacute;vnosti va&scaron;ich dat (nebo pomoc&iacute; n&aacute;stroje Kontrola adresy URL v r&aacute;mci Google Search Console).
Aktualizujte pravidelně: Strukturovan&aacute; data by měla b&yacute;t aktualizov&aacute;na tak, aby odr&aacute;žela aktu&aacute;ln&iacute; informace.
Použ&iacute;vejte v&iacute;ce typů strukturovan&yacute;ch dat: Existuje mnoho různ&yacute;ch typů strukturovan&yacute;ch dat, kter&eacute; můžete použ&iacute;t na sv&eacute;m webu. Např&iacute;klad, můžete použ&iacute;t strukturovan&aacute; data pro recenze, recepty, produkty, ud&aacute;losti a mnoho dal&scaron;&iacute;ho.

Z&aacute;věr
Strukturovan&aacute; data jsou siln&yacute;m n&aacute;strojem, kter&yacute; může v&yacute;razně zlep&scaron;it viditelnost va&scaron;eho webu ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;. Přestože jejich implementace může b&yacute;t technicky n&aacute;ročn&aacute;, v&yacute;hody, kter&eacute; přin&aacute;&scaron;ej&iacute;, jsou obrovsk&eacute;. S prav&yacute;mi n&aacute;stroji a postupy můžete efektivně využ&iacute;t strukturovan&aacute; data k maximalizaci va&scaron;eho SEO &uacute;sil&iacute;.
TIP: Dal&scaron;&iacute; informace o strukturovan&yacute;ch datech naleznete v m&eacute;m dř&iacute;věj&scaron;&iacute;m př&iacute;spěvku (v če&scaron;tině).]]></content:encoded>
                
                                    <category><![CDATA[SEO]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/c3/c3a21d75-aaa9-4219-ac59-31cc41385a77/conversions/structured-data-full.png" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Kompletní průvodce ChatGPT 2023]]></title>
                <link>https://www.pavelzanek.com/cs/blog/chatgpt</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/chatgpt</guid>
                <pubDate>Tue, 06 Jun 2023 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Prozkoumejte svět ChatGPT v podrobném průvodci. Dozvíte se, co je ChatGPT, jak ho používat, jaké jsou jeho možnosti a omezení a jaké jsou plány pro jeho budoucnost.]]></description>
                
                                    <content:encoded><![CDATA[&Uacute;vod do světa ChatGPT
V&iacute;tejte v &uacute;žasn&eacute;m světě ChatGPT, pokročil&eacute; technologie uměl&eacute; inteligence. Tato technologie přin&aacute;&scaron;&iacute; nov&eacute; možnosti v oblasti textov&eacute; komunikace a otev&iacute;r&aacute; dveře k nekonečn&yacute;m možnostem interakce. ChatGPT, AI chatbot vytvořen&yacute; OpenAI v listopadu 2021, se rychle st&aacute;v&aacute; celosvětov&yacute;m fenom&eacute;nem. ChatGPT m&aacute; schopnosti od odpov&iacute;d&aacute;n&iacute; na jednoduch&eacute; ot&aacute;zky až po psan&iacute; cel&yacute;ch esejů a programů.

Co je ChatGPT?
ChatGPT je konverzačn&iacute; model uměl&eacute; inteligence, kter&yacute; je založen na modelu GPT-3 a nyn&iacute; tak&eacute; na nověj&scaron;&iacute;m modelu GPT-4. Tyto modely jsou schopny generovat lidsk&eacute; texty, odpov&iacute;dat na ot&aacute;zky a dokonce i ps&aacute;t čl&aacute;nky.
Proč je ChatGPT důležit&yacute;?
ChatGPT představuje v&yacute;znamn&yacute; krok vpřed v oblasti uměl&eacute; inteligence. Jeho schopnost generovat přesvědčiv&eacute; a smyslupln&eacute; texty otev&iacute;r&aacute; nov&eacute; možnosti v mnoha oblastech, včetně z&aacute;kaznick&eacute; podpory, obsahu webu, v&yacute;uky a mnoha dal&scaron;&iacute;ch.
Co se dozv&iacute;te v tomto čl&aacute;nku?
V tomto čl&aacute;nku se dozv&iacute;te, jak použ&iacute;vat ChatGPT. Provedu V&aacute;s z&aacute;klady použ&iacute;v&aacute;n&iacute; t&eacute;to technologie, včetně toho, jak nastavit ChatGPT, jak s n&iacute;m komunikovat a jak využ&iacute;t jeho schopnosti ve va&scaron;em každodenn&iacute;m životě a pr&aacute;ci.
Co je ChatGPT?
ChatGPT je pokročil&yacute; konverzačn&iacute; model uměl&eacute; inteligence vyvinut&yacute; společnost&iacute; OpenAI. Tento model je založen na technologii GPT (Generative Pretrained Transformer), kter&aacute; je schopna generovat souvisl&eacute; a smyslupln&eacute; texty na z&aacute;kladě předchoz&iacute;ch vstupů.
Technologie za ChatGPT
Jak již bylo zm&iacute;něno, ChatGPT využ&iacute;v&aacute; modely GPT-3 a GPT-4. GPT-3 je model jazyka s 175 miliardami parametrů, kter&yacute; byl vytvořen společnost&iacute; OpenAI. Tento model je schopen generovat překvapivě lidsk&eacute; podobn&eacute; texty a je využ&iacute;v&aacute;n v řadě aplikac&iacute;, včetně chatbotů, automatick&eacute;ho psan&iacute; čl&aacute;nků, apod.
GPT-4 je je&scaron;tě pokročilej&scaron;&iacute; model, kter&yacute; byl představen v roce 2023. Tento model m&aacute; je&scaron;tě vět&scaron;&iacute; počet parametrů a je schopen generovat je&scaron;tě přesněj&scaron;&iacute; a relevantněj&scaron;&iacute; texty. Nav&iacute;c GPT-4 je schopen zpracov&aacute;vat i obr&aacute;zky jako vstup, což otev&iacute;r&aacute; nov&eacute; možnosti pro jeho využit&iacute;. Model GPT-4 je dostupn&yacute; pouze pro majitele tarifu ChatGPT Plus (tedy placen&aacute; verze ChatGPT).
Je důležit&eacute; poznamenat, že přestože ChatGPT je velmi pokročil&yacute; n&aacute;stroj, nen&iacute; schopen generovat obr&aacute;zky. Jeho hlavn&iacute; silou je generov&aacute;n&iacute; textu. Nicm&eacute;ně, ChatGPT může b&yacute;t využit k vytv&aacute;řen&iacute; promptů pro generov&aacute;n&iacute; obr&aacute;zků. Tyto prompty mohou b&yacute;t pot&eacute; zkop&iacute;rov&aacute;ny a vloženy do jin&yacute;ch n&aacute;strojů, kter&eacute; jsou schopny generovat obr&aacute;zky na z&aacute;kladě textov&yacute;ch popisů. Takto může ChatGPT nepř&iacute;mo přispět k tvorbě vizu&aacute;ln&iacute;ho obsahu.
Jak funguje ChatGPT?
ChatGPT využ&iacute;v&aacute; velkou datab&aacute;zi předem existuj&iacute;c&iacute;ch textů pro tr&eacute;nov&aacute;n&iacute; sv&yacute;ch schopnost&iacute; generov&aacute;n&iacute; jazyka. Tento proces se naz&yacute;v&aacute; generativn&iacute; předtr&eacute;nov&aacute;n&iacute;. Model je nejprve předtr&eacute;nov&aacute;n na velk&eacute;m korpusu textu, kde se uč&iacute; předpovědět dal&scaron;&iacute; slovo v dan&eacute;m kontextu. Pot&eacute; je model jemně naladěn na konkr&eacute;tn&iacute; &uacute;lohu, jako je např&iacute;klad odpověď na ot&aacute;zky.
ChatGPT funguje na principu predikce. Když mu d&aacute;te vstup, model se pokus&iacute; předpovědět, jak&yacute; text by měl n&aacute;sledovat. Tento proces je založen na statistick&yacute;ch vzorc&iacute;ch v datech, na kter&yacute;ch byl model vy&scaron;kolen.
Schopnosti ChatGPT
ChatGPT je schopen prov&aacute;dět řadu &uacute;loh, včetně:

Generov&aacute;n&iacute; textu: ChatGPT může generovat text na z&aacute;kladě dan&eacute;ho vstupu. Text může b&yacute;t různ&eacute;ho druhu, od kr&aacute;tk&yacute;ch odpověd&iacute; na ot&aacute;zky po dlouh&eacute; čl&aacute;nky. Tato schopnost je užitečn&aacute; pro generov&aacute;n&iacute; obsahu pro webov&eacute; str&aacute;nky a blogy.
Porozuměn&iacute; kontextu:&nbsp;ChatGPT je schopen porozumět kontextu konverzace nebo textu. To znamen&aacute;, že může sledovat, o čem se hovoř&iacute;, a přizpůsobit sv&eacute; odpovědi tak, aby odpov&iacute;daly dan&eacute;mu kontextu. To je důležit&eacute; pro vytv&aacute;řen&iacute; přirozeněj&scaron;&iacute;ch a relevantněj&scaron;&iacute;ch odpověd&iacute;.
Odpov&iacute;d&aacute;n&iacute; na ot&aacute;zky: ChatGPT může odpov&iacute;dat na ot&aacute;zky na z&aacute;kladě informac&iacute;, kter&eacute; m&aacute; k dispozici. Tato schopnost je užitečn&aacute; pro vytv&aacute;řen&iacute; chatbotů a jin&yacute;ch interaktivn&iacute;ch aplikac&iacute;.
Interakce v re&aacute;ln&eacute;m čase: ChatGPT je schopen interagovat v re&aacute;ln&eacute;m čase. To znamen&aacute;, že může odpov&iacute;dat na ot&aacute;zky nebo koment&aacute;ře okamžitě, což umožňuje plynulou a přirozenou konverzaci.
Použit&iacute; v různ&yacute;ch aplikac&iacute;ch:&nbsp;ChatGPT může b&yacute;t integrov&aacute;n do různ&yacute;ch aplikac&iacute; a platform. To znamen&aacute;, že může b&yacute;t použit pro různ&eacute; &uacute;čely, jako je např&iacute;klad z&aacute;kaznick&yacute; servis, v&yacute;ukov&eacute; n&aacute;stroje, chatovac&iacute; boty a mnoho dal&scaron;&iacute;ho.
Využit&iacute; modelů GPT-3 a GPT-4:&nbsp;ChatGPT využ&iacute;v&aacute; pokročil&eacute; modely GPT-3 a GPT-4. Tyto modely jsou založeny na technologii strojov&eacute;ho učen&iacute; a umožňuj&iacute; ChatGPT generovat v&iacute;ce přesn&eacute; a kreativn&iacute; odpovědi. Model GPT-4 přin&aacute;&scaron;&iacute; je&scaron;tě vět&scaron;&iacute; v&yacute;kon a schopnost generovat text, kter&yacute; je je&scaron;tě v&iacute;ce přirozen&yacute; a přesn&yacute;.

Jak použ&iacute;vat ChatGPT?
ChatGPT je velmi flexibiln&iacute; n&aacute;stroj, kter&yacute; může b&yacute;t použit na různ&yacute;ch platform&aacute;ch a v různ&yacute;ch kontextech. Zde je několik kroků, jak zač&iacute;t použ&iacute;vat ChatGPT.
Vytvořen&iacute; &uacute;čtu
Prvn&iacute;m krokem je vytvořen&iacute; samotn&eacute;ho &uacute;čtu na platformě OpenAI. Stač&iacute; přej&iacute;t na ofici&aacute;ln&iacute; str&aacute;nky společnosti OpenAI, kde n&aacute;sledně přejdete do aplikace ChatGPT. Zde si můžete vytvořit &uacute;čet.

Přejděte na adresu https://chat.openai.com/auth/login, abyste začali vytv&aacute;řet nov&yacute; &uacute;čet.
Klikněte na tlač&iacute;tko Sign up (Registrace).
Můžete se zaregistrovat do ChatGPT pomoc&iacute; e-mailov&eacute; adresy, &uacute;čtu Google, &uacute;čtu Microsoft nebo &uacute;čtu Apple. V tomtu postupu si d&aacute;le uk&aacute;žeme možnost s využit&iacute;m e-mailov&eacute; adresy.
Zadejte svou e-mailovou adresu a klikněte na tlač&iacute;tko Continue (Pokračovat).
Vytvořte heslo a klikněte na tlač&iacute;tko Continue (Pokračovat). Va&scaron;e heslo mus&iacute; m&iacute;t minim&aacute;lně 8 znaků.
Přejděte do sv&eacute; e-mailov&eacute; schr&aacute;nky a klikněte na ověřovac&iacute; odkaz. OpenAI v&aacute;m po&scaron;le e-mail s ověřovac&iacute;m odkazem. Otevřete zpr&aacute;vu od OpenAI a klikněte na odkaz pro ověřen&iacute; va&scaron;&iacute; e-mailov&eacute; adresy.
Zadejte sv&eacute; křestn&iacute; a př&iacute;jmen&iacute; a klikněte na tlač&iacute;tko Continue (Pokračovat).
Zadejte sv&eacute; telefonn&iacute; č&iacute;slo a klikněte na tlač&iacute;tko Send code (Odeslat k&oacute;d). ChatGPT v&aacute;m po&scaron;le textovou zpr&aacute;vu pro ověřen&iacute; telefonu.
Zadejte ověřovac&iacute; k&oacute;d a klikněte na tlač&iacute;tko Continue (Pokračovat). Jakmile je v&aacute;&scaron; k&oacute;d přijat, budete přihl&aacute;&scaron;eni. Nyn&iacute; můžete zač&iacute;t použ&iacute;vat ChatGPT k psan&iacute; k&oacute;du, esej&iacute; a mnoho dal&scaron;&iacute;ho.

Jak se přihl&aacute;sit k ChatGPT Plus
Pokud se chcete přihl&aacute;sit k ChatGPT Plus a využ&iacute;t v&scaron;e, co chatbot nab&iacute;z&iacute;, postupujte takto:

Vytvořte nebo se přihlaste do sv&eacute;ho &uacute;čtu OpenAI. Nav&scaron;tivte str&aacute;nku pro přihl&aacute;&scaron;en&iacute; ChatGPT. Jakmile jste tam, můžete se přihl&aacute;sit do sv&eacute;ho &uacute;čtu nebo vytvořit nov&yacute;.
Klikněte na tlač&iacute;tko 'Upgrade to Plus' (Přej&iacute;t na Plus). Jakmile se přihl&aacute;s&iacute;te do sv&eacute;ho &uacute;čtu, budete přeneseni na hlavn&iacute; str&aacute;nku chatbotu, kde byste obvykle začali chatovat. M&iacute;sto toho se zaměřte na prav&yacute; panel a najděte tlač&iacute;tko "Upgrade to Plus". Jakmile najdete tlač&iacute;tko, klikněte na něj a přejdete k dal&scaron;&iacute;mu kroku.
Klikněte na "Upgrade Plan" (Změnit pl&aacute;n) v popup okně. Pot&eacute;, co kliknete na tlač&iacute;tko "Upgrade to Plus", objev&iacute; se vyskakovac&iacute; okno, kter&eacute; se v&aacute;s podruh&eacute; zept&aacute;, zda chcete pokračovat. Pokud jste po zji&scaron;těn&iacute; rozd&iacute;lu mezi cenami a funkcemi bezplatn&eacute;ho a Plus pl&aacute;nu st&aacute;le připraveni pokračovat, klikněte na zelen&eacute; tlač&iacute;tko "Upgrade plan".
Dokončete n&aacute;kup. Po potvrzen&iacute; budete přeneseni na str&aacute;nku pro dokončen&iacute; n&aacute;kupu. Tato str&aacute;nka vyžaduje ve&scaron;ker&eacute; běžn&eacute; informace, kter&eacute; by vyžadovala norm&aacute;ln&iacute; pokladna, včetně va&scaron;eho e-mailu, platebn&iacute;ch informac&iacute; a fakturačn&iacute; adresy.

Komunikace s ChatGPT
Jakmile m&aacute;te vytvořen&yacute; &uacute;čet, můžete zač&iacute;t komunikovat s ChatGPT. Tedy konkr&eacute;tně mu budete zad&aacute;vat dotazy nebo pokyny a n&aacute;sledně můžete č&iacute;st odpověd&iacute;, kter&eacute; model generuje.
ChatGPT je schopen generovat přirozen&yacute; jazyk, odpov&iacute;dat na ot&aacute;zky, ps&aacute;t eseje, překl&aacute;dat texty, ps&aacute;t kreativn&iacute; př&iacute;běhy a mnoho dal&scaron;&iacute;ho. Komunikace s ChatGPT je intuitivn&iacute; a jednoduch&aacute;, ale existuj&iacute; určit&eacute; strategie a techniky, kter&eacute; mohou zlep&scaron;it kvalitu interakce.
Jedn&iacute;m z kl&iacute;čů k efektivn&iacute; komunikaci s ChatGPT je jasnost a přesnost dotazů. Č&iacute;m konkr&eacute;tněj&scaron;&iacute; a jasněj&scaron;&iacute; je v&aacute;&scaron; dotaz, t&iacute;m pravděpodobněj&scaron;&iacute; je, že dostanete relevantn&iacute; a užitečnou odpověď.
D&aacute;le je ChatGPT schopen sledovat kontext konverzace, ale je omezen na určit&yacute; počet posledn&iacute;ch zpr&aacute;v. Je důležit&eacute; m&iacute;t na paměti, že pokud je konverzace př&iacute;li&scaron; dlouh&aacute;, někter&eacute; dř&iacute;věj&scaron;&iacute; detaily mohou b&yacute;t ztraceny.
Využit&iacute; schopnost&iacute; ChatGPT
ChatGPT může b&yacute;t použit pro řadu &uacute;loh. Může generovat text, odpov&iacute;dat na ot&aacute;zky, ps&aacute;t čl&aacute;nky a mnoho dal&scaron;&iacute;ho. Jak přesně využijete schopnosti ChatGPT, z&aacute;lež&iacute; na va&scaron;ich konkr&eacute;tn&iacute;ch potřeb&aacute;ch a c&iacute;lech.
Použit&iacute; modelů GPT-3 a GPT-4
ChatGPT nyn&iacute; podporuje jak model GPT-3, tak nověj&scaron;&iacute; model GPT-4. Tyto modely můžete použ&iacute;t podle sv&yacute;ch potřeb. Model GPT-4 nab&iacute;z&iacute; vylep&scaron;en&eacute; schopnosti generov&aacute;n&iacute; textu a lep&scaron;&iacute; pochopen&iacute; kontextu.

Nastaven&iacute;
Nastaven&iacute; ChatGPT je proces, kter&yacute; zahrnuje konfiguraci různ&yacute;ch aspektů, aby bylo dosaženo požadovan&eacute;ho chov&aacute;n&iacute;. Zde je obecn&yacute; přehled o tom, kter&eacute; si můžete nastavit.
Změna vzhledu ChatGPT
V r&aacute;mci ChatGPT je možn&eacute; upravit vzhled uživatelsk&eacute;ho rozhran&iacute;. Tato změna vzhledu se vztahuje na barvy, fonty a rozložen&iacute; prvků na str&aacute;nce.
N&aacute;sleduj&iacute;c&iacute; postup v&aacute;m uk&aacute;že, jak změnit vzhled ChatGPT:

Přihlaste se do sv&eacute;ho &uacute;čtu OpenAI.
V prav&eacute;m horn&iacute;m rohu klikněte na ikonu sv&eacute;ho profilu.
Vyberte Nastaven&iacute;.
Ve volbě Vzhled vyberte sv&eacute; preferovan&eacute; nastaven&iacute;. Můžete si zvolit různ&eacute; režimy, jako je světl&yacute;, tmav&yacute; nebo přizpůsoben&yacute;.

Mějte na paměti, že změny se projev&iacute; okamžitě a budou se t&yacute;kat v&scaron;ech str&aacute;nek ChatGPT, na kter&yacute;ch pracujete.

Smaz&aacute;n&iacute; v&scaron;ech konverzac&iacute;
V př&iacute;padě, že chcete vymazat v&scaron;echny konverzace, kter&eacute; jste kdy s ChatGPT vedli, postupujte n&aacute;sledovně:

Přihlaste se do sv&eacute;ho &uacute;čtu OpenAI.
V prav&eacute;m horn&iacute;m rohu klikněte na ikonu sv&eacute;ho profilu.
Vyberte Nastaven&iacute;.
V sekci Konverzace najděte možnost Smazat v&scaron;echny konverzace.
Klikněte na tlač&iacute;tko Smazat v&scaron;echny konverzace a potvrďte.

Upozorňuji, že toto smaz&aacute;n&iacute; je trval&eacute; a nemůže b&yacute;t vr&aacute;ceno. V&scaron;echny konverzace budou z va&scaron;eho &uacute;čtu odstraněny a nebudou moci b&yacute;t obnoveny.
Aktivace Beta Features
Beta funkce můžete aktivovat n&aacute;sleduj&iacute;c&iacute;m způsobem:

Přihlaste se do sv&eacute;ho &uacute;čtu OpenAI.
V prav&eacute;m horn&iacute;m rohu klikněte na ikonu sv&eacute;ho profilu.
Vyberte Nastaven&iacute;.
V sekci Beta Features najděte funkce, kter&eacute; chcete aktivovat.

Jednou aktivovan&eacute;, budou tyto funkce k dispozici ve v&scaron;ech va&scaron;ich konverzac&iacute;ch s ChatGPT.

Vypnut&iacute; historie chatu
ChatGPT nyn&iacute; umožňuje uživatelům vypnout historii chatu. Toto nastaven&iacute; umožňuje uživatelům rozhodnout, kter&eacute; konverzace mohou b&yacute;t použity k tr&eacute;ninku modelů OpenAI. Konverzace, kter&eacute; začnou, když je historie chatu vypnuta, nebudou použity k vylep&scaron;en&iacute; modelů a nebudou se zobrazovat v postrann&iacute;m panelu historie. Tyto ovl&aacute;dac&iacute; prvky jsou k dispozici v nastaven&iacute; ChatGPT a mohou b&yacute;t kdykoli změněny​​.
Když je historie chatu vypnuta, nov&eacute; konverzace budou uchov&aacute;ny po dobu 30 dnů a budou přezkoum&aacute;ny pouze tehdy, když je to nezbytn&eacute; pro monitorov&aacute;n&iacute; zneužit&iacute;, než budou trvale smaz&aacute;ny​​.
Export dat
ChatGPT tak&eacute; zavedl novou možnost exportu dat, kter&aacute; umožňuje uživatelům snadno exportovat sv&aacute; data z ChatGPT a l&eacute;pe pochopit, jak&eacute; informace ChatGPT ukl&aacute;d&aacute;. Po aktivaci t&eacute;to funkce obdrž&iacute;te e-mail s va&scaron;imi konverzacemi a ve&scaron;ker&yacute;mi dal&scaron;&iacute;mi relevantn&iacute;mi daty​.

Možnosti využit&iacute;
ChatGPT je v&yacute;konn&yacute; n&aacute;stroj, kter&yacute; může b&yacute;t využit v mnoha různ&yacute;ch kontextech. Zde jsou někter&eacute; z nejpopul&aacute;rněj&scaron;&iacute;ch možnost&iacute; využit&iacute; ChatGPT.



Využit&iacute;
Popis


ChatGPT jako chatbot
Jednou z nejčastěj&scaron;&iacute;ch aplikac&iacute; ChatGPT je jako chatbot. Chatboty mohou b&yacute;t použity v různ&yacute;ch kontextech, včetně z&aacute;kaznick&eacute; podpory, prodeje a marketingu. ChatGPT může generovat přirozeně zněj&iacute;c&iacute; odpovědi na ot&aacute;zky a pokyny uživatelů, což ho čin&iacute; ide&aacute;ln&iacute;m pro interakci s lidmi.


ChatGPT pro generov&aacute;n&iacute; textu
ChatGPT může b&yacute;t tak&eacute; použit pro generov&aacute;n&iacute; textu. To může zahrnovat psan&iacute; čl&aacute;nků, blogov&yacute;ch př&iacute;spěvků, marketingov&yacute;ch materi&aacute;lů a mnoho dal&scaron;&iacute;ho. S využit&iacute;m modelů GPT-3 a GPT-4 může ChatGPT generovat text, kter&yacute; je kreativn&iacute;, poutav&yacute; a přesvědčiv&yacute;.


ChatGPT pro odpovědi na ot&aacute;zky
ChatGPT může b&yacute;t tak&eacute; použit pro odpovědi na ot&aacute;zky. To může zahrnovat odpovědi na konkr&eacute;tn&iacute; ot&aacute;zky, jako jsou fakta nebo informace, nebo odpovědi na složitěj&scaron;&iacute; ot&aacute;zky, kter&eacute; vyžaduj&iacute; anal&yacute;zu nebo interpretaci.


ChatGPT pro v&yacute;uku a vzděl&aacute;v&aacute;n&iacute;
ChatGPT může b&yacute;t tak&eacute; použit v kontextu v&yacute;uky a vzděl&aacute;v&aacute;n&iacute;. Může poskytnout podrobn&eacute; vysvětlen&iacute; konceptů, odpovědět na ot&aacute;zky studentů a pomoci při př&iacute;pravě studijn&iacute;ch materi&aacute;lů.


ChatGPT pro integraci s jin&yacute;mi platformami
ChatGPT může b&yacute;t tak&eacute; integrov&aacute;n s jin&yacute;mi platformami, jako je WhatsApp, pro poskytov&aacute;n&iacute; vylep&scaron;en&yacute;ch funkc&iacute; a schopnost&iacute;. Např&iacute;klad, ChatGPT může b&yacute;t použit pro generov&aacute;n&iacute; odpověd&iacute; na zpr&aacute;vy uživatelů na WhatsApp.



Omezen&iacute;
I když je ChatGPT velmi v&yacute;konn&yacute; n&aacute;stroj, m&aacute; tak&eacute; někter&aacute; omezen&iacute;. Zde jsou někter&aacute; z nejdůležitěj&scaron;&iacute;ch omezen&iacute; ChatGPT.
Omezen&iacute; v generov&aacute;n&iacute; textu
Jedn&iacute;m z hlavn&iacute;ch omezen&iacute; ChatGPT je, že někdy může generovat text, kter&yacute; je nesouvisl&yacute; nebo nesmysln&yacute;. To je způsobeno t&iacute;m, že model je tr&eacute;nov&aacute;n na velk&eacute;m množstv&iacute; textu a nem&aacute; schopnost skutečně pochopit kontext nebo v&yacute;znam textu, kter&yacute; generuje.
Omezen&iacute; v pochopen&iacute; kontextu
Dal&scaron;&iacute;m omezen&iacute;m ChatGPT je, že někdy může m&iacute;t probl&eacute;my s pochopen&iacute;m kontextu. To může v&eacute;st k tomu, že model generuje odpovědi, kter&eacute; jsou nesouvisej&iacute;c&iacute; nebo nesmysln&eacute; v dan&eacute;m kontextu.
Omezen&iacute; v přesnosti informac&iacute;
ChatGPT tak&eacute; může m&iacute;t omezen&iacute; v přesnosti informac&iacute;, kter&eacute; generuje. Model je tr&eacute;nov&aacute;n na velk&eacute;m množstv&iacute; textu, ale nem&aacute; schopnost ověřit přesnost nebo pravdivost informac&iacute;, kter&eacute; generuje.
Omezen&iacute; v použit&iacute; modelů GPT-3 a GPT-4
I když modely GPT-3 a GPT-4 nab&iacute;zej&iacute; vylep&scaron;en&eacute; schopnosti generov&aacute;n&iacute; textu a lep&scaron;&iacute; pochopen&iacute; kontextu, tak&eacute; maj&iacute; sv&aacute; omezen&iacute;. Např&iacute;klad, modely mohou m&iacute;t probl&eacute;my s generov&aacute;n&iacute;m textu, kter&yacute; je př&iacute;li&scaron; komplexn&iacute; nebo složit&yacute;.
Omezen&iacute; v integraci s jin&yacute;mi platformami
Nakonec, i když je ChatGPT flexibiln&iacute; a může b&yacute;t integrov&aacute;n s mnoha různ&yacute;mi platformami, může b&yacute;t proces integrace n&aacute;ročn&yacute; a složit&yacute;.
Budoucnost
ChatGPT je jedn&iacute;m z nejv&yacute;znamněj&scaron;&iacute;ch v&yacute;sledků v&yacute;zkumu v oblasti uměl&eacute; inteligence a strojov&eacute;ho učen&iacute;. Jeho budoucnost je pln&aacute; možnost&iacute; a př&iacute;slibů, kter&eacute; mohou z&aacute;sadně ovlivnit na&scaron;e interakce s technologi&iacute; a na&scaron;e ch&aacute;p&aacute;n&iacute; uměl&eacute; inteligence.
Vylep&scaron;en&eacute; schopnosti generov&aacute;n&iacute; textu
Jedn&iacute;m z hlavn&iacute;ch směrů, kter&yacute;m se ChatGPT ub&iacute;r&aacute;, je vylep&scaron;en&iacute; schopnost&iacute; generov&aacute;n&iacute; textu. To zahrnuje vylep&scaron;en&iacute; v oblasti pochopen&iacute; kontextu a generov&aacute;n&iacute; přesněj&scaron;&iacute;ch a relevantněj&scaron;&iacute;ch odpověd&iacute;.
Roz&scaron;&iacute;řen&eacute; možnosti integrace
Dal&scaron;&iacute;m směrem, kter&yacute;m se ChatGPT ub&iacute;r&aacute;, je roz&scaron;&iacute;řen&iacute; možnost&iacute; integrace. To zahrnuje integraci s dal&scaron;&iacute;mi platformami a aplikacemi, což umožn&iacute; &scaron;ir&scaron;&iacute; využit&iacute; ChatGPT.
ChatGPT m&aacute; potenci&aacute;l změnit způsob, jak&yacute;m interagujeme s technologi&iacute;. Někter&eacute; z možn&yacute;ch budouc&iacute;ch aplikac&iacute; zahrnuj&iacute;:

Osobn&iacute; asistenti: ChatGPT by mohl b&yacute;t využit jako vylep&scaron;en&yacute; osobn&iacute; asistent, schopn&yacute; pochopit a reagovat na složit&eacute; dotazy a požadavky.
Vzděl&aacute;v&aacute;n&iacute;: ChatGPT by mohl b&yacute;t využit jako interaktivn&iacute; učebn&iacute; n&aacute;stroj, kter&yacute; by poskytoval personalizovan&eacute; v&yacute;ukov&eacute; materi&aacute;ly a odpovědi na ot&aacute;zky studentů.
Zdravotnictv&iacute;: ChatGPT by mohl b&yacute;t využit pro poskytov&aacute;n&iacute; zdravotnick&yacute;ch informac&iacute; a rad, což by mohlo pomoci zlep&scaron;it př&iacute;stup ke zdravotnick&yacute;m služb&aacute;m.

Využit&iacute; modelů GPT-3 a GPT-4
ChatGPT již využ&iacute;v&aacute; modely GPT-3 a GPT-4, kter&eacute; nab&iacute;zej&iacute; vylep&scaron;en&eacute; schopnosti generov&aacute;n&iacute; textu a lep&scaron;&iacute; pochopen&iacute; kontextu. V budoucnosti můžeme oček&aacute;vat dal&scaron;&iacute; vylep&scaron;en&iacute; a roz&scaron;&iacute;řen&iacute; těchto modelů.
Vět&scaron;&iacute; přesnost a relevance
Jedn&iacute;m z hlavn&iacute;ch c&iacute;lů pro budoucnost ChatGPT je zv&yacute;&scaron;en&iacute; přesnosti a relevanci odpověd&iacute;. To zahrnuje vylep&scaron;en&iacute; v oblasti pochopen&iacute; kontextu a generov&aacute;n&iacute; přesněj&scaron;&iacute;ch a relevantněj&scaron;&iacute;ch odpověd&iacute;.
Zlep&scaron;en&iacute; v oblasti bezpečnosti
Bezpečnost je kl&iacute;čov&yacute;m konceptem, kter&yacute; se st&aacute;v&aacute; centr&aacute;ln&iacute;m bodem pozornosti pro budouc&iacute; v&yacute;voj ChatGPT. V nekonečně rychl&eacute;m a st&aacute;le se měn&iacute;c&iacute;m digit&aacute;ln&iacute;m světě, je nezbytn&eacute;, aby technologie jako ChatGPT byla o krok napřed v boji proti nevhodn&eacute;mu a &scaron;kodliv&eacute;mu obsahu.
ChatGPT, nejenže se py&scaron;n&iacute; svou umělou inteligenc&iacute;, ale tak&eacute; přij&iacute;m&aacute; roli ochr&aacute;nce bezpečnosti. V bl&iacute;zk&eacute; budoucnosti, budou zahrnuty z&aacute;sadn&iacute; inovace a vylep&scaron;en&iacute; zaměřen&eacute; na detekci a blokov&aacute;n&iacute; nevhodn&eacute;ho a &scaron;kodliv&eacute;ho obsahu. Tyto &uacute;sil&iacute; jsou kl&iacute;čov&eacute; pro poskytov&aacute;n&iacute; bezpečn&eacute;ho, respektabiln&iacute;ho a přijateln&eacute;ho prostřed&iacute; pro každ&eacute;ho uživatele.
Jedn&aacute; se o naprost&eacute; přepracov&aacute;n&iacute; způsobu, jak&yacute;m ChatGPT rozpozn&aacute;v&aacute; a reaguje na než&aacute;douc&iacute; obsah - ať už jsou to vulg&aacute;rn&iacute; v&yacute;razy, neslu&scaron;n&eacute; pozn&aacute;mky nebo jak&eacute;koliv dal&scaron;&iacute; typy obsahu, kter&eacute; by mohly naru&scaron;it bezpečnost nebo pohodl&iacute; uživatelů. K tomu bude ChatGPT využ&iacute;vat je&scaron;tě sofistikovaněj&scaron;&iacute; algoritmy, kter&eacute; budou schopn&eacute; rozpozn&aacute;vat a filtrovat takov&yacute; obsah, aby poskytly bezpečněj&scaron;&iacute; a př&iacute;jemněj&scaron;&iacute; prostřed&iacute; pro v&scaron;echny.
Tento z&aacute;vazek ke zv&yacute;&scaron;en&eacute; bezpečnosti nevych&aacute;z&iacute; pouze z technologick&eacute; nezbytnosti. Je to tak&eacute; ot&aacute;zka etiky, odpovědnosti a respektu k uživatelům ChatGPT. Bezpečnost je pro ChatGPT nejen priorita, ale z&aacute;kladn&iacute; hodnota.
Vize ChatGPT tedy nezahrnuje pouze umělou inteligenci, ale tak&eacute; vytv&aacute;řen&iacute; siln&yacute;ch, bezpečn&yacute;ch a zdrav&yacute;ch digit&aacute;ln&iacute;ch prostorů pro komunikaci. Bezpečnost je pro ChatGPT z&aacute;kladn&iacute;m kamenem, na kter&eacute;m je postavena cel&aacute; platforma.
Pluginy - Nov&aacute; &eacute;ra uměl&eacute; inteligence
OpenAI představuje revolučn&iacute; roz&scaron;&iacute;řen&iacute; sv&eacute;ho jazykov&eacute;ho modelu ChatGPT - pluginy. Tyto pluginy umožňuj&iacute; modelu ChatGPT komunikovat s extern&iacute;mi n&aacute;stroji a poskytovat uživatelům nov&eacute; možnosti a funkce.

Co jsou to pluginy?
Pluginy jsou n&aacute;stroje, kter&eacute; model ChatGPT může využ&iacute;t pro různ&eacute; &uacute;čely. Umožňuj&iacute; modelu přistupovat k informac&iacute;m a funkc&iacute;m, kter&eacute; by jinak nebyly dostupn&eacute;. Např&iacute;klad, plugin pro webov&eacute; prohl&iacute;žen&iacute; umožňuje modelu přistupovat k informac&iacute;m na internetu, zat&iacute;mco plugin pro interpretaci k&oacute;du umožňuje modelu prov&aacute;dět matematick&eacute; v&yacute;počty nebo analyzovat data.
Jak z&iacute;skat př&iacute;stup k pluginům?
Uživatel&eacute; s předplatn&yacute;m ChatGPT Plus mohou pluginy aktivovat v sekci "Beta features" v nastaven&iacute;. Př&iacute;stup k pluginům byl uvolněn 12. května 2023 a bude postupně roz&scaron;iřov&aacute;n v průběhu t&yacute;dne.
Jak funguj&iacute; pluginy?
Model ChatGPT se uč&iacute;, kdy a jak použ&iacute;t pluginy na z&aacute;kladě dotazů uživatelů. Pokud je to potřeba, uživatel&eacute; mohou pož&aacute;dat model, aby explicitně použil plugin.
Jak vytvořit plugin?
V&yacute;voj&aacute;ři mohou vytvořit vlastn&iacute; pluginy a předložit je k schv&aacute;len&iacute;. K tomu je k dispozici dokumentace OpenAI.
Jak&eacute; pluginy jsou k dispozici?
Mezi prvn&iacute;mi pluginy, kter&eacute; byly vytvořeny, jsou např&iacute;klad pluginy od společnost&iacute; Expedia, FiscalNote, Instacart, KAYAK, Klarna, Milo, OpenTable, Shopify, Slack, Speak, Wolfram a Zapier. OpenAI tak&eacute; hostuje dva vlastn&iacute; pluginy: webov&yacute; prohl&iacute;žeč a interpret k&oacute;du.
Jak&eacute; jsou v&yacute;hody a rizika pluginů?
Připojen&iacute;m extern&iacute;ch dat k jazykov&yacute;m modelům mohou b&yacute;t tyto modely užitečněj&scaron;&iacute; a uživatel&eacute; mohou l&eacute;pe hodnotit důvěryhodnost a přesnost informac&iacute;. Nicm&eacute;ně existuje riziko, že pluginy by mohly zv&yacute;&scaron;it bezpečnostn&iacute; v&yacute;zvy t&iacute;m, že by mohly prov&eacute;st &scaron;kodliv&eacute; nebo nezam&yacute;&scaron;len&eacute; akce. OpenAI implementovala několik ochrann&yacute;ch opatřen&iacute; k minimalizaci těchto rizik.

Z&aacute;věr
ChatGPT je revolučn&iacute; n&aacute;stroj, kter&yacute; přin&aacute;&scaron;&iacute; nov&eacute; možnosti v oblasti generov&aacute;n&iacute; textu a komunikace. Využ&iacute;v&aacute; pokročil&eacute; modely GPT-3 a GPT-4, kter&eacute; umožňuj&iacute; generov&aacute;n&iacute; přesn&yacute;ch a relevantn&iacute;ch odpověd&iacute; na z&aacute;kladě kontextu.
Shrnut&iacute;
ChatGPT je n&aacute;stroj, kter&yacute; může b&yacute;t využit v mnoha oblastech, včetně z&aacute;kaznick&eacute; podpory, marketingu, vzděl&aacute;v&aacute;n&iacute; a mnoha dal&scaron;&iacute;ch. Přestože m&aacute; sv&aacute; omezen&iacute;, jako je např&iacute;klad neschopnost plně nahradit lidsk&eacute; spisovatele, jeho v&yacute;hody a možnosti v&yacute;razně převažuj&iacute;.
Budouc&iacute; směřov&aacute;n&iacute;
ChatGPT se neust&aacute;le vyv&iacute;j&iacute; a zlep&scaron;uje. V budoucnosti můžeme oček&aacute;vat dal&scaron;&iacute; vylep&scaron;en&iacute; v oblasti generov&aacute;n&iacute; textu, roz&scaron;&iacute;řen&iacute; možnost&iacute; integrace a zv&yacute;&scaron;en&iacute; přesnosti a relevanci odpověd&iacute;. Bezpečnost je tak&eacute; kl&iacute;čovou oblast&iacute;, na kterou se bude ChatGPT v budoucnosti zaměřovat.
Z&aacute;věrečn&eacute; my&scaron;lenky
ChatGPT je n&aacute;stroj, kter&yacute; přin&aacute;&scaron;&iacute; nov&eacute; možnosti v oblasti generov&aacute;n&iacute; textu a komunikace. Jeho využit&iacute; může přin&eacute;st obrovsk&eacute; v&yacute;hody, ale je důležit&eacute; si uvědomit jeho omezen&iacute; a vždy ho použ&iacute;vat s ohledem na bezpečnost a etick&eacute; hledisko.]]></content:encoded>
                
                                    <category><![CDATA[Umělá inteligence]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/a8/a80beb2f-649c-49ea-a6e8-e9ed69fbaa1f/conversions/chatgpt-ultimate-guide-full.jpeg" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Jak spustit novou Laravel aplikaci na Homestead]]></title>
                <link>https://www.pavelzanek.com/cs/blog/new-laravel-application-homestead</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/new-laravel-application-homestead</guid>
                <pubDate>Sun, 05 Dec 2021 00:00:00 +0100</pubDate>

                                    <description><![CDATA[Naučte se, jak nastavit a spustit novou Laravel aplikaci na Homestead. Tento návod Vás provede celým procesem instalace a konfigurace.]]></description>
                
                                    <content:encoded><![CDATA[V dnešním článku se zaměřím na vytvoření/instalaci nové Laravel aplikace na lokálním prostředí.

Předpoklady


Windows 10
Nainstalovaný Laravel Homestead (Vagrant + VirtualBox)
Laravel Installer


Ve stručnosti

Než se podíváme krok za krokem, jak nainstalovat novou Laravel aplikaci ve Windows 10 s použitím Homesteadu a instalátoru, uděláme si takovou menší roadmapu:


Nastavíme soubor hosts
Nastavíme Homestead
Zahájíme novou instalaci pomocí instalátoru
Spustíme Homestead s novou konfigurací


Nastavení souboru hosts

Je několik možností, jak upravovat soubory. Od úpravy pomocí příkazovým řádkem, až po použití například obyčejného poznámkového bloku. Nepotřebujeme si hrát na profíky, postačí nám tedy poznámkový blok.

Otevřeme si tedy Poznámkový blok s možností „Spustit jako správce".

V poznámkovém bloku zvolíme Soubor->Otevřít… (CTRL+O) a přejdeme do složky „C:\Windows\System32\drivers\etc". Nezapomeňte si zobrazit všechny soubory, pokud vidíte pouze .txt soubory:

Vidíme tedy všechny soubory ve složce a otevřeme si soubor „hosts".

Nyní přidáme:

...
192.168.10.10 vase-laravel-aplikace.test
...

Tedy namapovali jsme IP adresu našeho budoucího Homesteadu na URL adresu. Pokud zadáme posléze URL adresu do prohlížeče, požadavky budou nasměrovány na Homestead – pojďme si jej tedy nastavit.

Nastavení souboru Homestead.yaml

Přejděte do složky, kde máte nainstalovaný Homestead a otevřete soubor Homestead.yaml.

Podívejte se na ukázku, jak by takový Váš Homestead.yaml mohl vypadat.

---
ip: "192.168.10.10"
memory: 512
cpus: 1
provider: virtualbox
ssl: true

authorize: c:/Users/***/.ssh/vas-public-key.pub

keys:
    - c:/Users/***/.ssh/vas-private-key.ppk

folders:
    - map: d:/laravel-websites
      to: /home/vagrant/code

sites:
    - map: vase-laravel-aplikace.test
      to: /home/vagrant/code/vase-laravel-aplikace.test/public
      php: '8.0'

databases:
    - vase_db_k_aplikaci

features:
    - mysql: false
    - mariadb: true
    - postgresql: false
    - ohmyzsh: false
    - webdriver: false

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp

Za povšimnutí stojí více věcí, pojďme se na ně podívat.


IP adresa – stejnou jsme použili v souboru hosts
folders – musíme namapovat, kde se aplikace vyskytuje. V mém případě používám disk „D:\", ve kterém mám složku „laravel-websites". Celá tato složka se mi dostane na Homestead pod „/home/vagrant/code".
databases – rovnou můžeme vytvořit db pro naší aplikaci
na ukázku jsem navíc uvedl, jak můžete k Homestead přistupovat pod SSH.


Instalace Laravelu pomocí instalátoru

Nyní už víme, na jaké URL adrese postavíme aplikaci. Dále víme, že pokud zadáme URL do prohlížeče, dostaneme se díky namapování na Homestead. Homestead je pak nakonfigurován tak, že si stáhne obsah z lokální složky „D:\laravel-websites" a umístí jej do „/home/vagrant/code". Dále ale víme, že zde hledáme konkrétně /home/vagrant/code/vase-laravel-aplikace.test/public. Takže si musíme Laravel aplikaci nainstalovat.

Přejdeme tedy pomocí příkazové řádky do „D:\laravel-websites" a spustíme:

laravel new vase-laravel-aplikace.test

Po dokončení by měl výsledek skončit podobně jako zde:

Spuštění Homesteadu s novou konfigurací

Nyní musíme spustit Homestead včetně naší nové konfigurace. Přejděte tedy v příkazové řádce do umístění, kde máte nainstalovaný Homestead a spusťte:

vagrant up --provision

Případně, pokud již máte zapnutý Homestead, můžete použít (nemusíte tedy Homestead vypínat přes „vagrant halt")

vagrant reload --provision

Důležité je, že se použije přepínač –provision, který spustí Homestead s novou konfigurací.

TIP

Pokud se chcete přihlásit do Homesteadu pomocí SSH, postačí spustit z nainstalované složky z Homesteadem:

vagrant ssh

Posléze se můžete dostat do Vaší aplikace:

cd code/vase-laravel-aplikace.test

V Homesteadu pak ve složce s projektem můžete provádět například příkazy všeho druhu (migrace, vygenerování assetů, instalace packages, …).

Závěrem

Nyní už si stačí projekt přidat do Vašeho IDE a upravit .env. Jakmile si nakonfigurujete, v prohlížeči už můžete zadat URL projektu a uvidíte novou Laravel aplikaci. Pak už jen stačí vytvořit něco skvělého.]]></content:encoded>
                
                                    <category><![CDATA[Laravel]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/33/3363c3ba-22ab-4c66-9425-a8685a29d71c/conversions/new-laravel-application-homestead-full.jpeg" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Lokalizace Laravel aplikace]]></title>
                <link>https://www.pavelzanek.com/cs/blog/laravel-application-localization</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/laravel-application-localization</guid>
                <pubDate>Sat, 20 Nov 2021 00:00:00 +0100</pubDate>

                                    <description><![CDATA[Naučte se, jak lokalizovat Laravel aplikaci. Tento průvodce pokrývá vše od nastavení jazykových souborů až po přepínání jazyků.]]></description>
                
                                    <content:encoded><![CDATA[Níže uvedený návod popisuje jednoduchou lokalizaci Laravel aplikace (tedy překlady pouze částí aplikace, nikoliv překlad obsahu stránek uloženého v databázi či lokalizace URL adres). Návod se tedy věnuje, jak nastavit překlady řetězců objevujících se v šabloně Laravel aplikace.

Testováno
CS_CONTENT continues from where it was cut:

Testováno ve verzi: Laravel 8
Stack: Jetstream / Livewire + Blade/Tailwind CSS, ale prakticky se změnami na straně front endu lze použít kdekoliv
Dokumentace: https://laravel.com/docs/8.x/localization

Logika
Logika je poměrně jednoduchá, není potřeba žádného zásahu do databáze.

Nastavení jazyků
config/app.php:
...
'locales' => [
        'en' => 'English',
        'cs' => 'Czech',
 ],
...

Middleware Language
app/Http/Middleware/Language.php:
&lt;?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\URL;

class Language
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {        
        App::setLocale($request->language);
        URL::defaults(['language' => $request->language]);
        $request->route()->forgetParameter('language');
        return $next($request);
    }
}

Přidání middlewaru do kernelu
app/Http/Kernel.php:
...
protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\Language::class, // Localization
        ],

        ...
];
...

Routy ve web.php
routes/web.php:
...
Route::group([
    'prefix' => "{language}", 
    'where' => ['language' => '[a-zA-Z]{2}']
    ], function () {

    ...

});
...

Kontroler LanguageController.php
app/Http/Controllers/LanguageController.php:
&lt;?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\URL;

class LanguageController extends Controller
{
    public function switchLang(Request $request, $lang)
    {
        // $urlParts[1] == current lang
        $urlParts = explode('/', str_ireplace(array('http://', 'https://'), '', url()->previous()));

        $newUrl = str_replace(
            '/' . $urlParts[1] . '/', 
            '/' . $lang . '/',
            url()->previous() 
        );

        App::setLocale($lang);
        URL::defaults(['language' => $lang]);
        return redirect()->to($newUrl);
    }
}

Přidání routy kontroleru do web.php
routes/web.php:
...
Route::get('lang/{lang}', [App\Http\Controllers\LanguageController::class, 'switchLang'])->name('langSwitcher');
...

RouteServiceProvider.php
app/Providers/RouteServiceProvider.php:
...
public const DASHBOARD = '/en/dashboard';
...

Vytvoření Language switcheru
Příklad pro použití ve stacku: Laravel, Jetstream – Livewire + Blade, Tailwindcss
resources/views/navigation-menu.blade.php:

Desktop
...
&lt;!-- Language Dropdown --&gt;
&lt;div class="ml-3 relative"&gt;
    &lt;x-jet-dropdown align="right" width="48"&gt;
        &lt;x-slot name="trigger"&gt;
            &lt;span class="inline-flex rounded-md"&gt;
                &lt;button type="button" class="inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-gray-500 bg-white hover:text-gray-700 focus:outline-none transition"&gt;
                    @lang(config('app.locales')[App::getLocale()])

                    &lt;svg class="ml-2 -mr-0.5 h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor"&gt;
                        &lt;path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd" /&gt;
                    &lt;/svg&gt;
                &lt;/button&gt;
            &lt;/span&gt;
        &lt;/x-slot&gt;

        &lt;x-slot name="content"&gt;
            &lt;!-- Language Switcher --&gt;
            &lt;div class="block px-4 py-2 text-xs text-gray-400"&gt;
                {{ __('Select language') }}
            &lt;/div&gt;

            @foreach (config('app.locales') as $lang => $language)
                @if ($lang !== App::getLocale())
                    &lt;x-jet-dropdown-link href="{{ route('langSwitcher', $lang) }}"&gt;
                        @lang($language)
                    &lt;/x-jet-dropdown-link&gt;
                @endif
            @endforeach

        &lt;/x-slot&gt;
    &lt;/x-jet-dropdown&gt;
&lt;/div&gt;
...

Responzivní verze
...
&lt;div class="mt-3 space-y-1"&gt;
    &lt;div class="border-t border-gray-200"&gt;&lt;/div&gt;

    &lt;div class="block px-4 py-2 text-xs text-gray-400"&gt;
        {{ __('Select language') }}
    &lt;/div&gt;
    
    @foreach (config('app.locales') as $lang => $language)
        @if ($lang !== App::getLocale())
            &lt;x-jet-responsive-nav-link href="{{ route('langSwitcher', $lang) }}"&gt;
                @lang($language)
            &lt;/x-jet-responsive-nav-link&gt;
        @endif
    @endforeach

    &lt;div class="border-t border-gray-200"&gt;&lt;/div&gt;
&lt;/div&gt;
...

Doplnění překladů
Například resources/lang/cs.json:
{
    "Dashboard": "Nástěnka",
    "Select language": "Vyberte jazyk",
    "Czech": "Čeština",
    ...
}

Výsledek
Česká verze:


Anglická verze:


Tip
Pokud používáte Jetstream spolu s Livewire jako v příkladu a chcete defaultní routy lokalizovat, pak musíte udělat ještě několik menších úprav.

Ze složky /vendor/jetstream/routes/ překopírujte routy k Vašim routám. Soubor pak může vypadat následovně (routes/web.php):
&lt;?php

use Illuminate\Support\Facades\Route;
use Laravel\Jetstream\Http\Controllers\CurrentTeamController;
use Laravel\Jetstream\Http\Controllers\Livewire\ApiTokenController;
use Laravel\Jetstream\Http\Controllers\Livewire\PrivacyPolicyController;
use Laravel\Jetstream\Http\Controllers\Livewire\TeamController;
use Laravel\Jetstream\Http\Controllers\Livewire\TermsOfServiceController;
use Laravel\Jetstream\Http\Controllers\Livewire\UserProfileController;
use Laravel\Jetstream\Http\Controllers\TeamInvitationController;
use Laravel\Jetstream\Jetstream;

Route::get('lang/{lang}', [App\Http\Controllers\LanguageController::class, 'switchLang'])->name('langSwitcher');

Route::get('/', function () {
    return redirect()->route('login');
});

Route::group([
    'prefix' => "{language}", 
    'where' => ['language' => '[a-zA-Z]{2}']
    ], function () {

    Route::group(['middleware' => config('jetstream.middleware', ['web'])], function () {
        if (Jetstream::hasTermsAndPrivacyPolicyFeature()) {
            Route::get('/terms-of-service', [TermsOfServiceController::class, 'show'])->name('terms.show');
            Route::get('/privacy-policy', [PrivacyPolicyController::class, 'show'])->name('policy.show');
        }

        Route::group(['middleware' => ['auth:sanctum', 'verified']], function () {
            Route::get('/user/profile', [UserProfileController::class, 'show'])
                        ->name('profile.show');

            if (Jetstream::hasApiFeatures()) {
                Route::get('/user/api-tokens', [ApiTokenController::class, 'index'])->name('api-tokens.index');
            }

            if (Jetstream::hasTeamFeatures()) {
                Route::get('/teams/create', [TeamController::class, 'create'])->name('teams.create');
                Route::get('/teams/{team}', [TeamController::class, 'show'])->name('teams.show');
                Route::put('/current-team', [CurrentTeamController::class, 'update'])->name('current-team.update');

                Route::get('/team-invitations/{invitation}', [TeamInvitationController::class, 'accept'])
                            ->middleware(['signed'])
                            ->name('team-invitations.accept');
            }
        });
    });

    Route::group(['middleware' => ['auth:sanctum', 'verified']], function () {
        Route::get('/dashboard', function () {
            return view('dashboard');
        })->name('dashboard');
    });

});

Pokud bychom upravili například routu pro zobrazení profilu, například takto (routes/web.php):
...
// Old value: /user/profile
Route::get('/profile', [UserProfileController::class, 'show'])->name('profile.show');
...

Pokud uděláme výše uvedenou změnu, zobrazení profilu bude dostupné jak na naší routě /profile, tak i můžeme využít výchozí routu /user/profile (načítanou z package – laravel/jetstream/routes/livewire.php). Pokud chceme výchozí routy vypnout, pak musíme upravit JetsreamServiceProvider.php (app/Providers/JetsreamServiceProvider.php).
...
public function register()
{
    Jetstream::ignoreRoutes();
}
...]]></content:encoded>
                
                                    <category><![CDATA[Laravel]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/4a/4ac45210-b41b-4585-aef0-aeba95903141/conversions/laravel-application-localization-full.jpeg" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Indexace stránek ve vyhledávačích]]></title>
                <link>https://www.pavelzanek.com/cs/blog/page-indexing</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/page-indexing</guid>
                <pubDate>Thu, 30 Nov 2017 00:00:00 +0100</pubDate>

                                    <description><![CDATA[Zjistěte, jak vyhledávače indexují stránky, jaké faktory ovlivňují indexaci a jak zajistit, aby vaše stránky byly správně indexovány.]]></description>
                
                                    <content:encoded><![CDATA[Co je indexace str&aacute;nek
Indexace webov&yacute;ch str&aacute;nek je proces, při kter&eacute;m doch&aacute;z&iacute; k tomu, že v&aacute;s nav&scaron;t&iacute;v&iacute; (ro)bot vyhled&aacute;vačů, snaž&iacute; se proj&iacute;t ve&scaron;ker&yacute; obsah a ten si k sobě uložit do datab&aacute;ze (zaindexovat). Pokud vyhled&aacute;v&aacute;te &ldquo;něco&rdquo; pomoc&iacute; vyhled&aacute;vače, nevrac&iacute; v&aacute;m odpověď t&iacute;m stylem, že začne hledat na cel&eacute;m internetu. Vyhled&aacute;vač se pod&iacute;v&aacute; k sobě do datab&aacute;ze a z n&iacute; v&aacute;m nab&iacute;dne relevantn&iacute; v&yacute;sledky na v&aacute;&scaron; dotaz &ndash; tud&iacute;ž str&aacute;nky z v&yacute;sledku vyhled&aacute;v&aacute;n&iacute; mus&iacute; m&iacute;t u sebe zaindexovan&eacute;. Pokud je vyhled&aacute;vač nem&aacute; uložen&eacute; v datab&aacute;zi, tak je jasn&eacute;, že je nezobraz&iacute;. Datab&aacute;zi tedy můžete br&aacute;t za jakousi knihovnu webov&yacute;ch str&aacute;nek, ze kter&eacute; si najde vyhled&aacute;vač nejlep&scaron;&iacute; odpověď na hledan&yacute; dotaz. Proto je důležit&eacute; se u každ&eacute;ho projektu zaměřit na indexaci webu ve vyhled&aacute;vač&iacute;ch.
&Scaron;patn&aacute; indexace webov&yacute;ch str&aacute;nek
Jak už to b&yacute;v&aacute;, u webov&yacute;ch str&aacute;nek je možn&eacute;, že vyhled&aacute;vače nev&iacute; o v&scaron;ech str&aacute;nk&aacute;ch, kter&eacute; si přejete zobrazovat ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;. Pak můžete přich&aacute;zet o n&aacute;v&scaron;těvn&iacute;ky a nemus&iacute;te pokr&yacute;vat segment, kter&yacute; je pro v&aacute;s businessově př&iacute;nosn&yacute;. Představte si např&iacute;klad, že nemus&iacute;te m&iacute;t v indexu vyhled&aacute;vačů va&scaron;&iacute; hlavn&iacute; str&aacute;nku, kategorii v e-shopu, čl&aacute;nky z blogu apod. A pokud je vyhled&aacute;vač nem&aacute; uložen&eacute; v datab&aacute;zi, pak je nemůže zobrazit ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;.
U mnoha webov&yacute;ch str&aacute;nek se běžně použ&iacute;v&aacute; neindexace str&aacute;nek &ndash; str&aacute;nky nechcete zobrazovat ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;. Může se např&iacute;klad jednat o děkovn&eacute; str&aacute;nky, ko&scaron;&iacute;k u e-shopu, uživatelsk&eacute; sekce a mnoho dal&scaron;&iacute;ho.
Někdy si v&scaron;ak přejete str&aacute;nku indexovat, URL str&aacute;nky pos&iacute;l&aacute;te vyhled&aacute;vačům, aby v&aacute;m jej crawlovac&iacute; robot ohodnotil. Můžete ji m&iacute;t např. v sitemapě či ji dokonce ručně pos&iacute;l&aacute;te k indexaci &ndash; &ldquo;Přidej str&aacute;nku&rdquo; na Seznamu a &ldquo;Submit URL&rdquo; na Google. St&aacute;v&aacute; se v&scaron;ak, že vyhled&aacute;vač se může rozhodnout, že ji i přesto nebude indexovat. Pak je důležit&eacute; zjistit, jak&yacute; by mohl b&yacute;t důvod, proč ji vyhled&aacute;vač nechce zobrazovat a co mu br&aacute;n&iacute; v indexov&aacute;n&iacute;.
Anal&yacute;za indexace webov&yacute;ch str&aacute;nek
Způsobů jak si zkontrolovat stav indexovan&yacute;ch str&aacute;nek je hodně. Pod&iacute;vejte se na z&aacute;kladn&iacute; kroky, podle kter&yacute;ch postupuji.
Kontrola indexace str&aacute;nek pomoc&iacute; oper&aacute;toru site
Snažil jsem se obecně sepsat n&aacute;vod, jak si můžete i vy zkontrolovat stav indexace va&scaron;ich webov&yacute;ch str&aacute;nek. Jelikož tento dotaz mi byl pokl&aacute;d&aacute;n docela často, vytvořil jsem na něj odpověď v SEO poradně, kde můžete nal&eacute;zt i dal&scaron;&iacute; tipy z oblasti SEO. Jde předev&scaron;&iacute;m o to, že si porovn&aacute;te počet URL adres, kter&eacute; chcete zobrazovat ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;, s počtem vr&aacute;cen&yacute;ch str&aacute;nek pomoc&iacute; oper&aacute;toru site.
Kontrola indexace str&aacute;nek pomoc&iacute; sitemapy a Marketing Mineru
Jestliže m&aacute;te vytvořenou sitemapu s URL adresami, kter&eacute; si přejete zobrazovat ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;, pak můžeme konkr&eacute;tně zjistit, jak&eacute; str&aacute;nky se indexuj&iacute; a př&iacute;padně i ty, kter&eacute; se nezobrazuj&iacute; ve vyhled&aacute;v&aacute;n&iacute;. Nejdř&iacute;ve, než se pust&iacute;me do kontroly zobrazen&iacute; str&aacute;nek, pod&iacute;vejte se, zda va&scaron;e sitemapa opravdu obsahuje pouze URL adresy, kter&eacute; chcete pos&iacute;lat do v&yacute;sledků vyhled&aacute;v&aacute;n&iacute;.
Pro samotnou anal&yacute;zu pos&iacute;lan&yacute;ch str&aacute;nek skrze sitemapu použ&iacute;v&aacute;m Marketing Miner, kter&yacute; obsahuje užitečnou funkci Fulltext Index Checker.

Přejděte na str&aacute;nky Marketing Miner a přihla&scaron;te se
Zvolte, že chcete vytvořit &ldquo;Nov&yacute; report&rdquo;
Na ot&aacute;zku, jak&yacute; dotaz chcete vložit, zvolte &ldquo;URL&rdquo;
Zvolte &ldquo;Sitemap / RSS&rdquo; a zadejte URL adresu sitemapy, report si můžete přejmenovat a zvolte &ldquo;Přej&iacute;t na minery&rdquo;
V r&aacute;mci minerů si vyberte Fulltext Index Checker

TIP: Můžete tak&eacute; vybrat URL Indexability &ndash; zjist&iacute;te tak, jak&eacute; URL jsou indexovateln&eacute;, př&iacute;padně kter&eacute; se kanonizuj&iacute; nebo jsou zak&aacute;zan&eacute; v robots.txt
Marketing Miner v&aacute;m na v&yacute;stupu zobraz&iacute;, jak&eacute; URL adresy jsou indexovan&eacute; a jak&eacute; nikoliv. Podle mě jde o nejrychlej&scaron;&iacute; a nejjednodu&scaron;&scaron;&iacute; možnou cestu, jak si můžete vytvořit kvalitn&iacute; anal&yacute;zu na indexaci str&aacute;nek.
Kontrola indexace str&aacute;nek např&iacute;klad pomoc&iacute; Google Analytics nebo Google Data Studio
Indexov&aacute;n&iacute; str&aacute;nek lze obecně, ale ne přesně určit i skrze vstupn&iacute; str&aacute;nky &ndash; z organick&eacute;ho vyhled&aacute;v&aacute;n&iacute;. Můžete si vyfiltrovat vstupn&iacute; str&aacute;nky př&iacute;mo v analytick&eacute;m n&aacute;stroji Google Analytics nebo si můžete vytvořit vlastni přehled pomoc&iacute; Google Data Studio. Stač&iacute; si st&aacute;hnout přehledy za určit&eacute; obdob&iacute; a porovnat je s pos&iacute;lan&yacute;mi URL adresami v sitemapě.
Pokud na vstupn&iacute;ch str&aacute;nk&aacute;ch z vyhled&aacute;vačů proběhla n&aacute;v&scaron;těvnost, pak se logicky zobrazuj&iacute; ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;. A pokud je n&aacute;v&scaron;těvnost nulov&aacute;, pak stoji za to prověřit, proč tomu tak je.
Proč se str&aacute;nky nemus&iacute; zobrazovat ve vyhled&aacute;v&aacute;n&iacute;?
Důvodů, proč se webov&eacute; str&aacute;nky nezobrazuj&iacute; ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;, může b&yacute;t v&iacute;ce. Někdy může b&yacute;t př&iacute;čina hned na prvn&iacute; pohled viditeln&aacute;, někdy se v&scaron;ak mus&iacute;te na problematiku &scaron;patně se indexuj&iacute;c&iacute;ch str&aacute;nek v&iacute;ce a do hloubky zaměřit.

Zkontrolujte, zda se na str&aacute;nce nevyskytuje meta tag s parametrem &ldquo;noindex&rdquo; &ndash; slouž&iacute; k z&aacute;kazu indexace str&aacute;nky.
Zkontrolujte, zda str&aacute;nka nen&iacute; blokovan&aacute; skrze robots.txt (i přes robots.txt lze zak&aacute;zat indexaci str&aacute;nek, nicm&eacute;ně tento soubor by neměl sloužit k tomuto &uacute;čelu).
Zkontrolujte, zda m&aacute; str&aacute;nka jednoduchou a pro vyhled&aacute;vače nijak br&aacute;n&iacute;c&iacute; v indexaci URL adresu (hashtagy v URL, parametrick&eacute; URL adresy)
Je str&aacute;nka interně prolinkov&aacute;na a vede na n&iacute; funguj&iacute;c&iacute; odkaz?
Nevyskytuj&iacute; se na c&iacute;lov&eacute; URL adrese přesměrov&aacute;n&iacute;? Př&iacute;padně nen&iacute; jich mnoho?
Je str&aacute;nka uvedena v sitemapě?
Nen&iacute; str&aacute;nka duplicitn&iacute; k již vytvořen&eacute; str&aacute;nce na va&scaron;em webu? M&aacute; vyhled&aacute;vač důvod k tomu, aby ji tak&eacute; zobrazoval ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;?
Kvalita str&aacute;nky nebo penalizace (viz. n&iacute;že)

TIP: Podpořte str&aacute;nku t&iacute;m, že ji prolinkujete pomoc&iacute; zpětn&yacute;ch odkazů.
Důvodů může b&yacute;t daleko v&iacute;ce, nicm&eacute;ně toto jsou nejčastěj&scaron;&iacute; př&iacute;činy, se kter&yacute;mi se setk&aacute;v&aacute;m.
Užitečnost str&aacute;nky &ndash; je str&aacute;nka pro uživatele př&iacute;nosn&aacute;?
Pokud se str&aacute;nka neindexuje, i když m&aacute; v&scaron;echny předpoklady proto, aby se indexovala, pak je dal&scaron;&iacute; možnost&iacute; zkontrolovat obsah str&aacute;nky. Kromě toho, aby nebyl duplicitn&iacute; s jinou str&aacute;nkou, se pod&iacute;vejte, zda je obsah str&aacute;nky užitečn&yacute; pro uživatele. Pokud ano, pak zkontrolujte, zda odkazujete na relevantn&iacute; webov&eacute; str&aacute;nky (odchoz&iacute; odkazy), zda nem&aacute;te na str&aacute;nce mnoho generovan&yacute;ch textů, nezobrazujete vyhled&aacute;vačům jin&yacute; obsah než uživatelům a dal&scaron;&iacute; možn&eacute; nedostatky, kter&eacute; by mohly vadit vyhled&aacute;vačům.
Jednou jsem se i setkal s t&iacute;m, že webov&eacute; str&aacute;nky použ&iacute;valy hodnocen&iacute; čl&aacute;nků, av&scaron;ak toto hodnocen&iacute; bylo generovan&eacute; &ndash; tud&iacute;ž nebylo přid&aacute;no samotn&yacute;m uživatelem. Na Google pak web dostal penalizaci na tyto str&aacute;nky a přestal je tak zobrazovat.
Penalizace
Nejhor&scaron;&iacute; př&iacute;pad, kter&yacute; se může st&aacute;t, je penalizace. O př&iacute;padn&eacute; manu&aacute;ln&iacute; penalizaci se můžete dozvědět př&iacute;mo v Google Search Console, př&iacute;mo pak v sekci &ldquo;Ručn&iacute; z&aacute;sahy&rdquo;.
Může se tak&eacute; st&aacute;t, že m&aacute;te na sv&yacute;ch str&aacute;nk&aacute;ch obsažen malware. Ten pak podobně můžete dohledat v GSC v sekci &ldquo;Bezpečnostn&iacute; probl&eacute;my&rdquo;.
Jak rychle zaindexovat nově vytvořen&eacute; str&aacute;nky
Pokud chcete rychle indexovat obsah va&scaron;ich webov&yacute;ch str&aacute;nek, pak existuj&iacute; postupy, jak indexaci urychlit. Pokud vytvoř&iacute;te str&aacute;nku, kterou chcete zobrazovat ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;, pak:

po&scaron;lete str&aacute;nku ručně k indexaci

Google &ndash; URL Inspection tool
Seznam &ndash; Přidej str&aacute;nku


mějte str&aacute;nku v sitemapě, kterou pos&iacute;l&aacute;te skrze služby

Google Search Console
Seznam Webmaster



V Google Webmaster Tools (Google Search Console) nav&iacute;c můžete použ&iacute;t dal&scaron;&iacute; funkci &ndash; Fetch as Google (Nač&iacute;st jako Google). Skrze n&aacute;stroj pož&aacute;d&aacute;te o vykreslen&iacute; webov&eacute; str&aacute;nky a pokud nen&iacute; nalezen probl&eacute;m, pak můžete rovnou pož&aacute;dat o indexov&aacute;n&iacute; str&aacute;nky. Můžete tak např&iacute;klad zjistit, jak&eacute; zdroje nemohl Googlebot st&aacute;hnout.

Z&aacute;věrem
Důvodů, proč se str&aacute;nka nemus&iacute; spr&aacute;vně indexovat, může b&yacute;t několik. Dělejte v&scaron;ak str&aacute;nky předev&scaron;&iacute;m pro uživatele a nikoliv pro vyhled&aacute;vače. Pak si teprve dejte pozor na dal&scaron;&iacute; technick&eacute; předpoklady, kter&eacute; vyhled&aacute;vače oček&aacute;vaj&iacute; a nebudete jim tak dělat probl&eacute;my. Pokud se rozhodnete někde využ&iacute;t parametr noindex, pak proveden&eacute; změny raději zkontrolujte. Nen&iacute; nic hor&scaron;&iacute;ho než si deindexovat str&aacute;nky a pak přich&aacute;zet o n&aacute;v&scaron;těvnost.]]></content:encoded>
                
                                    <category><![CDATA[SEO]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/76/764471df-290d-4721-90b8-ec93bb35e2ae/conversions/page-indexing-in-search-engines-full.jpg" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Automaticky generovaný obsah]]></title>
                <link>https://www.pavelzanek.com/cs/blog/automatically-generated-content</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/automatically-generated-content</guid>
                <pubDate>Sat, 19 Aug 2017 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Zjistěte, co je automaticky generovaný obsah, jak ho vyhledávače hodnotí a jak se vyhnout penalizaci za jeho používání.]]></description>
                
                                    <content:encoded><![CDATA[Co je automaticky generovaný obsah a jak ho v SEO využít
Automaticky generovaný obsah je typ obsahu, který není tvořen uživatelem, ale samotným programem. Může vám usnadnit čas i peníze, nicméně automaticky generované obsahy nebývají kvalitní. Nejedná se přímo o zakázanou techniku, ale pokud to budete přehánět, vyhledávače vás mohou penalizovat.
Jelikož jdeme s dobou stále kupředu, snažíme se ušetřit práci a čas. Proto se snažíme automatizovat procesy všude tam, kde to jen lze. Automatizaci tedy můžete využívat i při tvorbě obsahu.
Musím však upozornit, že automaticky generovaný obsah doporučuji používat u projektů, kde se jedná o tisíce stránek a není možné vytvořit texty ručně. Pokud byste měli popisovat tisíce stránek, pak by vaše práce byla neefektivní a zbytečně byste ztráceli čas místo optimalizace důležitějších kroků.

Možnosti použití generovaných textů
Automaticky generovaný obsah na webových stránkách můžeme využít na několika místech. Pro příklad si představme, že máte tisíce produktů, u kterých nemáte popisek a vašim úkolem je ho doplnit. Na začátku je vždy nutné se zaměřit na to, co můžeme používat. Náš e-shop například prodává trička. U každého trička pak máme parametry jako barva, styl, délka rukávu, materiál, cena,… Samozřejmě každý produkt má unikátní název.
Jestliže jste si sehnali veškeré informace, které jsou k dohledání u všech produktů (proto je i nutné mít dobře naadminované produkty), pak vás čeká cesta za SEO specialistou. SEO specialista vám napoví, jaké parametry jsou hledány a jaká klíčová slova by se do popisku k produktu hodila. Představte si, že SEO specialista vám napoví, že potřebujete vyzdvihnout stránky s materiály triček. Doporučí vám například vkládat do generovaného obsahu sousloví typu "bavlněná trička" (materiál + kategorie).
TIP: Nejvíce hledané parametry (sousloví), které se budou zobrazovat v automaticky generovaném obsahu můžete interně prolinkovat s relevantní stránkou (např. popisek produktu obsahující sousloví "bavlněná trička" bude zároveň odkazem na výpis produktů všech triček s bavlněným materiálem). Ukážete tak, že je pro vás konkrétní výpis produktů opravdu důležitý a odkazy ho podpoříte.

Šablona automaticky generovaného obsahu
Jestliže tedy víte, jaké fráze, jaké parametry a jaké kombinace jsou hledány, můžete přejít za copywriterem, se kterým již začnete vymýšlet šablonu. Jelikož jsme si sehnali parametry produktů, můžeme je používat jako proměnné a doplňovat je do šablony textu. Podívejte se, jak by taková šablona pro automaticky generovaný obsah mohla vypadat, pokud spojíme SEO s copywritingem.
"Kvalitní [určení pohlaví] [název produktu] [délka rukávu] je vhodné pro každodenní nošení.[Materiál] tričko [barva] barvy si jistě oblíbíte. Tričko [potisk] od značky [značka] máme za úžasných [cena]."
"Kvalitní pánské tričko XYZ s krátkým rukávem je vhodné pro každodenní nošení. Bavlněné tričko červené barvy si jistě oblíbíte. Tričko bez potisku od značky Adler máme za úžasných 149,- Kč."
Jak vidíte, automaticky generovaný obsah lze celkem jednoduše vytvořit. Je ale důležité, aby text spolu s proměnnými dával smysl. Z tohoto příkladu můžete vidět, že i stejná šablona by se dala použít k popiskům stránek (meta description). A díky tomu, že jste parametry probrali se SEO specialistou, se zde budou objevovat vyhledávaná slova – a pokud je hledaný výraz stejný jako obsah popisku stránky (meta description), pak se slovo ve výsledcích vyhledávání ztuční a díky tomu můžete zvýšit proklikovost – a tím na web přivést více návštěvníků.
Nejdříve se dobře připravte a poté vymýšlejte texty, které dávají pro uživatele smysl!
Podívejte se na základní příklady, kde lze automatizaci použít.

Titulky stránek (title)
Meta data – popisky stránek
Popisky u kategorií/rubrik
Popisky u produktových stránek
Doplňující informace k vašim článkům
Atd.

Nemusí se tedy jednat o popisky, díky generovanému obsahu můžete doplnit např. i články o větu typu:"Článek "[název článku]" od autora [jméno autora] vyšel dne [den publikace článku]. Spadá do rubriky [název rubriky] a obsahuje štítky [výčet štítků]. Již má [počet komentářů] komentářů a čtenáři jej hodnotí na [hodnocení/počet hvězdiček] hvězdiček. Článek byl aktualizován dne [datum aktualizace článku]."
Jak jsem již zmínil na začátku, automaticky generované texty zpravidla nebývají až tak unikátní a kvalitní. I tak si ale můžete ušetřit námahu a práci.
Jestliže jste si nechali nasadit generovaný obsah na webové stránky (ať už jste si ho nasadili sami či s pomocí programátorů), pak hlavně doporučuji projít nejvíce důležité stránky – udělejte kontrolu, zda text opravdu dává smysl.

Paretovo pravidlo, SEO a automaticky generovaný obsah
U nejvíce navštěvovaných stránek posléze nahraďte automaticky generovaný obsah za ručně napsaný kvalitní text. Možná jste se již doslechli o "Paretově pravidlu/principu" – jedná se o rozdělení 80 na 20. U ecommerce webu lze tento princip také využít. U většiny webových stránek jsem se setkal se širokým sortimentem zboží, nejvíce prodávané kousky však většinou tvoří pouze 20% ze všech produktů. Zbylých 80% produktů není tolik businessově prioritních.
Proto si v rámci SEO, ale také i v rámci obsahové strategie určete 20% produktů pro vás businessově prioritních a ty poté optimalizujte ručně. Nechci tím říci, že by vám automaticky generovaný obsah nepomohl, ale určitě nikdy nedocílí takových výsledků jako kvalitní text s přidanou hodnotou pro uživatele.]]></content:encoded>
                
                                    <category><![CDATA[SEO]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/77/773ae472-1a9f-4f95-a2da-591e27f1dd51/conversions/automatically-generated-content-full.jpeg" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Správná vstupní stránka pro SEO]]></title>
                <link>https://www.pavelzanek.com/cs/blog/correct-landing-page</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/correct-landing-page</guid>
                <pubDate>Wed, 31 May 2017 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Zjistěte, co je vstupní stránka, jak ji správně navrhnout pro SEO a jak zajistit, aby přiváděla relevantní návštěvnost.]]></description>
                
                                    <content:encoded><![CDATA[St&aacute;le se setk&aacute;v&aacute;m (nejčastěji u e-shopů) s př&iacute;pady, kdy webov&eacute; str&aacute;nky vrac&iacute; &scaron;patn&eacute; vstupn&iacute; str&aacute;nky. Jestliže vrac&iacute;te nerelevantn&iacute; vstupn&iacute; str&aacute;nku&nbsp;pro konkr&eacute;tn&iacute; dotazy, pak&nbsp;můžete přich&aacute;zet o n&aacute;v&scaron;těvn&iacute;ky, př&iacute;padně na str&aacute;nk&aacute;ch může b&yacute;t&nbsp;vysok&aacute; m&iacute;ra odchodů&nbsp;(bounce rate) a z&aacute;roveň&nbsp;n&iacute;zk&yacute; konverzn&iacute; poměr.
Představte si, že do vyhled&aacute;vače zad&aacute;te dotaz &ldquo;notebook lenovo ssd&ldquo;. Ček&aacute;te, že mezi v&yacute;sledky vyhled&aacute;v&aacute;n&iacute; budou webov&eacute; str&aacute;nky nab&iacute;zej&iacute;c&iacute; relevantn&iacute; zbož&iacute;, nicm&eacute;ně opak je pravdou. Pod&iacute;vejte se na screenshot, kde jsem označil, proč vstupn&iacute; str&aacute;nky nejsou pro dotaz relevantn&iacute;.

Jak vid&iacute;te, do v&yacute;sledku vyhled&aacute;v&aacute;n&iacute; se mi dost&aacute;vaj&iacute; odkazy na weby, kde nab&iacute;zej&iacute; předev&scaron;&iacute;m pouze jeden z parametrů, kter&yacute; jsem k notebookům zadal. Tady sami můžete vidět, že lid&eacute; mohou tyto v&yacute;sledky přeskočit a pokračovat v hled&aacute;n&iacute; d&aacute;l. D&aacute;le je nutn&eacute; ř&iacute;ci, že webov&eacute; str&aacute;nky, kter&eacute; se vyskytuj&iacute; na předn&iacute;ch pozic&iacute;ch,&nbsp;mohou odpovědět relevantn&iacute; str&aacute;nkou&nbsp;&ndash; konkr&eacute;tn&iacute; typ notebooků maj&iacute; v nab&iacute;dce.
Z&aacute;roveň je z tohoto př&iacute;kladu jasn&eacute;, že ne vždy je prvn&iacute; pozice v&yacute;hra. Můžete na dotazy vyskakovat na prvn&iacute;ch pozic&iacute;ch, ale pokud vrac&iacute;te&nbsp;&scaron;patnou vstupn&iacute; str&aacute;nku, pak nemus&iacute;te m&iacute;t takovou&nbsp;m&iacute;ru proklikovosti,&nbsp;jako web pod v&aacute;mi nab&iacute;zej&iacute;c&iacute; relevantn&iacute; vstupn&iacute; str&aacute;nku. Pak už je jen na vyhled&aacute;vač&iacute;ch, kdy si v&scaron;imnou, že web pod v&aacute;mi nab&iacute;z&iacute; v&iacute;ce relevantn&iacute; odpověď a po čase může přehodnotit pozice a v&aacute;s může&nbsp;přem&iacute;stit na hor&scaron;&iacute; pozice&nbsp;než se zobrazujete nyn&iacute;. Zat&iacute;mco se&nbsp;web s relevantn&iacute; vstupn&iacute; str&aacute;nkou&nbsp;může dost&aacute;vat&nbsp;do popřed&iacute; vyhled&aacute;vačů.
Jak zjistit, jakou vstupn&iacute; str&aacute;nku vrac&iacute;m na dotaz
Pokud v&aacute;s zaj&iacute;m&aacute;, jak&eacute; vstupn&iacute; str&aacute;nky vrac&iacute;te na dotazy ve v&yacute;sledc&iacute;ch vyhled&aacute;v&aacute;n&iacute;, pak existuje několik možn&yacute;ch ře&scaron;en&iacute;, jak analyzovat jejich současn&yacute; stav. Samotn&aacute; anal&yacute;za je celkem jednoduch&aacute;, obt&iacute;žněj&scaron;&iacute; je v&scaron;ak optimalizovat webov&eacute; str&aacute;nky, aby vracely spr&aacute;vn&eacute; vstupn&iacute; str&aacute;nky na dotazy lid&iacute;.Jestliže chcete zač&iacute;t analyzovat, pak mus&iacute;te splňovat jist&eacute; předpoklady &ndash; resp. můžete se rozhodnout, jak k v&yacute;sledku dojdete. Zde jsou jednotliv&eacute; možnosti, jak analyzovat vstupn&iacute; str&aacute;nky:

pomoc&iacute; Google Analytics

př&iacute;mo v Google Analytics
pomoc&iacute; extern&iacute;ch n&aacute;strojů &ndash; Google Data Studio, Power BI, &hellip;


pomoc&iacute; n&aacute;strojů na přeměřov&aacute;n&iacute; pozic + zji&scaron;těn&iacute; vstupn&iacute; str&aacute;nky

Marketing Miner
Collabim



Možnost&iacute;, jak postupovat, by se dalo vymyslet v&iacute;ce. Toto jsou v&scaron;ak podle mne nejjednodu&scaron;&scaron;&iacute; cesty jak se dostat k v&yacute;sledku, zda vrac&iacute;me spr&aacute;vnou nebo &scaron;patnou vstupn&iacute; str&aacute;nku na konkr&eacute;tn&iacute; dotaz. V tomto čl&aacute;nku se zaměř&iacute;m na postup č&iacute;slo 1 &ndash; tzn. anal&yacute;za pomoc&iacute; Google Analytics. Pokud v&scaron;ak bude z&aacute;jem, vytvoř&iacute;m pro v&aacute;s n&aacute;vod v n&aacute;stroji&nbsp;Google Data Studio, kde si můžete v&yacute;sledky l&eacute;pe zn&aacute;zornit pro snadněj&scaron;&iacute; anal&yacute;zu dat.
Postup by se dal použ&iacute;t i na jin&eacute; marketingov&eacute; zdroje, my se v&scaron;ak&nbsp;zaměř&iacute;me na organick&eacute; v&yacute;sledky vyhled&aacute;v&aacute;n&iacute;&nbsp;(tzn. na neplacenou č&aacute;st v&yacute;sledků vyhled&aacute;v&aacute;n&iacute;).
Google Analytics &ndash; vrac&iacute; vyhled&aacute;vač spr&aacute;vnou vstupn&iacute; str&aacute;nku?
Pod&iacute;vejme se společně, jak můžete pomoc&iacute; Google Analytics z&iacute;skat přehled, jak&eacute; vstupn&iacute; str&aacute;nky vrac&iacute;te na konkr&eacute;tn&iacute; dotazy ve vyhled&aacute;vač&iacute;ch.

Přihlaste se do&nbsp;Google Analytics
Vyberte web, kter&yacute; chcete analyzovat
v lev&eacute;m menu vyberte &ldquo;Akvizice&rdquo; -&gt; &ldquo;Přehled&rdquo;
Zvolte &ldquo;Organic Search&rdquo;
Přidejte sekund&aacute;rn&iacute; dimenzi &ndash; &ldquo;Vstupn&iacute; str&aacute;nka&rdquo;
data můžeme odfiltrovat pomoc&iacute; roz&scaron;&iacute;řen&eacute;ho filtru od &ldquo;np &ndash; /&rdquo;; (not provided)

zvolte roz&scaron;&iacute;řen&yacute; filtr
vylučte z kl&iacute;čov&yacute;ch slov v&scaron;e, co nechcete, aby v&aacute;m do anal&yacute;zy zapadlo




Nyn&iacute; byste měli m&iacute;t přehled kl&iacute;čov&yacute;ch slov a k nim přiřazenou vstupn&iacute; str&aacute;nku pouze pro organik. Můžete si kontrolovat, zda na dotazy odpov&iacute;d&aacute;te relevantn&iacute; vstupn&iacute; str&aacute;nkou. Z&aacute;roveň se můžete pod&iacute;vat, zda m&aacute;te vy&scaron;&scaron;&iacute; procento odchodů a niž&scaron;&iacute; konverznost než na relevantn&iacute;ch vstupn&iacute;ch str&aacute;nk&aacute;ch &ndash; u vět&scaron;iny webů to takto b&yacute;v&aacute; zvykem.
Pokud jste objevili, že vrac&iacute;te &scaron;patnou vstupn&iacute; str&aacute;nku, můžete zač&iacute;t s optimalizac&iacute; webov&yacute;ch str&aacute;nek. D&iacute;ky n&iacute; si tedy můžete

zv&yacute;&scaron;it&nbsp;počet n&aacute;v&scaron;těvn&iacute;ků&nbsp;z vyhled&aacute;vačů
sn&iacute;žit&nbsp;bounce rate (m&iacute;ra odchodů)
zv&yacute;&scaron;it&nbsp;konverzn&iacute; poměr&nbsp;a zv&yacute;&scaron;it tedy i&nbsp;tržby/zisky
zv&yacute;&scaron;it&nbsp;čas str&aacute;ven&yacute; na str&aacute;nce

Proč nevrac&iacute;m relevantn&iacute; vstupn&iacute; str&aacute;nku
Pokud se chcete zaměřit na důvody, proč&nbsp;vyhled&aacute;vač nevrac&iacute; spr&aacute;vnou vstupn&iacute; str&aacute;nku, pak si budete muset d&aacute;t pr&aacute;ci s&nbsp;analyzov&aacute;n&iacute;m současn&eacute;ho stavu&nbsp;va&scaron;ich webov&yacute;ch str&aacute;nek.
Důvodů, proč vyhled&aacute;vač vrac&iacute; jinou vstupn&iacute; str&aacute;nku než si přejete, může b&yacute;t několik. Pod&iacute;vejme se na&nbsp;body, kter&eacute; mohou ovlivnit vracej&iacute;c&iacute; vstupn&iacute; str&aacute;nku:

&scaron;patn&eacute;&nbsp;intern&iacute; prolinkov&aacute;n&iacute;&nbsp;webov&yacute;ch str&aacute;nek
roztř&iacute;&scaron;těnost s&iacute;ly v r&aacute;mci&nbsp;link buildingov&yacute;ch aktivit&nbsp;(např. směřujete odkazy se &scaron;patn&yacute;mi anchor texty, backlinky vedou na jin&eacute; str&aacute;nky než by měly -&gt; zvy&scaron;ujete s&iacute;lu jin&yacute;ch str&aacute;nek než těch, kter&eacute; jsou zapotřeb&iacute;)
neznalost vyhled&aacute;vače &ndash; nev&iacute; o spr&aacute;vn&eacute; vstupn&iacute; str&aacute;nce -&gt; na str&aacute;nce může b&yacute;t nastaven&yacute;&nbsp;noindex, z&aacute;kaz v&nbsp;robots.txt,&nbsp;parametrick&aacute; URL&nbsp;vstupn&iacute; str&aacute;nky,&hellip;
př&iacute;padně pak nejz&aacute;važněj&scaron;&iacute; probl&eacute;m &ndash;&nbsp;m&aacute;te vstupn&iacute; str&aacute;nku vytvořenou? ?

Důvodů může b&yacute;t daleko v&iacute;ce, ale od těchto bodů je vždy dobr&eacute; se odrazit.&nbsp;U každ&eacute;ho projektu může b&yacute;t důvod &uacute;plně jin&yacute;.
TIP:&nbsp;V r&aacute;mci vizualizace intern&iacute;ho prolinkov&aacute;n&iacute; webu můžete použ&iacute;t n&aacute;stroj&nbsp;Gephi.
TIP:&nbsp;Můžete si prověřit, zda&nbsp;spr&aacute;vnou vstupn&iacute; str&aacute;nku vrac&iacute;te pro různ&eacute; vyhled&aacute;vače&nbsp;&ndash; můžete např&iacute;klad vracet spr&aacute;vnou vstupn&iacute; str&aacute;nku na Seznamu, ale na Google již může b&yacute;t vstupn&iacute; str&aacute;nka nerelevantn&iacute;.
Vyzkou&scaron;ejte si zm&iacute;něn&yacute; postup, jak objevit, zda odpov&iacute;d&aacute;te vstupn&iacute;mi str&aacute;nkami na dotazy lid&iacute;.&nbsp;Během chvilky si tak můžete poodhalit možn&aacute; &uacute;skal&iacute; va&scaron;ich webov&yacute;ch str&aacute;nek.]]></content:encoded>
                
                                    <category><![CDATA[SEO]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/8b/8b4bcef0-1334-4307-84b1-12bb3168f69f/conversions/correct-landing-page-featured-img-full.jpeg" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Sběr dat – keyword research – Část 1]]></title>
                <link>https://www.pavelzanek.com/cs/blog/data-collection-keyword-research-part-1</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/data-collection-keyword-research-part-1</guid>
                <pubDate>Sat, 22 Apr 2017 00:00:00 +0200</pubDate>

                                    <description><![CDATA[Pokud se rozhodneme provést analýzu klíčových slov, musíme začít se sběrem dat, který prozkoumáme v tomto článku.]]></description>
                
                                    <content:encoded><![CDATA[Data na "pap&iacute;r"
Existuje několik n&aacute;strojů, kter&eacute; n&aacute;m pomohou, ale vřele doporučuji je&scaron;tě před t&iacute;m vyt&aacute;hnout kus pap&iacute;ru. Na zač&aacute;tku je vhodn&eacute; sepsat ve&scaron;ker&eacute; dotazy/fr&aacute;ze/kl&iacute;čov&aacute; slova, jak V&aacute;s mohou lid&eacute; nejsp&iacute;&scaron;e vyhled&aacute;vat (nav&scaron;těvovat) a tyto slova z&aacute;roveň reflektuj&iacute; Va&scaron;e webovky. Jedn&aacute; se o dost opom&iacute;jenou č&aacute;st &ndash; v agentur&aacute;ch jsem se setkal s t&iacute;m, že rovnou pře&scaron;li k využit&iacute; n&aacute;strojů. Pokud v&scaron;ak stoj&iacute;te za projektem, m&aacute;te daleko v&iacute;ce znalost&iacute; o sv&eacute;m oboru a tak&eacute; můžete vytipovat, jak V&aacute;s lid&eacute; hledaj&iacute;. Kromě vyps&aacute;n&iacute; relevantn&iacute;ch slov, kter&aacute; V&aacute;s napadnou si můžete udělat i přehled, jak lid&eacute; vyhled&aacute;vaj&iacute; obor, když o něm maj&iacute; znalosti (zde si vyp&iacute;&scaron;ete fr&aacute;ze s určitou terminologi&iacute; oboru) a z&aacute;roveň pokud nemaj&iacute; znalosti (laick&eacute; a neodborn&eacute; v&yacute;razy). D&aacute;le si pak můžete udělat přehledy v synonymech (opisech slov) &ndash; USA/Amerika; Opasky/P&aacute;sky; Auto/Aut&iacute;čko/Automobil/Osob&aacute;k.
Roz&scaron;&iacute;řen&iacute; dat z "pap&iacute;ru"
Jako druh&yacute; bod při sběru dat je důležit&eacute; roz&scaron;&iacute;řit na&scaron;e v&yacute;razy o dal&scaron;&iacute; relevantn&iacute; v&yacute;razy. Zde už poprv&eacute; s&aacute;hneme po n&aacute;stroj&iacute;ch, kter&eacute; jsou zdarma. Konkr&eacute;tně se jedn&aacute; o &ldquo;Pl&aacute;novač kl&iacute;čov&yacute;ch slov&rdquo; na Google Adwords a o &ldquo;N&aacute;vrh kl&iacute;čov&yacute;ch slov&rdquo; na Seznam Sklik. Osobně postupuji n&iacute;že popsan&yacute;m způsobem, ale z&aacute;lež&iacute; na V&aacute;s, jak budete postupovat.

Po přihl&aacute;&scaron;en&iacute; do Skliku se nejdř&iacute;ve začnu pt&aacute;t&nbsp;n&aacute;vrhu kl&iacute;čov&yacute;ch slov na dotazy, kter&eacute; jsem si sepsal na pap&iacute;r. Dal&scaron;&iacute; postup z&aacute;lež&iacute; na projektu a na konkr&eacute;tn&iacute;m kl&iacute;čov&eacute;m slově. Z n&aacute;vrhu totiž můžeme vyb&iacute;rat slova, kter&aacute; jsou relevantn&iacute; a pot&eacute; je st&aacute;hneme.

Dal&scaron;&iacute; možnost&iacute; je stažen&iacute; ve&scaron;ker&yacute;ch navržen&yacute;ch slov (kde se budou vyskytovat i nerelevantn&iacute; slova) a v dal&scaron;&iacute;m d&iacute;le (až budeme data čistit) se zbav&iacute;me nerelevantn&iacute;ch slov.Z&aacute;lež&iacute; vždy na V&aacute;s, jak&yacute; krok je pro V&aacute;s př&iacute;nosněj&scaron;&iacute; &ndash; zde jsou zapotřeb&iacute; již nějak&eacute; zku&scaron;enosti, abyste poznali, kter&yacute; krok je pro V&aacute;s lep&scaron;&iacute;. U prvn&iacute; metody už nemus&iacute;me čistit data od &ldquo;balastu&rdquo; (nerelevantn&iacute; slova), v druh&eacute; metodě dostaneme do datasetu nerelevantn&iacute; kl&iacute;čov&aacute; slova, kter&aacute; by mohla b&yacute;t využita v PPC jako tzv. &ldquo;vylučuj&iacute;c&iacute; slova&rdquo; v reklamn&iacute;ch kampan&iacute;ch. Pokud stahujeme data z Skliku, doporučuji ponech&aacute;vat v&scaron;echna data, kter&aacute; n&aacute;m Seznam nab&iacute;z&iacute; &ndash; průměrn&aacute; CPC, konkurence, měs&iacute;čn&iacute; hledanost v konkr&eacute;tn&iacute;ch měs&iacute;c&iacute;ch, průměrn&aacute; měs&iacute;čn&iacute; hledanost za posledn&iacute;ch 12 měs&iacute;ců, apod. Tato data bychom eventu&aacute;lně nepotřebovali, av&scaron;ak mohou se hodit např. pro zji&scaron;těn&iacute; trendu podle sez&oacute;n jednotliv&yacute;ch KW. J&aacute; si např&iacute;klad sh&aacute;n&iacute;m tato data přes jin&eacute; webovky (např. Collabim, ale o tom až později).
Stejn&yacute; způsob se d&aacute; použ&iacute;t i v Google Adwords v pl&aacute;novači kl&iacute;čov&yacute;ch slov. Doporučuji v&scaron;ak do Google Adwords zad&aacute;vat obecněj&scaron;&iacute; v&yacute;razy a v&iacute;ce konkr&eacute;tn&iacute; dotazy zad&aacute;vat do Skliku. Velk&aacute; v&yacute;hoda pl&aacute;novače (GA) je v tom, že se můžeme pt&aacute;t i na v&iacute;ce dotazů najednou na rozd&iacute;l od Skliku, kdy můžeme zadat pouze jednu kl&iacute;čovou fr&aacute;zi. Pl&aacute;novač disponuje i funkc&iacute; na z&iacute;sk&aacute;n&iacute; dat o objemu vyhled&aacute;v&aacute;n&iacute; &ndash; můžete zadat pr&aacute;vě např&iacute;klad 500 kl&iacute;čov&yacute;ch slov, nechat je projet pl&aacute;novačem a on V&aacute;m pot&eacute; zjist&iacute; hledanosti. D&aacute;le se pak Adwords d&aacute; využ&iacute;t při roz&scaron;iřov&aacute;n&iacute; kl&iacute;čov&yacute;ch slov &ndash; pokud mu zad&aacute;me např. 10 kl&iacute;čov&yacute;ch slov, je schopen n&aacute;m je roz&scaron;&iacute;řit o dal&scaron;&iacute; slova a tud&iacute;ž pak po stažen&iacute; m&aacute;me vět&scaron;&iacute; dataset s dal&scaron;&iacute;mi slovy.N&aacute;stroje pl&aacute;novač kl&iacute;čov&yacute;ch slov a n&aacute;vrh kl&iacute;čov&yacute;ch slov patř&iacute; určitě mezi hlavn&iacute; a nejdůležitěj&scaron;&iacute; zdroje pro sběr dat a určitě byste je neměli vynechat. Dostanete tak nejv&iacute;ce slov, kter&eacute; jistě zužitkujete.
Google Analytics
M&aacute;te už webovky v provozu a z&aacute;roveň je m&aacute;te propojen&eacute; s Google Analytics? T&iacute;m p&aacute;dem m&aacute;te dal&scaron;&iacute; možnost, kam s&aacute;hnout po dal&scaron;&iacute;ch fr&aacute;z&iacute;ch. Z Google Analytics si můžete vyexportovat kl&iacute;čov&aacute; slova &ndash; stač&iacute; si v GA zvolit jako akvizici organic a pot&eacute; už jednodu&scaron;e st&aacute;hnout ve&scaron;ker&eacute; fr&aacute;ze.

Otevř&iacute;t GA
Zvolit &ldquo;Akvizice&rdquo; &ndash; &ldquo;Ve&scaron;ker&aacute; n&aacute;v&scaron;těvnost&rdquo; &ndash; &ldquo;Kan&aacute;ly&rdquo;
Zvolit &ldquo;Organic Search&rdquo;
Odfiltrovat &ldquo;not set&rdquo; a &ldquo;not provided&rdquo; KW

Kliknout na &ldquo;roz&scaron;&iacute;řen&yacute;&rdquo; (vedle vyhled&aacute;v&aacute;n&iacute;)
&ldquo;Vyloučit&rdquo;- &ldquo;kl&iacute;čov&eacute; slovo&rdquo; &ndash; &ldquo;obsahuje&rdquo; &ndash; &ldquo;np -/ (not provided) a (not set)&rdquo;


Změnit počet zobrazen&yacute;ch ř&aacute;dků (viz info n&iacute;že)
Exportovat data (v horn&iacute; č&aacute;sti)

Zde jen upozorn&iacute;m na to, že pokud exportujete, Analytics dok&aacute;že vyexportovat pouze současnou str&aacute;nku (tud&iacute;ž, pokud m&aacute;te celkem 1 000 kl&iacute;čov&yacute;ch slov na str&aacute;nce, po stažen&iacute; jich st&aacute;hnete pr&aacute;vě 1 000, ačkoliv v cel&eacute;m přehledu GA jich můžete m&iacute;t např. 20 000 &ndash; takže byste stahovali 20 dokumentů). Analytics zat&iacute;m nedok&aacute;že vyexportovat v&scaron;echny KW, pokud nejsou na jedn&eacute; str&aacute;nce. U velk&yacute;ch datasetů doporučuji zvolit zobrazen&iacute; 5 000 položek a pot&eacute; str&aacute;nku po str&aacute;nce stahovat. Google Analytics n&aacute;m d&aacute; dal&scaron;&iacute; cenn&eacute; informace o konkr&eacute;tn&iacute;ch kl&iacute;čov&yacute;ch slovech, pokud je spr&aacute;vně nastaven &ndash; např. m&iacute;ra okamžit&eacute;ho opu&scaron;těn&iacute;, konverzn&iacute; poměry, nov&eacute; n&aacute;v&scaron;těvy, ale předev&scaron;&iacute;m i tržby a počet transakc&iacute; (což využijeme při určov&aacute;n&iacute; priorit &ndash; p&aacute;rov&aacute;n&iacute; dat z extern&iacute;ch zdrojů probereme v&scaron;ak až po oči&scaron;těn&iacute; datasetů od nerelevantn&iacute;ch fr&aacute;z&iacute;). Mus&iacute;te v&scaron;ak m&iacute;t spr&aacute;vně propojen&eacute; a nastaven&eacute; Analytics.
Google Webmasters Tools
Dal&scaron;&iacute; možnost&iacute;, kde sehnat dal&scaron;&iacute; data o tom, jak k n&aacute;m lid&eacute; pře&scaron;li, je pod&iacute;vat se do Google Webmasters Tools. Pokud m&aacute;te webov&eacute; str&aacute;nky propojeny s touto službou, tak:

Zajděte do GSC.
Zvolte si V&aacute;&scaron; web.
V lev&eacute;m menu vyberte n&aacute;v&scaron;těvnost z vyhled&aacute;v&aacute;n&iacute;.
Vyberte anal&yacute;zu vyhled&aacute;v&aacute;n&iacute;.


Tento n&aacute;stroj doporučuji proj&iacute;t a udělat si obr&aacute;zek o tom, jak tento n&aacute;stroj funguje. Můžete si zvolit i dal&scaron;&iacute; časov&eacute; obdob&iacute; &ndash; bohužel v&scaron;ak maxim&aacute;lně můžete vybrat data za posledn&iacute;ch 90 dn&iacute;. Pokud využ&iacute;v&aacute;te GSC, určitě doporučuji jej propojit s Google Analytics. Pak budete m&iacute;t &uacute;daje i za del&scaron;&iacute; časov&eacute; obdob&iacute;. Google search console tak&eacute; bohužel zobrazuje v přehledu pouze 1 000 kl&iacute;čov&yacute;ch slov / fr&aacute;z&iacute;.
TIP: Stahujte si tato data a spojte si je tak, aby na sebe navazovaly. Data a pr&aacute;ce s daty je často opom&iacute;jenou prac&iacute; česk&yacute;ch webů.
Na&scaron;ept&aacute;vač kl&iacute;čov&yacute;ch slov
Určitě nesm&iacute;me opomenout n&aacute;vrhy kl&iacute;čov&yacute;ch slov u vyhled&aacute;vačů. Když začnete ps&aacute;t fr&aacute;z&iacute;, vyhled&aacute;vače V&aacute;m zobraz&iacute; box&iacute;k, kde jsou roz&scaron;&iacute;řen&eacute; &uacute;daje, jak se můžeme vyhled&aacute;vače optat. I tyto fr&aacute;ze pro n&aacute;s mohou b&yacute;t užitečn&eacute; a určitě bychom je neměli opomenout. Pomoci n&aacute;m může online n&aacute;stroj&nbsp;keywordtool.io, kam stač&iacute; zadat kl&iacute;čov&eacute; slovo, vyhledat dal&scaron;&iacute; KW a pot&eacute; st&aacute;hnout nalezen&aacute; data. N&aacute;stroj použ&iacute;v&aacute;m ve free verzi, v placen&eacute; verzi jsou nav&iacute;c data z adwords &ndash; hledanost, cpc a konkurenčnost (ale placenou verzi nepouž&iacute;v&aacute;m &ndash; nemohu ohodnotit).
Konkurence
Nevyuž&iacute;v&aacute; n&aacute;hodou konkurence jin&eacute; označen&iacute; &ldquo;toho stejn&eacute;ho&rdquo; co nab&iacute;z&iacute;te Vy? Nem&aacute; konkurence jinak pojmenovan&eacute; kategorie? To a mnoho dal&scaron;&iacute;ho je potřeba zanalyzovat a až při pr&aacute;ci s anal&yacute;zou kl&iacute;čov&yacute;ch slov rozezn&aacute;me, jak&eacute; n&aacute;zvy použijeme (zda stejn&eacute; jako konkurence, nebo se odli&scaron;&iacute;me). V neposledn&iacute; řadě sledujeme konkurenci proto, abychom nezapomněli a nevynechali důležit&eacute; segmenty a dotazy. Tak&eacute; můžeme využ&iacute;t n&aacute;stroj&nbsp;Xenu/ScreamingFrog, kam stač&iacute; zadat url adresa konkurence a n&aacute;stroj n&aacute;m zjist&iacute; např&iacute;klad cenn&eacute; informace o tom, jak konkurence využ&iacute;v&aacute; titulky, popisky, nadpisy, apod., kde najdeme kl&iacute;čov&aacute; slova. Za zm&iacute;nku, jak vyhledat konkurenci, tak&eacute; stoj&iacute; Marketing Miner či Ahrefs.
Roz&scaron;&iacute;řen&iacute; kl&iacute;čov&yacute;ch slov
Dal&scaron;&iacute; možnost&iacute;, jak z&iacute;skat dal&scaron;&iacute; relevantn&iacute; dotazy (av&scaron;ak bez zji&scaron;těn&iacute; toho, zda maj&iacute; nějakou hledanost, impresi, atd. &ndash; to lze o&scaron;etřit posl&eacute;ze až budeme mluvit o Collabimu či Marketing Mineru) je využit&iacute; n&aacute;stroje &ldquo;roz&scaron;&iacute;řen&iacute; kl&iacute;čov&yacute;ch slov&rdquo;. Stač&iacute; zadat hlavn&iacute; kl&iacute;čov&eacute; slovo, d&aacute;le pak jednotliv&eacute; vlastnosti a n&aacute;stroj se postar&aacute; o jejich prokombinov&aacute;n&iacute;.
Google Adwords a Seznam Sklik
Pod&iacute;vejme se na vyhled&aacute;vac&iacute; fr&aacute;ze z reklamn&iacute;ch kampan&iacute;. Pozn&aacute;me tak i to, jak lid&eacute; psali dotazy do vyhled&aacute;vačů, reklama se zobrazila a t&iacute;m p&aacute;dem m&aacute;me dal&scaron;&iacute; zdroj pro z&iacute;sk&aacute;n&iacute; dal&scaron;&iacute;ch dat.
Zat&iacute;m jsme tedy z&iacute;skali data z různ&yacute;ch zdrojů. Nyn&iacute; je na čase je seskupit. Otevřeme si tedy Excel nebo jin&yacute; tabulkov&yacute; n&aacute;stroj a vlož&iacute;me do něj pouze kl&iacute;čov&aacute; slova. Pokud jsme při sběru narazili na data i s dal&scaron;&iacute;mi &uacute;daji, ponech&aacute;me si jej zat&iacute;m odděleně. Pracovat tedy nyn&iacute; budeme pouze s datasetem s kl&iacute;čov&yacute;mi slovy.
Pozn&aacute;mka: Pokud chcete pracovat s fr&aacute;zemi s nadlimitn&iacute; hledanost&iacute; nebo nadlimitn&iacute; impres&iacute; (či podle Va&scaron;ich pravidel &ndash; z&aacute;lež&iacute; co jste s daty st&aacute;hli dal&scaron;&iacute;ho), doporučuji zde vytvořit dal&scaron;&iacute; dokument a separovat do něj podlimitn&iacute; fr&aacute;ze.]]></content:encoded>
                
                                    <category><![CDATA[SEO]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/6b/6bf2bdf9-374a-4d40-8970-2a1c486feb80/conversions/keyword-research-featured-img-full.jpeg" type="image/jpeg" />
                            </item>
                    <item>
                <title><![CDATA[Keyword research – Kompletní průvodce]]></title>
                <link>https://www.pavelzanek.com/cs/blog/keyword-research</link>
                <guid isPermaLink="true">https://www.pavelzanek.com/cs/blog/keyword-research</guid>
                <pubDate>Sat, 22 Apr 2017 00:00:00 +0200</pubDate>

                                    <description><![CDATA[&quot;Klíčová slova? Jen je nacpat do textu a jsem optimalizovaný!&quot; Tak to opravdu nefunguje. Moderní keyword research je o tom, jak lidé vyhledávají ve vašem oboru.]]></description>
                
                                    <content:encoded><![CDATA[Analýza klíčových slov – kompletní průvodce
"Klíčová slova? Nasázejte mi je do textu a mám optimalizováno!" Tak takhle to opravdu nefunguje. Možná tak před několika lety. V dnešní době, pokud chcete pracovat s klíčovými slovy, musíte se je naučit vyhledat a správně používat – a v tom vám pomůže analýza klíčových slov.
Obsah článku
Proč takovou analýzu klíčových slov mít ve svých marketingových podkladech? Důvodů je hned několik. Zjistíte, jak je váš obor vyhledáván, jak se lidé ptají vyhledávačů, objevíte různé typy klíčových slov, které se mohou v některých parametrech shodovat a v některých odlišovat – zkrátka zjistíte jak se lidé orientují v oboru a díky tomu jim můžete usnadnit se zorientovat v procházení webových stránek.
Jestliže to myslíte s online marketingem vážně, pak by analýza klíčových slov neměla chybět ve vašich materiálech pro zvyšování návštěvnosti webových stránek z internetových vyhledávačů.
Díky analýze zjistíte, jaké fráze jsou pro váš web relevantní a přínosné. Následně můžete navrhnout co nejlepší informační architekturu webových stránek nebo vám například pomůže se zlepšením obsahové strategie či při budování zpětných odkazů v rámci link buildingu.
Analýza klíčových slov je seznam klíčových slov, dotazů a frází, ke kterým jsou přidány cenné informace užitečné pro vaše podnikání. Díky nim můžete provést optimalizaci webových stránek pro vyhledávače různými způsoby – např. návrh informační architektury, revize obsahové strategie, zjištění přínosu před samotným rozšířením obchodu, atd. Dále pak díky analýze zjistíte, jak je váš obor vyhledáván a zda pokrýváte všechny možné segmenty.
Analýza vám nepomůže pouze v SEO (setkal jsem se i s označením "SEO analýza", což si myslím, že není ekvivalentem – SEO analýza by měla zrevidovat celkový stav webových stránek z hlediska SEO), ale pomůže také v PPC (např. vylučující slova pro reklamní kampaně), mailingu (např. newsletter – nejhledanější produkty v Česku ve vašem oboru), obsahovém marketingu – copywritingu (SEO texty, SEO články, …) a v mnoha dalších odvětvích.
Také jste se mohli setkat s označením AKW, což není zrovna dobrá zkratka – čeština a angličtina dohromady. Spíše jste se mohli setkat s KWR, což pochází ze sousloví "Keyword Research".
K čemu slouží analýza

získáte seznam relevantních frází, dotazů a klíčových slov, jak vás lidé vyhledávají
zjistíte, zda lidé vyhledávají podle určitých pravidel / vzorů
podklady, které využijete v různých oblastech online marketingu
zjistíte, jaké segmenty nemáte pokryty a ztrácíte tak další případné návštěvníky
můžete odhalit klíčová slova, která např. nemá pokryta konkurence
při návrhu informační architektury pro tvorbu webových stránek, případně při úpravě

Co se dozvím o klíčových slovech?
Podívejme se společně, co je dobré díky analýze klíčových slov zjistit o dotazech. Co byste se o nich měli dozvědět jsem rozdělil do několika podtémat:

relevance s vaším oborem
konverznost klíčového slova
konkurence / obtížnost se prosadit
segmentace klíčových slov

Relevance s vaším oborem
Jsou klíčová slova z analýzy relevantní pro váš business? Jsou přínosné a pomáhají vám konvertovat návštěvníka v zákazníka? Nepoužíváte klíčová slova, která jsou daleko od vašeho oboru a na tyto klíčová slova máte vysokou míru odchodů? Zkrátka řečeno zjistíte, jak jsou pro vás konkrétní klíčová slova důležitá a zda je správně používáte. Máte-li např. e-shop zaměřený na prodej módních doplňků, určitě se vyhněte slovům jako "oblečení, oděvy, …". A to jen proto, že si myslíte, že to jsou hodně vyhledávaná slova (avšak už nejsou relevantní).
Konverznost klíčového slova
Analyzujte, jak si konkrétní klíčová slova vedou v tržbách. Vodí vám klíčová slova tržby nebo pouze vysokou návštěvnost? Z analýzy se právě dozvíte, jaká KW jsou přínosná a která byste raději měli vypustit. Vaším cílem určitě není mít co největší návštěvnost, ale aby návštěvníci splnili vaše naplánované cíle – ať už provedení obchodu, přihlášení k newsletteru nebo třeba napsání komentáře. Tím pádem si můžete zvýšit konverzní poměr a nabízet lidem to, co opravdu chtějí. Po analyzování dotazů si můžete jednoduše zjistit, jak zvýšit prodej.
Konkurence/obtížnost se prosadit
Našli jste segment, který chcete optimalizovat? A víte, jak obtížné to bude? Z analýzy se to jednoduše dočtete. Například si představte, že máte vstupní stránku na první stránce ve výsledcích vyhledávání cca na 9 pozici a řeknete si, že byste chtěli začít optimalizovat dané KW – které je vysoce hledáno. Zároveň však víte, že máte i jinou vstupní stránku s nižší hledaností, avšak zobrazuje se až na 5. stránce a návštěvnost na ní máte skoro nulovou. Co myslíte, bude jednodušší optimalizovat vstupní stránku zobrazující se na první straně ve výsledcích vyhledávání nebo vstupní stránku zobrazující se na 5. straně? Ze zkušeností vím, že se mnohdy vyplatí optimalizovat stránky, které se špatně zobrazují ve výsledcích – stačí daleko méně času, stránku posunete např. na 2. stranu ve výsledcích, začnete vodit daleko větší návštěvnost a tudíž můžete i dříve konvertovat návštěvníky v zákazníky (a v neposlední řadě stihnete optimalizovat i další vstupní stránky, než byste dodělali optimalizaci vstupních stránek zobrazujících se na první straně). U stránek, které se dobře zobrazují (první stránka výsledků vyhledávání) je těžší získat lepší pozice za krátký čas – ale i to jde :).
Také však z analýzy klíčových slov zjistíte za určité období, kolik vám např. klíčové slovo přivedlo tržeb, jaké je konkurence ve výsledcích vyhledávání, jakou marži máte na daný segment, jaká je priorita obchodu na prodej konkrétního segmentu a mnoho dalším metrik, které využijete při zjišťování obtížnosti se prosadit.
Segmentace klíčových slov
Jak jsem již psal v minulém bodě, o klíčových slovech se dozvíte, do jakého segmentu patří – jedná se o jakousi kategorizaci klíčových slov. Můžete si pak z analýzy klíčových slov vyfiltrovat, zda vás zajímají klíčová slova relevantní pro nějakou kategorii, klíčová slova relevantní pro produktové stránky, dotazy informačního charakteru, … To však není všechno, zároveň zjistíte o klíčových slovech veškeré parametry, které jsou s ním hledány – může to být např. barva, typ pohonu, rozpětí, příkon, značka, pohlaví, sezónnost, … Díky tomu pak zjistíte, jaké segmenty vám na webu chybí – a tak vám analýza pomůže i při návrhu informační architektury webu – tzn. zjistíte, co použijete v hlavním menu, v podpůrných menu, kategoriích, štítcích, filtrech, jaké vstupní stránky vytvoříte a mnoho dalšího.
Jestliže zapracujete na webu s ohledem na analýzu, nezískáte pouze vyšší návštěvnost z vyhledávačů (případně vyšší pozice k současným KW), ale také si můžete udělat obrázek o svých návštěvnících. Pochopíte jejich vyhledávání a můžete jim nabízet odpovědi, obecně řečeno připravíte se na ně a již budete vědět, co je zajímá.
Samotná analýza klíčových slov je jen jedním z mnoha střípků k úspěšné optimalizaci webu, je důležité myslet také na on page faktory. Pokud nebudete v rámci technické části SEO dělat problémy vyhledávačům, těmito kroky se můžete u vyhledávačů dostat do popředí. A kdo by nechtěl mít hezké pozice na Seznamu a Google, případně u dalších vyhledávačů, že? 🙂
Na co si dát pozor při výběru zhotovitele analýzy klíčových slov?
Jak už to bývá, i v Česku se setkávám s marketingovými agenturami či marketingovými konzultanty/specialisty, kteří vytvoří analýzu klíčových slov a tu odevzdají – bohužel v ní chybí několik faktorů, díky nímž poznáte, co v reálu skutečně dává smysl. Většinou to bývají jen "tupě" dohledaná slova z nástrojů – Plánovač klíčových slov (Adwords) a Návrh klíčových slov (Sklik) – a k nim dotažená hledanost seřazená od nejvíce hledaných frází. Těmto lidem jde podle mne především o zisk, nikoliv o to, aby při vás stáli a pomohli vám "nastartovat" SEO. Jste-li manažerem nebo SEO specialistou ve firmě, pak vám analýza musí ukázat dlouhodobý plán – musíte poznat, jakým směrem se budete ubírat a proč vlastně. Získáte-li od agentury nebo freelancera analýzu pouze s body na optimalizaci, pak nepoznáte, co pro vás je přínosnější z dlouhodobého hlediska. Resp. které úpravy jsou jednorázové/krátkodobé, jaké KPI vám změna přinese, jak je prioritní a proč,…
Pokud si tedy budete vybírat agenturu nebo specialistu, aby vám vytvořil analýzu klíčových slov, pak si musíte dát pozor na několik věcí – především si musíte sami zvážit, co očekáváte od analýzy a kde a jak ji chcete používat (případně vám SEO konzultant poradí). Obecně lze však říci, že vás nejspíše bude zajímat:

Jaké segmenty nejsou pokryty, případně jaké nejsou v "dobrém" stavu + doporučení, které segmenty optimalizovat nejprve a které až posléze tak, abyste co nejrychleji mohli splnit vaše stanovené cíle.
Jak by měla vypadat informační architekura – jsou správně navrženy kategorie, štítky, filtrace, obsahové stránky,…?
Používáme správně klíčová slova v rámci obsahové strategie či pojmenování stránek/sekcí?
Které segmenty stojí za lepší prolinkování (ať už interně, tak pomocí backlinků)?

Co by nemělo chybět v kvalitně odvedené analýze?

Priorita – Co je pro mne momentálně prioritní? Co mohu udělat později a co bych měl udělat nyní, abych se nezatěžoval zbytečnou prací?
KPI – Jaký bude výsledek? Co každá změna přinese a jak se projeví? Jak mohu změnu zkontrolovat a jak sledovat další vývoj?
Roadmapa – Budu mít přehled všech změn, které by měly být provedeny a mohu si zaznamenávat současný progress? Případně mám od zhotovitele podklady, ve kterých jsou popsány body, podle kterých zjistím, kde nejlépe s optimalizací začít a jak budu pokračovat (úzce souvisí s prioritou)?

Analýza z pohledu zadavatele
Nyní se dozvíte, na co si dát pozor, když zadáváte poptávku po analýze klíčových slov. Je důležité si rozmyslet, co přesně od analýzy vyžadujete. Buď to můžete nechat na SEO specialistovi, který se s vámi dohodne na konkrétním řešení, nebo si předem stanovte cíle, kterých díky analýze chcete docílit.
Analýza může být provedena pouze pro určitou oblast – pro obsahovou strategii, pro analyzování konkrétního segmentu produktů/kategorií, podklad pro SEO specialistu – nebo může být analýza klíčových slov široce zaměřena na celý váš segment.
Aktualizovaná analýza klíčových slov
Jestliže si svoji analýzu klíčových slov budete aktualizovat, budete objevovat nová a nová témata. Pokud vaše konkurence nesleduje novinky vyhledávání skrze SEO nástroje, pak můžete rychle zasáhnout segment, který pro vás bude businessově přínosný a přitom nekonkurenční. A pokud tyto nové segmenty optimalizujete podle analýzy (vytvoření nových sekcí/kategorií/štítků/filtrací, psaní článků na aktuální témata, atd.), můžete se těšit na přední pozice a výhradní postavení ve výsledcích 🙂 (samozřejmě se může stát, že najednou konkurence začne tlačit). Jak objevit nové segmenty a trendy se dočtete v několikadílném seriálu na zhotovení analýzy klíčových slov.
Vytvořte si, nebo si nechte vytvořit KWR
Jestliže jste dočetli až sem, možná se rozhodnete analýzu vytvořit. Abych vám usnadnil práci, připravil jsem pro vás sérii návodů, kde vás provedu několika základními kroky při zhotovování a objasním vám, jak takovou základní analýzu klíčových slov vytvořit.
Nebo si ji analýzu můžete nechat vytvořit přímo ode mě, kde však používám pokročilejší a obsáhlejší postup, tudíž je výstup velmi kvalitní. Popsaná série návodů slouží spíše pro ilustraci postupu analýzy a jako základní návod.]]></content:encoded>
                
                                    <category><![CDATA[SEO]]></category>
                
                
                                    <enclosure url="https://www.pavelzanek.com/storage/media/29/295e5145-705b-4410-9eea-208537af7cfa/conversions/keyword-research-featured-img-full.jpeg" type="image/jpeg" />
                            </item>
            </channel>
</rss>
