Autor Zpráva
Anonymouz
Profil
Potřebuji pomocí JS zjistit zda se Title stránky ještě vejde do SERPu nebo už ne.
Bohužel to nejde udělat přes document.querySelector('meta[name="description"]').content.length;, protože Google to neměří na počet znaků, ale na šířku pixelů. Jde nějak měřit šířka stringu v PX pomocí JS?
Koukal jsem na nějaká již hotová řešení, ale všichni to řeší počet znaků, což není dostatečné řešení, když "i" zabírá méně místa než "W".
Hledám řešení bez jQuery, pouze v čistém JS.
Firibix
Profil
Reakce na Anonymouza:
Moc nevidím smysl se o to pokoušet. Každý uživatel může mít jinak nastavenou velikost písma, jiný font, jinou velikost a rozlišení obrazovky, každý prohlížeč a operační systém může vykreslovat text jiným způsobem, to všechno bude mít vliv na šířku textu. Navíc Google titulek (ani popisek) stránky nebere jen z <title> nebo <meta name="description">, ale za titulek prohlásí text na stránce, který sám uzná za vhodný. Vybraný titulek pro jednu stránku se navíc může lišit na základě dotazu, kterým ji uživatel našel.
Anonymouz
Profil
Firibix:
SERPu je jedno jak máš nastavené fonty. Výsledky vyhledávání zobrazí stejně, i když si fonty jakkoliv u sebe změníš.
anonym_
Profil *
Anonymouz:
Tvůj požadavek mi nedává smysl. Ale, když myslíš. Btw. jaká je ta správná délka, kterou google ještě zobrazí? Dá se o tom někde něco přečíst? :-)

Co se měření délky textu tyče, tak délku textu změřis například změřením inline elementu s tímto textem uvnitř.
Anonymouz
Profil
anonym:
Max délka titulku je cca 512px. Pak už ti text zkrátí a doplní trojtečku.
Do této délky se vejde třeba 128x písmeno i nebo jen 30x W. Každý znak je jinak široký. Proto se to nepočítá na počet znaků, ale na šířku v px.
lionel messi
Profil
Anonymouz:

Bohužel to nejde udělat přes document.querySelector('meta[name="description"]').content.length;, protože Google to neměří na počet znaků, ale na šířku pixelů.

Nemám čas toto tvrdenie overovať, mohol by si, prosím uviesť relevantný zdroj? Vopred ďakujem.

Hledám řešení bez jQuery, pouze v čistém JS.

Šírku akéhokoľvek HTML elementu zistíš pomocou JS metódy offsetWidth, len treba mysleiť na padding a rámček. Ak máš text umiestnený v rámci elementu, ktorý má nastavený tieto vlastnosti, mal by si ho obaliť (asi spanom), aby ti dané riešenie fungovalo.

Pokiaľ ide o efektivitu a vhodnosť riešenia, mnohé naznačuje posledná veta predošlého odseku.
Anonymouz
Profil
Jestli to teda chápu dobře, tak vzhledem k tomu, že meta nemá žádné rozměry, tak jediná možnost je vytvořit si nějaký nový element změřit ho a hned zase smazat.
Takže něco takového Živá ukázka

Problém je tedy asi vyřešen a děkuji všem za pomoc.


lionel messi:
Nemám čas toto tvrdenie overovať, mohol by si, prosím uviesť relevantný zdroj? Vopred ďakujem.
Sice nechápu, proč chceš číst zdroj, když nemáš čas si to ověřit a zjevně ani neřešíš stejný problém, ale v pohodě. Uveď parametry, co musí takový zdroj splňovat, aby pro tebe byl dostatečně relevantní.
Kajman
Profil
Nesmíte mít display:none, aby se to počítalo dobře. Zakaže zalomení řádku. Nevkládejte text, jako html, ale jako text. Když dáte return, tak po něm už se funkce ukončí a element neodstraní.
Anonymouz
Profil
Kajman:
Zkusil jsem předělat innetHTML na textContent a prohodit pořadí return, ale výsledné číslo mi připadá pořád stejné. Proč vlastně vadí zakázání zalomení řádku v tomto případě? Pokud chci vypočítat šířku stringu v PX, tak se to naopak nesmí zalamovat ne?
Živá ukázka
N71
Profil *
Připadá mi to dost overengeneered. Obecně se uvádí doporučená maximální délka 60 znaků, což se v pohodě vejde (okrajové situace nemá smysl řešit, pokud někdo udělá title ze samých WW, tak už použitelnosti ořezání stejně neublíží).

Mimochodem, PHP má v knihovně GD funkci imagettfbbox, takže rozměry textu jdou celkem bez problému měřit i server-side.


Anonymouz:
Dodatečná poznámka pod čarou. Vlastně tvůj problém zapadá do ostatních javascriptových nesmyslů, které ses rozhodl řešit. Svou hloupostí asi někam doprostřed. Takže jako bych nic nenapsal.
Anonymouz
Profil
N71:
A ty jsi jako kdo, že se tu chodíš navážet do ostatních? V úvodním postu není dotaz na tvůj názor zda něco je nebo není hloupost a ani se tam neptám na PHP nebo server-side řešení. Píšeš kraviny které nesouvisí s tématem a mylně predikuješ co tazatel asi tak potřebuje. Mektáš tu o hlouposti druhých a přitom mi radíš PHP, když v dotazu jasně píšu čisté JS. Příště odpovídej na dotazy a svou aroganci si strč za klobouk.
Pokud ti tak vadí číst nesmysly od hloupých lidí, tak prostě nechoď na fórum, které je zaměřené na pomoc nováčkům.
Kajman
Profil
Anonymouz:
Proč vlastně vadí zakázání zalomení řádku v tomto případě? Pokud chci vypočítat šířku stringu v PX, tak se to naopak nesmí zalamovat ne?

Ale já přece psal.
Zakaže zalomení řádku.

Stále ten zákaz zalomení v ukázce nemáte. Zkuste si v této
Titulek stranky - živá ukázka
zrušit zákaz zalomení (nowrap) a budete mít se stejným dlouhým textem OK.

Také bych si tu funkci napsat tak, aby pracovala jen s textem, aby se dala použít např. pro výpočet document.title. Odstranění elementu nemusíte řešit intervalem, stačí si výsledek uložit do proměnné, kterou vráti po jeho odstranění. Použil by i fixed, aby ten testovací element nerozhodil na tu chvilku layout stránky. Dalo by se to zkombinovat i se záporným top, aby se vypsal mimo viditelnou oblast.
Anonymouz
Profil
Kajman:
Moje chyba, četl jsem to a pochopil tak, že nesmím použít display:none, protože to zakáže zalomení řádku a ono to mělo být "Zakažte zalomení řádku". Takže jsem to nepochopil.
Děkuji za pomoc, zase jsem se naučil něco nového. To že výsledek zůstane uložen v proměnné i po smazání elementu, jsem nevěděl a nenapadlo mě to ani zkusit.
Jsem rád, že je tu i někdo, kdo mi fakt poradí a řeší můj dotaz místo toho aby zkoumal, jestli náhodou nejsem deb!l, že řeším takové kraviny.
Kajman
Profil
Ani napodruhé jsem si nevšiml, že mně tam vypadlo t, takže jsem nechápal nepochopení. Už to chápu.

Ještě pozor na zoomování. Pokud by to mělo počítat správně více uživatelům a nejde použít ta server-side, zvažte, zda nespočítat navíc i délku vzorového pevného textu a poměrem s vzorovým výsledkem dopočítat trojčlenkou výsledný rozměr, který takto zohlední zoom.
Keeehi
Profil
SERPu je jedno jak máš nastavené fonty. Výsledky vyhledávání zobrazí stejně, i když si fonty jakkoliv u sebe změníš.
To je hodně špatný předpoklad.
Rozdíl mezi levým a pravým screenshotem je jen ten, že jsem si změnil nastavení fontu v prohlížeči. A jak můžeš vidět výsledek v šířce na pixely tu je. Takže to, že si něco změříš u sebe v prohlížeči opravdu neznamená že se to tak zobrazí i u uživatele.
Firibix
Profil
Kajmanův skript z [#12] mi ve Windows hlásí, že titulek je dlouhý 2244 px, v Ubuntu 2540 px, na Androidu 2330 px. Nastavení fontů jsem ani na jednom zařízení neměnil, ve všech třech případech jsem použil prohlížeč Firefox.
N71
Profil *
Keeehi:
Takže to, že si něco změříš u sebe v prohlížeči opravdu neznamená že se to tak zobrazí i u uživatele.
To je sice pravda, ale klíčová otázka je, podle jaké metriky Google ořezává titulek. Není to zrovna triviální problém, na mobilu je to jinak než na desktopu (v obou případech server-side). Mimochodem, na mobilech jsou titulky v SERPu běžně víceřádkové, takže nowrap měření není zrovna průkazné.

Anonymouz:
Píšeš kraviny které nesouvisí s tématem a mylně predikuješ co tazatel asi tak potřebuje.
Psal jsem "mimochodem" server-side řešení, kdyby se v budoucnu snad objevil osvícenější návštěvník. Předchozí jádro sdělení bylo, že řešíš dlouhodobě ...... A o tom IMO není sebemenších pochyb.

Moderátor Kajman: Prosím slušně a bez vulgarit, chodí sem i děti.
Anonymouz
Profil
Keeehi:
Buďto nechápu jen já tebe, nebo se nechápeme vzájemně. Ve tvém příkladu nevidím změnu počtu znaků ve výsledku hledání. Přesto že sis změnil nastavení, tak máš description stejně dlouhý – změnilo se ti jen zalamování. Já vím, že když si u sebe změníš systémové nastavení fontů, použiješ lupu nebo upravíš prohlížeč, tak ta šířka bude u tebe jiná. Ale to je nastavení pouze u tebe a nemá to vliv na to, že SERP Googlu ti titulek/description ořízne podle svého nastavení, ne podle tvého. Google délku neřeší podle počtu znaků, protože každý znak je jinak dlouhý, řeší to právě na šířku v PX. Titulek 20px Arial a popisek 14px Arial 1DPI.

Serverové řešení jsem nechtěl, protože jde o rozšíření do prohlížeče pro jednoho známého, který se zabývá marketingem. Řešení, které hlídá pouze počet znaků je hrozně nespolehlivé.

Příklad:
Tento titulek má 68 znaků a projde: Ty nejlepší a nejdelší titulky na míru pro vás! | SERP ttulky s.r.o.
Tento titulek má pouze 58 znaků a už se tam nevejde Velkolepé webové SERP popisky LĚVNĚ — SERP nadpisy s.r.o.

To je prostě rozptyl 10 znaků (pouze u titulku, u popisků jsou rozdíly ještě větší), které řešit nemusíš pokud nemáš konkurenci nebo ti to je fuk. Ale pokud děláš marketing ve vysoce konkurenčním prostředí (reality, pojištění, atd…), kde se každý předhání a vyhazuje obří sumy, aby předběhl ostatní, tak vyškrabáváš prstíčkem i takovéto (pro někoho) blbosti jako je počet znaků, aby jsi třeba mohl použít emoji, ascii symbol nebo jinak formuloval větu v popisku a mohl tak víc přimět uživatele kliknout na svůj web. Takhle nějak mi to bylo řečeno. Dává mi to smysl a nezkoumám, jestli je to kravina, prostě mu chci pomoct, protože je to zase příležitost se na tom něco naučit a získat zkušenosti.
Programování mám jen jako hobby když je příležitost, nejsem žádný programátor, takže invektiva nechápu. Kor od někoho u koho vím, že četl toto vlákno a tedy si uvědomuje, že návštěvnost fóra je nízká a ví že sem chodí hlavně lidi, kteří tápou nad naprostými základy.
anonym_
Profil *
Anonymouz:
Každá kombinace platforma vs. prohlížeč spočítat délku stringu jinak. Firibix ti dal příklad, já mam na Macu čísla zase odlišná. Zkratka nic jako přesná délka stringu nebude ten rozptyl bude i v pixelech kolem 10 procent. Stejně, jako bys počítal znaky (neberu extrémy milion W vs. bambilion i, ale běžné texty s plus minus X znaky).
Anonymouz
Profil
anonym:
Nemám v plánu dávat to rozšíření volně ke stažení i jiným uživatelům, na jiné prohlížeče a jiný OS, jestli ti jde o tohle. Bude ho využívat jen jeden člověk. Kajmanův script mi funguje dobře jak ve Windows tak v Lubuntu. To co popisuje Firbix je podle mě dáno tím, že Ubuntu nemá ve výchozí instalaci font Arial, se kterým ten script pracuje. Takže s jiným fontem to samozřejmě jiné bude.
Každopádně i kdyby to mělo mít v budoucnu více uživatelů, tak detekovat a zohlednit jejich nastavení by neměl být problém ne?
Keeehi
Profil
Anonymouz:
Dobře, řekněme že je tedy písmo dané. Tak ani v tomto případě není nutné titulek fyzicky měřit. Ano, šířka znaků není stejná, ale je známá! Tudíž by neměl být problém vytvořit mapu a => 11px, b=> 11px, ..., i => 5px, ... Pak stačí řetězec po znacích projít, najít v mapě odpovídající hodnotu a připočíst k celkové sumě. Pokud to chceš mít úplně dokonalé, tak ještě při tom započteš vliv kerningu. Nicméně spočítat to jen z toho řetězce je to dá.
Kajman
Profil
Pro podporu unicode by to byla hodně velká mapa. Pokud to běží v rozšíření pro jednoho člověka, nechal bych to na měření vykreslení.
Anonymouz
Profil
Keeehi:
Pochopil jsem dobře, že to myslíš nějak takto? Živá ukázka

PS: Jsem si jist, že ten výstup se má počítat nějak elegantněji, protože tohle by při větším počtu znaků nepřehledné. Ale v tuto chvíli nevím jak a ani mě nenapadá co zadat do Googlu, abych našel řešení nebo nápovědu.
Kajman
Profil
Lze udělat např. replace každého znaku funkcí, která se podívá, zda v mapě je rozměr k tomu znaku, a buď ho přičte nebo přičte nějakou defaultní hodnotu k pomocné proměnné... Živá ukázka
Kcko
Profil
Kajman:
Co to míchaní var / let / const? ;)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0