Meta data auto fill

Pozdravljeni.

Iščem rešitev. kako bi s pomočjo php-ja sprogramiral neke vrste include, ki bi mi vsaj napol avtomatiziral proces onsite optimizacije za iskalnike. To bi mi omogočilo, da pri onsite optimizaciji mojih strani ne bi rabil vedno ročno šarit po sourcu in vpisovat keyworde, ampak bi to storil samo na enem koncu, ostalo pa se bi izpolnilo samo.

Torej vbistvu bi rabil 2 stvari:

  • Da skripta pogleda prvi odstavek v članku, in mi vsebino le-tega izpiše v meta description tagu
  • Da skripta pogleda h1 tag, in mi vsebino le-tega izpiše v title tagu in meta keywords tagu

Uporabljam custom made php platformo, vendar o samem php-ju nimam kaj dosti pojma (običen html z občasnimi php include stavki za footer, menije itd). Skoraj prepričan sem, da se tega nisem spomnil prvi in bi prosil, da kdo z mano deli svojo rešitev. Wordpress SEO plugini najverjetneje ne pridejo v poštev, glede na to, da ne uporabljam wordpressa, kajne? Obstaja kak plugin za normalne sajte, ali bo treba ročno napisat skripto?

9 odgovorov

najlazje pogledat v template, kjer se ti h1 vsebina izpise....recimo

<h1><?php echo $site_title;?></h1>

to kodo med h1 tagi skopiras pol v meta title html kodo

in ce imas recimo vsebino tako

<div id="content">
<?php echo $content;?>
</div>

bos skopiral <?php echo $content;?> v meta description... s tem, da bos moral spucat ven html in skrajsat na 150-200 znakov...pa verjetno bi moral se kake html entitiese spravit v normalni string...

torej nekaj takega:

$meta = htmlspecialchars_decode($content); //spremeni neke html entitete v string
$meta = strip_tags($meta); //izloci ven nepotrebne html elemente in izlusci ven le text
$meta = mb_substr($meta, 0, 170, 'UTF-8'); //skrajsa na 170 znakov, s tem, da bodi pazlij z encodingom, mb_substr dela pravilno z nasimi sumniki

in potem zapisesm $meta string v meta tagse...

kaj bolj specificno ti pa zalne morem pomagat, ker ne poznam tvoje kode

torej

2

Mešetar, najlepša ti hvala za tole obširno razlago.

Mi pa nikakor ne rata pripravit echoja do tega, da bi delal. Recimo če imam med head tagi tole:

<title><?php echo $content;?></title>
<META NAME="Title" CONTENT="<?php echo $content;?>">

Pa med vsebino tole:

<div id="content">karkoli je tu je content</div>

Ko naložim na server in refreshnem, ter na novo pogledam source, je med title tagi preprosto praznina. Isto, če probam samo z enim titlom in isto, če <?php echo $content;?> vstavim nekje v vsebinski del sajta. Kot, da ne bi vstavil ničesar. (prazni title tag pač)

Se opravičujem za butasto vprašanje, ampak s php-jem res še od blizu nisem imel opravka. Kaj delam narobe?

(btw, v katerem pogledu pa se 'print' razlikuje od 'echo'?)

Pa si prepričan da so spremenljivke, ki jih skušaš izpisati polne?

Daj kopiraj svojo kodo na pastebin.com pa tukaj prilepi link, da vidimo kaj ustvarjaš :)

1

to kar je tsu napisal.... tako na pamet, zelo težko pomagamo, sploh če imate neko lastno rešitev

http://pastebin.com/zaGedW0Q

Stanje pa je trenutno takole: z nekaj raziskovanja po netu za sampli ter mnogo trial and erroranja sem ugotovil, kako v praksi pravilni echo stavki sploh zgledajo, kar se tiče njihove namestitve.

H1/title/keywords trenutno delajo, description pa ne. Edini način, da s trenutnim znanjem usposobim prvi paragraf članka, bi bil ta, da njegovo vsebino nalepim pri vrhu dokumenta in spremenljivko s tem definiram, potem pa echojam v vsebinskem delu pod h1 tagi. (ta del še ni razviden iz nalimane kode za description... razviden je samo za h1) Rad bi pa naredil tako, da mi vzame pri vsebinskem delu tekst in mi ga nalima na vrh, tam, kjer so tagi.

To po zdajšnjem zafrkavanju ne zgleda, da je možno (definicija mora nujno bit kjerkoli nad echo stavkom, ker če je pod njim, ne dela - glej source sample za 'myHeader'). Recimo h1 dela tudi samo pod takimi pogoji, ampak ni ravno idealno, da moram na vrhu vse definiriat. A bi lahko naredil, da mi definicijo povleče iz vsebine, brez, da jo nekje v zgornjem delu dokumenta prvo navedem?

ja od kje dobis ti siti tekst

"Yes, of course....." ki se nahaja v <div id="content"> ?? ni to php generiran? najbolje, da se ga iz baze ali kje drugje prebere v spremeljivko $content in potem izpise bodisi v meta description tagu (na omenjeni nacin) bodisi v tem divu...ce staticno vnasas v div, potem lahko staticno tut v meta tage

Tisti tekst je kar tam noter, ne napaja se iz nobene podatkovne baze ali fajla. Ja, to so pa moji fajli, ghetto to the max. :)

Ma razmišljal sem pravzaprav o dveh varjantah, ker želim razvit čim bolj optimalno platformo:

Opcija 1: Na vsakem url-ju uporabljam statično vsebino, kakor je razvidno iz primera (za h1, prvi odstavek in article body). S tem, da jo plasiram v sam vrh dokumenta, celo nad <head> tage, potem pa tam, kjer ji je mesto, nalimam echo-je, s katerimi jo prikličem.

Opcija 2: Vsebino črpam od drugod (kakor trenutno tudi menu in ostale dinamične dele strani, da se jih kasneje da zlahka modificirat). Problem bi nastal, da pri dodajanju nove podstrani bi potem moral kreirat nov url oz. file (mojastran.com/novi-clanek.php), potem pa še en novi file, od koder bi vlekel vsebino. Ali pa dodal nov entry v že obstoječ database file, ga ustrezno potagal, potem pa pa z echoji poklical v main file (če je to sploh možno izvajati iz enega fajla - predpostavljam, da je).

Zopet, sem totalen samouk in dejansko nimam nobene predstave, kako so php strani s tehničnega vidika 'načrtovane'. Zato boste mnogi verjetno wtf-jali ob mojih kodah. Kljub temu pa sem se tokrat potrudil, da skodiram nekaj res urejenega, popredalčkanega in maksimalno dinamičnega.

Aja, v kodi, ki sem jo nalimal, div tagi nimajo nobenega pomena oz. ne delajo. Dela samo myHeader, ki sem ga pa moral definirat na višjem mestu v dokumentu, kot so locirani echo klici. V obratnem vrstnem redu ni delalo.

Anyway, katere so prednosti opcije 2? Je res tako pomembno vsebino imeti ločeno? Za menije in te zadeve mi je jasno, da je pomembno (spremeniš en file in se updejtajo meniji v vseh podstraneh, ko dodaš nov url). Članke pa itak imaš samo na enem mestu na strani, tako da ne vidim potrebe po tem, da bi jih imel dinamične. Me pa blazno zanima, zakaj jih je dobro imeti ločeno.

Seveda, vsebina ločeno, dizajn ločeno, logika ločeno.

Ampak za preproste strani z nekaj podstranmi to ni potrebno. overkill in my opinion.

Je pa fajn imeti 1 fajl in ne 10 phpjev, za vsako podstran/članek svojo, ravno v tem je prednost PHPja.

torej v tvojem primeru si predstavljaj svojo stran kot en template, neko ogrodje

head
 {meta tagsi}
body
div id=content
 {vsebnina}
/div
/body

ce na kratko povzamem strukturo tvoje strani...

torej za vse članke ostane struktura (in dizajn) isti... spremeni se le vsebina (metatagsi, in vsebina na strani)

datoteko poimenuješ index.php

potem pa spreminjaš le parametre datoteke in sicer na tak način:

index.php?stran=uvod
index.php?stran=novice
index.php?stran=o_nas
....

parametrov je lahko poljubno

v sami datoteki, pa moraš potem preverjat, kateri parameter je dejansko v URLju

in to narediš tako

if(!isset($_GET["stran"]){

      $meta_title = "Napaka, stran ne obstaja";
      $content = "Napaka, stran ne obstaja";

}else{

      $stran  = $_GET["stran"];
      //logika za varnost in sanitizavijo...

      if($stran == "uvod"){
            $meta_title = "Uvodna stran";
            $content = "Vsebina html moje uvodne strani";
      }elseif($stran == "novice"){
            $meta_title = "Novice";
            $content = "Vsebina html mojih novic";
      }else......

}

tak v osnobi imaš to na vrhu index.php strani... valda se da to še precej elegantneje rešit ampak ker si čisti začetnik, ti bodo stvari tako bolj jasne

ko definiraš enkrat vse spremeljivke za vse željene scenarije, potem jih le izpišeš na željenih mestih (z echotom)

to vsebino lahko ročno tako zapišeš na vrhu kot sem ti napisal.... najbolj preprosto...lahko pa ustvariš txt ali inc datoteke za vsako podstran in jih include-aš, lahko jih prebiraš iz baze podatkov, lahko... variant je veliko

zelo ti priporočam, da si prebereš par osnovnih tutorialov za PHP, da boš razumel sploh osnove, kak to sploh deluje, potem pa čimveč eksperimentiranja

velik uspehov želim

2

Še enkrat ti hvala, zdaj se počutim prav badass, ker sem končno vse spravil do final verzije, in to čisto sam. Ok, skoraj sam. Moram priznat, da ne bi šlo brez tvoje magične html-strip rešitve in strukturne razlage. :)

Je pa to za zdaj res malce preveč advanced, da bi celotno navigacijo porihtal s ? parametri v url-jih. Verjetno pri kakem novem projektu, ko bo zopet nekaj več časa se igrat s kodo. Je pa ta php res čisto preveč fun, kdo bi si mislil, kaj vse lahko delaš z njim.

Anyway, final, delujoča verzija moje t.i. 'auto-seo' kode:

http://pastebin.com/YTjBDfax

Pa še vsebina definitions.php fajla, ki je ključna za razumevanje moje strukture:

http://pastebin.com/MPes2B4p

Moj workflow je pa takšen. Zdaj, ko bom dodal na stran novo vsebino, bo treba kreirat nov file in članek skupaj s html tagi prekopirat v ustrezne predalčke, na koncu pa editirat še dinamičen menu. Ne bo pa treba double-checkat, če sem onsite SEO prav poštimal, ker bo to naredilo samo. Morda se zdi, da sem zadeve še bolj zakompliciral, kot če bi imel kar statične fajle, ampak zdaj dejansko lahko stvari delam 'po tekočem traku'. Se kar pozna pri hitrosti, če ni treba pretirano razmišljat med delom, še posebej, če delaš z ogromno članki.

Imam samo še en majhen problemček. Kodi se namreč čisto spipa, če so noter kakšni apostrofi (' in verjetno tudi "). Okoli se da igrat tako, da pred vsakim takim z find and replace funkcijo vrinem . Sicer gre komot skozi, da vedno pred objavo članek spustim skozi tako funkcijo, a vendar moram to delati ročno. A je kakšen način, da bi s pomočjo php-ja to avtomatiziral? Recimo v smislu if you detect ' or " inside this div tag, replace it with \' or \". Sliši se dost izvedljivo, samo jaz res ne znam programirat.

Če se ti da na brzino še par linij spustit glede tega, pa si res moj heroj. Magari sam tolk, da potrdiš, da v pravi smeri razmišljam. Prideš na piknik? Pocukaj me za rokav, častim rundo. :)