Suchmaschinenoptimierung SEO

Hier können Sie Fragen bezüglich des Datenbank-/Objektmoduls stellen.
heinz23

Suchmaschinenoptimierung SEO

Beitragvon heinz23 » Di 6. Jan 2009, 14:43

Wir arbeiten in webEdition oft mit Objekten. Funktioniert alles prima.
Allerdings trifft man immer wieder auf Probleme mit Navigationen, suchmaschinenfreundlichen URLs usw.

Konkret zu einem Beispiel:
Ein Kunde legt seine Produkte einzeln in Objekten an. Wir lesen die Objekte (Produkte) über eine listview in der Seite "giballeobjekteaus.php" aus. Per Link verweisen wir auf die Seite "objektdetailseite.php" und übergeben die Objekt-ID (objektdetailseite.php?ObjectID=1). In der Detailseite requesten wir die ID und geben alle Informationen aus.

Wie bekommt man jetzt eine "schöne" URL (z. B. nicht objektdetailseite.php?ObjectID=1 sondern vielleicht produktname.php)?

Bleibt in diesem Falle nur "mod_rewrite"? Wenn ja, wie lässt sich die URL umwandeln?
Wie lässt sich so etwas sonst realisieren?

deemes

Beitragvon deemes » Di 6. Jan 2009, 14:55

Ja, da bleibt leider nur mod_rewrite, denn webEdition bietet dahingehend keine Funktionen.

Ich habe da auch schon mal drüber nachgedacht. Theoretisch müsste es funktionieren wenn man global alle Links die 'we_objectID' enthalten per preg_replace_callback durch eine Funktion jagt. In der Funktion muss man dann den Titel des Dokuments aus der DB ziehen und den gewünschten Dateinamen erzeugen. z.B. Titel_des_Dokuments{3476}.html

Die Klammern lassen sich nun leicht per mod_rewrite erfassen und umschreiben.

Evtl. muss man sich noch etwas bzgl. der Detailseite ausdenken, damit man die Highlightregeln noch anständig einsetzen kann.

heinz23

Beitragvon heinz23 » Di 6. Jan 2009, 15:13

Hallo demes,

vielen Dank für die Antwort.
Wir werden das vielleicht mal ausprobieren.
Problem ist aber die Detailseite.

deemes

Beitragvon deemes » Di 6. Jan 2009, 15:19

Das würde ich so versuchen:

Titel_des_Dokuments{3476:2}.html

Wobei die 2 dem Namen der Detailseite entspricht. Ich würde hier eher eine Zahl verwenden um die Suchbegriffe nicht zu verwässern. Ist bei der Definition der Regeln zwar unübersichtlicher, aber was tut man nicht alles für ein gutes Ranking. ;-)

Alle Detailseiten würde ich in einen extra Ordner legen, dann muss man keinen Pfad übergeben.

Obiger Link leitet dann auf /detail/2.php?we_objectID=4376

Edit: Fällt mir gerade ein. Man darf dann natürlich nicht mehr mit we:printVersion arbeiten, aber das empfiehlt sich ja sowieso.

manolo
Senior Member
Beiträge: 272
Registriert: Mi 11. Jun 2003, 16:55
Wohnort: Bayreuth
Kontaktdaten:

Beitragvon manolo » Mi 7. Jan 2009, 11:31

Ich baue die Links auf die Objekte mit PHP in WE wie folgt auf:

http://www.psfd.de/de/datenbank_mitmach ... llbau-GmbH

Object ist #60, der String danach ist "sprechend" und aus einem Datenfeld des Objekts erzeugt. Diese URL kann dann leicht mit mod_rewrite geparst werden.

deemes

Beitragvon deemes » Mi 7. Jan 2009, 13:12

Ich hab das mal gerade gemacht und tut seinen Dienst ganz ordentlich.

Am Anfang vom Master-Template:

Code: Alles auswählen

<?
   ob_start();

   function niceurl($objectID,$original_page) {
      GLOBAL $DB_WE;
      return '"/'.$objectID.'/'.$original_page.f('SELECT Path FROM '.OBJECT_FILES_TABLE.' WHERE ID='.$objectID,"Path",$DB_WE).'"';
   }
?>
Am Ende vom Master-Template:

Code: Alles auswählen

<?
   $wholeSite=ob_get_contents();
   ob_end_clean();
   if($GLOBALS['we_editmode'] != true) {
      echo preg_replace(
            array(
               '#"[^"]*?/([^"/]+).(?:php|htm|html)?we_objectID=(d+)[^"]*?"#e'
            ),
            array(
               "niceurl('\2','\1')"
            ),
            $wholeSite
      );
   }
   else
      echo $wholeSite;
?>
Und die dazugehörige .htaccess

Code: Alles auswählen

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([0-9]+)/([0-9]+)/ /detail/$2.php?we_objectID=$1 [L]
Die Umwandlung ist nun ein wenig anders als meine vorige Idee. Der Link sieht nun so aus.

Code: Alles auswählen

/156/11/News/Gasprom_reduziert_Gaslieferungen_an_Ukraine_drastisch
Dabei ist
  • 156 die Objekt-ID
  • 11 der Dateiname der Detail-Seite, also wie oben beschrieben /detail/11.php
Der Rest entspricht dem vollen Pfad/Namen des Objektes. Also ist News der Name der Klasse und der rest der Name des Objekts.

deemes

Beitragvon deemes » Di 24. Feb 2009, 17:51

Das erste Projekt mit der hier beschriebenen Technik ist heute online gegangen. Zu sehen unter http://tinyurl.com/b36q4a

manolo
Senior Member
Beiträge: 272
Registriert: Mi 11. Jun 2003, 16:55
Wohnort: Bayreuth
Kontaktdaten:

Beitragvon manolo » Fr 27. Feb 2009, 12:06

Sehr schöne Seite

ikbenivo

Beitragvon ikbenivo » Mi 11. Mär 2009, 10:17

deemes;50422 hat geschrieben:Ich hab das mal gerade gemacht und tut seinen Dienst ganz ordentlich.

Am Anfang vom Master-Template:

Code: Alles auswählen

<?
   ob_start();

   function niceurl($objectID,$original_page) {
      GLOBAL $DB_WE;
      return '"/'.$objectID.'/'.$original_page.f('SELECT Path FROM '.OBJECT_FILES_TABLE.' WHERE ID='.$objectID,"Path",$DB_WE).'"';
   }
?>
Am Ende vom Master-Template:

Code: Alles auswählen

<?
   $wholeSite=ob_get_contents();
   ob_end_clean();
   if($GLOBALS['we_editmode'] != true) {
      echo preg_replace(
            array(
               '#"[^"]*?/([^"/]+).(?:php|htm|html)?we_objectID=(d+)[^"]*?"#e'
            ),
            array(
               "niceurl('\2','\1')"
            ),
            $wholeSite
      );
   }
   else
      echo $wholeSite;
?>
Und die dazugehörige .htaccess

Code: Alles auswählen

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([0-9]+)/([0-9]+)/ /detail/$2.php?we_objectID=$1 [L]
Die Umwandlung ist nun ein wenig anders als meine vorige Idee. Der Link sieht nun so aus.

Code: Alles auswählen

/156/11/News/Gasprom_reduziert_Gaslieferungen_an_Ukraine_drastisch
Dabei ist
  • 156 die Objekt-ID
  • 11 der Dateiname der Detail-Seite, also wie oben beschrieben /detail/11.php
Der Rest entspricht dem vollen Pfad/Namen des Objektes. Also ist News der Name der Klasse und der rest der Name des Objekts.
This looks promising! However, I can't get it to work. The page is not found.
(http://www.museumflehite.nl/homepage.php > hover over an item and click 'meer info')

deemes

Beitragvon deemes » Mi 11. Mär 2009, 10:28

Hi Ivo,

the rewrite_rule expects the name of the detail page to be a number. Try to rename your detail page from agenda_item.php to 1.php (you could use the ID of the file)

I designed it that way, so the name of the detail page doesn't weaken the keywords/title of the page.

You have to place all detail pages in the folder "/detail" as well.

Of cause you're welcome to customize it yourself. It's just the design that fit my needs.

Kind regards,
Daniel

ikbenivo

Beitragvon ikbenivo » Mi 11. Mär 2009, 10:48

Thanks for the quick reply! It's working now. I've changed it a bit to fit my needs. I still don't understand it compleetly.
The first number seems to be the id of the object.
(http://www.museumflehite.nl/6/detail/te ... nstelling6 > 6 is the ID of the object). Can I change remove this or change it in a name?

deemes

Beitragvon deemes » Mi 11. Mär 2009, 11:13

No, that shouldn't be possible unless you code yourself a mechanism to display objects. webEdition expects the parameter we_objectID to be an integer value. My code only translates one synthax to another, but it can't change the way webEdition works. :-)

ikbenivo

Beitragvon ikbenivo » Mi 11. Mär 2009, 11:42

deemes;51421 hat geschrieben:No, that shouldn't be possible unless you code yourself a mechanism to display objects. webEdition expects the parameter we_objectID to be an integer value. My code only translates one synthax to another, but it can't change the way webEdition works. :-)
Too bad ;)
Can I change it so that it is the last item of the url?

Like
http://www.museumflehite.nl/agenda_item ... stelling/5

Instead of
http://www.museumflehite.nl/5/agenda_it ... onstelling

Thanks for your help btw. I'm learning here!

deemes

Beitragvon deemes » Mi 11. Mär 2009, 11:56

Yeah, that's possible. The path is genereted in function niceurl. Move the variables $objectID and $original_page wherever you like.

As well you need to modify the rewrite_rule. Something like this should make it:

([0-9]+)/([0-9]+)$

ikbenivo

Beitragvon ikbenivo » Mo 6. Apr 2009, 16:40

deemes;51426 hat geschrieben:Yeah, that's possible. The path is genereted in function niceurl. Move the variables $objectID and $original_page wherever you like.

As well you need to modify the rewrite_rule. Something like this should make it:

([0-9]+)/([0-9]+)$
thanks for that.
Another newbie question: what if the url looks like:

http://website.com/object_detail.php?we_objectID=215

And has to look like

http://website.com/item=itemtitle

How would the code look. I can't figure out how the combinations work...
Thanks in advance


Zurück zu „DB-/Objektmodul“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast