De mest populærere blog indlæg her på siden har længe været mine PHP Include Tutorials, og flere har efterspurgt en nem måde at lave forskellige title Tags og metatags for de enkelte sider. Dette er noget der er utroligt vigtigt når det kommer til søgemaskineoptimering (SEO), så derfor vil jeg i denne tutorial gennemgå en forholdsvis simpel måde at differentiere dine include sider.
Tutorialen forudsætter at du har læst som minimum Dynamiske Sider med PHP og også gerne Dynamiske Sider 2 da denne tutorial bygger videre på sidstnævnte. Hvis du ikke gidder læse de to blogindlæg så hent dette eksempel: eksempel 3 – dynamiske sider
Metatags der bør være forskellige
1 2 3 |
<title></title>
<meta content="" name="Description" />
<meta content="" name="Keywords" /> |
Title er titlen på dokumentet, bør være sigende for det pågælende dokument og altså ikke bare en overordnet titel for hele dit website. Det samme gør sig gældende for Desription og Keywords, hvor førstnævnte er en kort beskrivelse af indholdet i dokumentet, mens keywords er en kommasepereret liste af stikord der passer på indholdet af siden
Forskellige muligheder
Som altid har vi forskellige muligheder, de mest åbenlyse er nok:
- Kode det manuelt – en masse IF-THEN-ELSE eller switch
- Database løsning
- Lave noget virkelig virkelig smart
Der er fordele og ulemper ved alle disse løsninger, at kode det 100% manuelt er måske det mest simple og det letteste for de fleste, mens en databaseløsning måske er lettere at vedligeholde i længden, men også lidt overkill for en lille side. Den virkelig virkelig smarte løsning gemmer vi lige lidt.
Manuelt eksempel
I mine PHP Include tutorials gemmes siden der skal loades altid i variablen $side, derfor er det denne variabel der bestemmer hvilket title tag og metatags der skal vises. For at gøre det nemmest har jeg valgt at bruge en php:switch i dette første eksempel.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php
//opsætning af metatags og titel
switch ($side) {
case 'forside':
$titel='Velkommen til min side';
$beskrivelse='Min side er sej, her finder du en masse spændende ting osv osv';
$keywords='Dette,Er,Keywords,For,forsiden';
break;
case 'side1':
$titel='Dette er side 1s titel';
$beskrivelse='Dette er side 1s beskrivelse';
$keywords='Dette,Er,Keywords,For,side,1';
break;
default:
$titel='Dette er titlen på de sider som ikke har egen titel';
$beskrivelse='Standard beskrivelse';
$keywords='Dette,Er,Standard,Keywords';
break;
}
?> |
Sådan fortsættes for hver side der er i dit system. Dvs. for hver side laver du en:
1 2 3 4 5 6 7 |
<?php
case 'filnavnet_uden_.php';
$titel='';
$beskrivelse='';
$keywords='';
break;
?> |
Koden indsættes i index.php under den første kodeblok
Når dette er gjort kan du modificere eller indsætte dine metatags imellem i index.php således de bliver til:
1 2 3 |
<title><?php echo $titel; ?></title>
<meta name="Description" content="<?php echo $beskrivelse; ?>" />
<meta name="Keywords" content="<?php echo $keywords; ?>" /> |
Voila så er der individuelle title og metatags.
Den smarte version
Ulempen er jo at det ikke er særligt dynamisk, retter du fx indholdet på en af dine includes skal du også rette titel og description og keywords i din index fil. Derfor ser vi på en lidt smartere og lidt sværere version.
Det letteste som jeg ser det, er helt klart at titlen og metatags står i det dokument vi includer. Dette kan vi dog ikke bare gøre, da metatags jo skal stå i . I stedet indsætter vi 3 linjer i alle vores includes som følger:
1 2 3 4 5 |
<!--
Titlen på dokumentet
Beskrivelsen kommer her og er uden linjeskift
Keywords, Separeret, Med, Komma, Her
--> |
Efter at havde gjort dette, skal vi ha’ lavet noget kode som kan hente dette data ind. Dette indebærer at indlæse filen som vi vil include og hente de pågældende informationer. Dette kan vi bla. gøre ved brug af funktionen php:file. Denne funktion læser en side ind i et array hvorefter vi nemt kan tilgå de enkelte linjer. Lad os se på noget kode:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php
//opsætning af metatags og titel
$info=file('indhold/'.$_GET['side'].'/'.$side.'.php'); //hent filen
if (trim($info[0])=='<!--' && trim($info[4])=='-->') { //hvis linje 1 og linje 5 indeholder start og slut for kommentar
$titel=trim($info[1]); //hent linje 2
$beskrivelse=trim($info[2]); //hent linje 3
$keywords=trim($info[3]); //hent linje 4
} else {
$titel='Din standard titel';
$beskrivelse='Din standard beskrivelse';
$keywords='Dine,standard,keywords';
}
?> |
Bemærk at vi bruger php:trim til at fjerne linjeskift og unødige mellemrum før og efter info.
Igen indsættes metatags med den samme kode:
1 2 3 |
<title><?php echo $titel; ?></title>
<meta name="Description" content="<?php echo $beskrivelse; ?>" />
<meta name="Keywords" content="<?php echo $keywords; ?>" /> |
Og endnu engang voila, denne gang bare med metatags der bliver hentet ud fra de enkelte sider.
Eksempler og download
Som altid skal I ikke snydes for den nemme løsning:
Jeg fandt din side p
Hej Martin
Jeg faldt lige over din blog via anyhed.dk og kan se, at den straks skal i rss-læseren. Glæder mig til at følge med og lære en masse php!
Hilsen Anders
Altid rart med flere faste besøgende, og glad for at det kan bruges
/Martin
Ja men så er det jo godt jeg lige kedede mig lidt
Bravo! God turorial og fedt med nogle danske instruktionsartikler med php.
Jeg faldt også over din blog via Anyhed og den er nu tilføjet rss readeren
Hehe med alle de tilmeldinger er jeg jo næsten nødt til at være lidt aktiv, det er jeg ikke sikker på jeg kan lide 😀
Det er helt i orden, du kan bare skrive eller tilføje mig på MSN
Sejt, det har jeg faktisk været interesseret i, i noget tid 😀
Hej Danny, jo det kan du som sådan sagtens, men hele pointen med disse include artikler er at undgå at ha head title og body tags i include dokumenter, således at man reelt set kun har indhold i dem. På den måde er det 10 gange lettere at skifte design da det kun skal ændres i en fil (index.php)
Link til seneste blogindlæg: Grøn Koncert i Herning
Hej Martin
Nu har jeg været igennem dine gode turorial omkring dynamiske sider samt pæne urls.
Jeg kan dog ikke få pæne urls til at virke med disse overnævnte eksempler (dynamisk4), kunne du komme med et par eksempler på RewriteRule til denne?
MVH Morten
Kan man ikke bare include en forside.php der ser sådan her ud?:
head
title Forsiden /title
meta name = "Description" content = "dette er en forside"
meta name = "Keywords" content = "ord, ord, ord"
/head
body
Velkommen til MIN forside
/body
Title virker fint … (Jeg har med vilje udeladt tegn).
Hej Martin – mange tak for en fortrindelig hjemmeside med rigtig meget god hjælp.
Jeg er netop i gang med den smarte version af dynamiske metatags.
Kan dog ikke få det til at virke.
Jeg har brugt copy paste til min side, som er opbygget efter din “php includes”
I mine inclides har jeg lavet tags i linie 2,3 og 4 og kommentartegn i linie 1 og 5.
På indexsiden har jeg indsat koden, der skal hente mine beskrivelser i include-filen.
Når jeg vælger view source, kommer der kun “din standart beskrivelse” altså det der står i Else..? Underligt.
Har du en ide til, hvorfor den ikke læser mine tre linier?
Gåber du får tid til at give et par tips.
De bedste hilsner
Morten Hilmer
Jeg fandt selv fejlen, men vil rigtig gerne vide, hvorfor det virker nu og ikke før:
I stedet for:
$info=file(‘indhold/’.$_GET[‘side’].’/’.$side.’.php’); //hent filen
skrev jeg:
$info=file(‘indhold/’.$_GET[‘side’].’.php’); //hent filen
Nu virker skidtet sku – fantastisk.
Pingback: PHP Include - Dynamiske sider og unikke metatags med PHP include | Martin Nielsens nørdede tanker
Super guide, kan bare ikke får det til at virke efter hensingeten. får slet ikke noget ud i title osv (end ikke min standart text).