educational

SE Friendly PHP Pages

Dan Zarrella
PHP pages have a reputation of being more difficult (or at least different) to SEO than static HTML pages. Here's a brief overview of the major issues encountered when trying to make PHP scripts rank well on search engines. While this guide focuses on PHP, much of it is still relevant to optimizing dynamic pages in general.

PHP Speed
While page size does affect load time, spiders run on servers connected to high bandwidth networks, so download time is less important than the latency of the PHP script's execution time. If a spider follows a link on a site and is forced to wait too long for the server to process the PHP code behind that page, it may label your page as unresponsive. The biggest delays in a PHP script typically are the database and loop code. Avoid making [CODE]SELECT *[/CODE] calls, instead explicitly name all the columns you want to retrieve, and if you are using MySQL, test your queries using the [CODE]EXPLAIN[/CODE] statement. To optimize loops, consider using duplicated code instead of low iteration loops; also use as many static values, such as [CODE]count($array)[/CODE] values, inside the loop as you can, generating their values before the loop once.

URL Cleanliness
A major goal in getting search engines to treat your PHP created pages well, is to make them look and act like static pages. If you have a large site, you can use Apache to fake static looking URLs, or, with a smaller site, you can simply keep your [CODE]GET[/CODE] variables to a useful minimum. In either case, however, never allow a spider to see links with different URL's to the same content. If the URL is different, the page should be too.

One of the major problems most webmasters have with getting their dynamic pages to index is URL cleanliness. Since many dynamic pages are created with [CODE]GET[/CODE] variables, lots of pages have URLs that look like:

Page.php?var=lkdjdfhv&var2=345&var3=kfjdks

Most of the search engines will be able to follow this link, because it has 3 or under get variables (a good rule of thumb is to keep the number of [CODE]GET[/CODE] variables passed in the URL to under 3), but any more than 3 variables and you will run into problems. Try using less [CODE]GET[/CODE] variables, and make them more relevant. Rather that useless id numbers use titles, and other keyword-rich bits of text. This is an example of a better URL:

Page.php?var=category&var2=topic

If the page requires more variables you may want to consider combining the variables by delimiting them with a hyphen or another unused character, and then splitting the variable in the target page.

Disabling trans_sid
Possibly the biggest cause of webmaster frustration when SEO'ing php pages is PHP's tendency to add session id numbers to links if cookies are rejected by the browser (SE spiders reject cookies). This will happen by default if your PHP installation was compiled with the "–enable-trans-sid" option (and this is the default from version 4.2 onward). This creates links with an additional, long, nonsense-looking [CODE]GET[/CODE] variable. In addition to making the links clunky, this gives spiders different URLs with the same content, which makes them less likely to treat the pages individually, and possibly not even index them at all. A quick way to fix this is to disable the trans-id feature, if you have access, in php.ini by setting "session.use_trans_sid" to false. If you don't have access to change php.ini, you can add this line to the .htaccess file in your root directory:

[CODE] php_flag session.use_trans_sid off [/CODE]

Masking Dynamic URLs
However the mere presence of a question mark in the URL will introduce a delay in Google's indexing of the page. This from Mike Grehan's Interview with Daniel Dulitz of Google:

"So the mere presence of a question mark in the URL doesn't throw us for a loop at all. We will crawl those pages more slowly than we do with pages without question marks in the URL. Purely because they've identified themselves as being dynamic and we certainly don't want to bring anyone's site down because we're hitting the database too hard."

Small sites will not need to worry much about this delay as it means your server is hit every few minutes, not a few times a second, but for larger sites this can slow down your site's inclusion into the index.

Making Dynamic Pages Look Static Without mod_rewrite
A way to mask bulky dynamic page URLs (and avoid the question mark delay) is Apache's ForceType in combination with a PHP command to interpret URLs like: www.example.com/books/computers.html as referring to a page called "books" which is executed as a PHP script (I usually make a link on the Linux server from "books.php" to "books" to make editing the script easier). The function will return an array of the additional values, including the category "computers". This can be accomplished by inserting a line like this into the .htaccess file in the root of your web documents directory:

[CODE] ForceType application/x-httpd-php [/CODE]

*Directory Handle Name Here* should be replaced with the alias name you are giving to the fake directory you are creating. In this example, "www.example.com/books/computers.html," your .htaccess line would look like this:

[CODE]ForceType application/x-httpd-php[/CODE]

You can then log into your server and create a link to the file "books" or whatever directory alias you have chosen. This is done with the Linux command "ln", or link, like this:

[CODE]$ Ln books.php books [/CODE]

This creates a link between the existing PHP script books.php and the non-existant "books". This way all requests for the directory "books" will be given to books.php, i.e. www.example.com/books/computers.html would be handled by books.php.

Inside books.php you can use this function to extract values from the static-looking request URI's:

[CODE][/CODE]

So the above example of: www.example.com/books/computer.html would be processed thus:

[CODE][/CODE]

With this, [CODE]$_GET['books'][/CODE] would equal "computer" similar to www.example.com/index.php?books=computer

PHP's SEO'ing Advantages
A great advantage to using dynamic pages as opposed to static pages is the ability to create content that is constantly changing and updated in real time. RSS headlines, randomly circulating content, and other automatically "fresh" content can boost your ranks in Google, and many other engines.

Another advantage to using PHP is that you can make simple modifications to many scripts to create relevant and fresh page titles. Since this is the most important "on page" factor in SEO, special attention should be given to creating title tags that accurately reflect the page's current content. Any HTML templates used in PHP pages can be altered to contain this line:

[CODE]<?=$page_title?> [/CODE]

With this, [CODE]$page_title[/CODE] can be set to a keyword-rich text describing the page. Title text is also important in improving the click-through from SERP's, so be sure that the title tag doesn't read like spam, but more like a "human created" title.

Editor's Note: PHP-driven and other dynamic content pages offers many advantages for webmasters, but they are not a "perfect" solution, especially when search engine placement is a consideration. These techniques will help you to maximize your possibilities. Be creative! ~ Stephen

More Articles

opinion

Tips to Master Customer Subscription Retention

Cathy Beardsley ·
opinion

A Primer on How to Integrate Paysite Processing

Jonathan Corona ·
educational

Trademark Ruling a Victory for Adult Products, Services

Marc Randazza ·
profile

Q&A: Rich Girls CEO Cristina Enriches Cam Models

Alejandro Freixes ·
profile

Q&A: LiviaChoice Embraces Grand Camming Destiny

Alejandro Freixes ·
opinion

Refined Protocols Reduce STI Risks for Performers

Eric Paul Leue ·
educational

Camming 101: Establish Boundaries to Keep the Fantasy Alive

Steve Hamilton ·
profile

Nikki Night Forges Cam Model Excellence

Alejandro Freixes ·
educational

Ethical Camming Inspires a Cultural Revolution

Mia Saldarriaga ·
profile

Aria Hayes Reinvents Herself With Camming Career

Aria Hayes ·
Show More