Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dynamiczne generowanie meta tagów
Forum PHP.pl > Forum > PHP
koko887
Witam, tworzę właśnie stronkę i używam tam includowania. Problem w tym, że na każdej podstronie będą takie same meta tagi. Postanowiłem pobawić się troszkę php i jako, że w php nie jestem zbyt biegły to stworzyłem (przerobiłem z kilku innych) skrypcik dynamicznego generowania meta tagów. Oto on:


Tak wygląda nagłówek pliku index.php:
  1. <?php
  2. $add_site = true;
  3. include "includes/function.php";
  4. ?>
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <head>
  7. <title><?php echo tytuly($_GET['url']); ?></title>
  8. <meta name="keywords" content="<?php echo slowa_kluczowe($_GET['url']); ?>">
  9. <meta name="description" content="<?php echo opisy($_GET['url']); ?>">
  10. </head>



A to kod pliku function.php:
  1. <?php
  2.  
  3. /*
  4.   tytuły na stronie
  5.   **********************
  6.   */
  7.  
  8. if(!$add_site) exit;
  9.  
  10. function tytuly($url) {
  11. $tytuly = array(
  12.  
  13.  
  14. 1=>'tytuł podstrony pierwszej',
  15. 2=>'tytuł podstrony drugiej',
  16.  
  17. foreach($tytuly as $key => $val)
  18. if($url == $key) return $val;
  19. }
  20.  
  21. /*
  22.   słowa kluczowe na stronie
  23.   **********************************
  24.   */
  25.  
  26. function slowa_kluczowe($url) {
  27. $slowa_kluczowe = array(
  28.  
  29.  
  30. 1=>'słowa kluczowe na pierwszej podstronie',
  31. 2=>'słowa kluczowe na podstronie drugiej',
  32.  
  33. foreach($slowa_kluczowe as $key => $val)
  34. if($url == $key) return $val;
  35. }
  36.  
  37.  
  38. /*
  39.   opisy na stronie
  40.   *************************************
  41.   */
  42.  
  43. function opisy($url) {
  44. $opisy = array(
  45.  
  46.  
  47. 1=>'opis pierwszej podstrony',
  48. 2=>'opis drugiej podstrony',
  49.  
  50. foreach($opisy as $key => $val)
  51. if($url == $key) return $val;
  52. }
  53.  
  54. ?>



Linki na mojej stronie są w takiej postaci:
www.mojastrona.pl/index.php?url=1 => idzie do podstrony pierwszej
www.mojastrona.pl/index.php?url=2 => idzie do podstrony drugiej itd.

Całość działa bez zarzutu, ale jak już wspomniałem przygodę z php dopiero zaczynam i chciałbym, aby ktoś kto się na tym zna wypowiedział się czy taki kod ma sens i czy może tak zostać, czy jest może też jakaś inna dużo prostsza metoda na osiągnięcie tego samego efektu. Ponadto chciałbym się dowiedzieć czy roboty wyszukiwarek będą dobrze indexować takie meta tagi (tzn. czy robot zobaczy np. tytuł strony czy tylko: "<title><?php echo tytuly($_GET['url']); ?></title>") Proszę o opinie. Dodam też, że wzorowałem się na tym pomyśle: KLIK
Pilsener
1. Złe jest dzielenie strony na części - strona www powinna być traktowana jako całość i dopiero po jej przygotowaniu( i sprawdzeniu ew. błędów) powinna być wysłana do przeglądarki, wysyłanie do przeglądarki strony po kawałku to utrudnianie sobie życia.

2. Złe jest mieszanie kodu HTML z PHP - powinieneś się skupić na wygenerowaniu elementów strony, czyli meta + treść, a następnie wstawieniu ich w odpowiedni szablon - skrypt/dodatek/moduł generujący meta powinien zwracać tablicę z tymi meta i tyle, kod HTML nie powinien programisty PHP w ogóle obchodzić.

3. Złe są adresy stron - jak myślisz o wsparciu dla SEO powinieneś do adresów dodawać słowa kluczowe, a identyfikator powinien być na samym końcu, czyli np. index.php?url=strona,o,grach;23.html - przy zastosowaniu nice url moża wywalić index.php?url=, tak jest prosto i funkcjonalnie

4. Zły jest sposób organizacji tych danych, jak będziesz miał kilka tysięcy stron to też będziesz ładował do zmiennej je wszystkie i trzymał w pliku php? Meta-dane o stronie, kategorii, podkategorii itp. powinny być trzymane w bazie i pobierane tylko te, które są aktualnie wyświetlane, najlepiej jeśli meta są przechowywane od razu z konkretną treścią

5. Najlepiej, jakbyś napisał jakiś silnik do generowania meta, który pozwala zarówno zdefiniować meta dla każdej strony, jak i je wygenerować na podstawie treści czy też odziedziczyć z kategorii nadrzędnej.

Sposób jaki tu prezentujesz może funkcjonować tylko jako prowizoryczny i raczej nikt go nie pochwali winksmiley.jpg
bim2
A co to ma być za konstrukcja?
  1. foreach($slowa_kluczowe as $key => $val)
  2. if($url == $key) return $val;


Przecież to działa jak
return $slowa_kluczowa[$url];

Nie widzę w tym żadnej dynamiki. Ręcznie musisz ustawiać sobie te tagi. Gdyby jakoś ładnie podliczało słowa na stronie eliminując te "powszechne" albo brało słowa konkretne z tytułu strony to byłoby dynamiczne. Tak to zwykłe wpisywanie danych.
mruz
podepnę się.
Mam problem z generowaniem meta tagów:
Kod
<?php session_start(); ob_start(); ?>
<html>
<head>
<!--OPIS-->
<title>domena.pl - <!--TYTUL--></title>
</head>
<body>
...
<?php
$title = ((defined('TITLE')) ? ''.TITLE : '');
$opis = ((defined('OPIS')) ? ''.OPIS : '');
$html = ob_get_clean();
$html2 = ob_get_clean();
echo preg_replace('#<!--TYTUL-->#', $title, $html);
echo preg_replace('#<!--OPIS-->#', $opis, $html2);
ob_end_flush()
?>


Wcześniej miałem tylko tytuł i generowało dobrze:
Kod
<?php define('TITLE', 'tytuly strony'); ?>

próbowałem zrobić podobnie z
Kod
<?php //define('OPIS', '<meta name="description" content="opis strony" />'); ?>

coś z tym ob_get_clean() nie mogę dać rady. Pomoże ktoś? wstydnis.gif

edit:
wymyśliłem coś takiego:
Kod
echo preg_replace('#<!--TYTUL-->#', $title, preg_replace('#<!--OPIS-->#', $opis, $html));

niby meta description i title wyświetla dobrze, ale nie jestem przekonany do tego...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.