@codenerd på twitter Mit seneste tweet:

Dynamiske sider med PHP Include – Nu med metatags

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

PHP
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.

PHP
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:

PHP
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:

PHP
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:

PHP
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:

PHP
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:

PHP
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:

15 kommentarer

  1. Skrevet af Martin  d. 19/07/2008 kl 19:38

    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)

    Svar på kommentaren
  2. Skrevet af Morten  d. 02/02/2009 kl 07:06

    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

    Svar på kommentaren
  3. Skrevet af Danny  d. 03/02/2009 kl 07:30

    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).

    Svar på kommentaren
  4. Skrevet af Morten  d. 28/05/2009 kl 00:21

    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

    Svar på kommentaren
  5. Skrevet af Morten  d. 28/05/2009 kl 00:31

    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.

    Svar på kommentaren
  6. Pingback: PHP Include - Dynamiske sider og unikke metatags med PHP include | Martin Nielsens nørdede tanker

Leave a Reply to Michael Cancel reply

Krævede felter er markeret med *.

*