Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

[CONTRIBUTION] Ultimate SEO URLs v2.1 - by Chemo


Recommended Posts

Long time lurker, 1st time registered or posting (I've solved most problems with contributions by searching 1st)

________________________________________________________________________________

____________

 

Hi - We just installed the latest version of Ultimate SEO from the contributions section - v2.6 running on PHP5, MySql5

 

Our shopping cart uses titles for products that widely use hyphen (or dashes) and some slashes to define the item i.e.:

 

1947-53 Chevy Pickup Widget

 

or

 

1965 Mustang/Falcon Widget

 

After installing Ultimate SEO, our URLs are now being scrunched as:

 

194753-Chevy-Pickup-Widget and 1965 MustangFalcon Widget

 

I've been in the SEO admin console, tried to add special character conversion strings like:

 

-=>_,/=>_

 

or

 

-=>-,/=>-

 

and then used the 'Reset SEO Cache function'

 

but I can't get it to change or keep it from stripping these characters.

 

'Remove all non-alphanumeric' is set to false.

'Filter short words' set to 0

 

I'm figurining there has to be an easy adjustment on this, as other shops have to be relying on the hyphen for clarity in their product descriptions.

I've googled and searched on the support forums for 'hyphen' or 'dash' but can't find any hits execept for one unanswered query back in Nov 2005 for someone with similar problems.

 

Can anyone throw a lifeline on this one? I've really tried my best to find the solution myself - short of digging into the code & hacking a solution that might break something else.

 

Thanks,

 

Cindy

Link to comment
Share on other sites

I have this set up on a wamp server this is what the .htaccess file now looks like with the change in directory as you said.

 

RewriteBase /wamp/www/catalog/

 

Now i get

 

Internal Server Error

 

The server encountered an internal error or misconfiguration and was unable to complete your request.

 

Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

 

More information about this error may be available in the server error log.

 

I can't see anything in the PHP error log

I think yours should be RewriteBase /catalog/

if you installed osc into /wamp/www/catalog/

Link to comment
Share on other sites

hi

 

i just installed this and i have warnings in admin =

 

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at d:\users\foxycardsuk\public_html\admin\includes\functions\general.php:1321) in d:\users\foxycardsuk\public_html\admin\includes\functions\sessions.php on line 102

 

and i cant access my site i have this on my home page =

 

1146 - Table 'foxycardsuk.cache' doesn't exist

 

DELETE FROM cache WHERE cache_expires <= '2008-10-22 06:29:27'

 

[TEP STOP]

 

--------

Help please.

 

Paulie.

Link to comment
Share on other sites

Hi,

 

I have installed the v2.6 of seo urls, now how can rewrite urls in this format :

 

http://www.yourdomain.com/category-title-c13/subcategory-title-s23/product-title-p44/

 

 

Also I have information pages which it converts to www.yourdomain.com/-i-5.html. Can it be change to get associated www.yourdomain.com/information-title.html as url ?

Manpower moves wrenches, horsepower moves cars, and the power of the mind moves the world !
Link to comment
Share on other sites

I've installed v2.6 of this contribution into my test website.

 

It seems to be mostly working ok, except that I have noticed that the URLs shown immediately after the "Result Pages" at the top of the product list are in the format "catalog/category_number_1.html?page=2"

 

I wanted this URL to also be SEO compatible, maybe in the format "catalog/category_number_1_page_2.html" but I don't seem to be able to achieve this? I'd really like to ditch parameters on URLs completely.

 

I've also noticed that the URLs behind the sort fields at the top of the product list follow this pattern.

 

Any ideas anyone please?

Link to comment
Share on other sites

Hello!

 

Love this addon!

 

Think I am doing something wrong though - when I check with google the pages indexed for my site there seems to be at least double what there should be and I notice that some of the ones indexed (with various cache versions over a month period) have this sort of added tag (each one different for exactly same category) to the rewritten URL:

 

?page=1&sort=2a&osCsid=00ea674ef6284cfe5c43a943f5576ee8

 

Basically I don't want my page authority spread across too many pages unneccessarily and don't want issues with the SE's for duplicate content - is there a way to fix this?

 

Thanks so much for your time! :)

Link to comment
Share on other sites

I'm sorry for replying to such an old post, but I am very interested in your mod. Can you give me any information on how to accomplished it?

 

I have been having a lot of trouble with the MySQL based caching in our extra large stores. The products cache does not get generated automatically. I have to manually put it into the cache table every time the SEO URL cache is reset. When the cache does work the extra queries it generates make a noticeable drop in performance. When the products cache is not in the cache table I get an extra 400 or so queries which make the store run extremely slow (10 seconds per page).

 

I have tried a few different version of Ultimate SEO URLs, but they all give me the same problem.

 

Sorry for the slow reply have been "internetless" for 12 days.

 

Which versions have you tried? how many products does the shop in question have?

Link to comment
Share on other sites

Hello!

 

Love this addon!

 

Think I am doing something wrong though - when I check with google the pages indexed for my site there seems to be at least double what there should be and I notice that some of the ones indexed (with various cache versions over a month period) have this sort of added tag (each one different for exactly same category) to the rewritten URL:

 

?page=1&sort=2a&osCsid=00ea674ef6284cfe5c43a943f5576ee8

 

Basically I don't want my page authority spread across too many pages unneccessarily and don't want issues with the SE's for duplicate content - is there a way to fix this?

 

Thanks so much for your time! :)

 

This is not an SEO URL problem try http://www.oscommerce.com/forums/index.php?showtopic=314234

Link to comment
Share on other sites

Robert,

 

any further thoughts on the failure of USU's to convert url's out of a form under STS? I reviewed the code in detail, it is standard contribution code, nothing changed from package code, and in talking with a few very knowledgeable oscommerce resources, their opinion also is that Chemo did not code to handle url's out of box forms.

 

It appears that Chemo did not expand his offering to take these box forms under consideration.

Link to comment
Share on other sites

Hello,

 

I have recently installed v2.1d as supported by FWR Media. Things are seemingly well until I try to use the manufacturers box or sort the products by using the manufacturers drop down menu. When I click on either of these two I instantly get redirected to the main index.php page.

 

I know this has been vaguely touched on in this forum but no real answer/solution has been provided... aside from turning "Enable Automatic Redirects" to false in the admin configuration. When this option is false everything works as expected except the URL's have the traditional look to them: www.website.com/catalog/index.php?manufacturers_id=6.

 

So my question is whether or not this has been solved and what that solution may be.

 

Thanks for your time.

Link to comment
Share on other sites

Robert,

 

any further thoughts on the failure of USU's to convert url's out of a form under STS? I reviewed the code in detail, it is standard contribution code, nothing changed from package code, and in talking with a few very knowledgeable oscommerce resources, their opinion also is that Chemo did not code to handle url's out of box forms.

 

It appears that Chemo did not expand his offering to take these box forms under consideration.

 

 

Entirely incorrect, seo urls does what is meant to do. you request a url like tep_href_link('my_file_name.php') seo urls returns a correct link. It does it's job so the problem is elsewhere.

Link to comment
Share on other sites

Hello,

 

I have recently installed v2.1d as supported by FWR Media. Things are seemingly well until I try to use the manufacturers box or sort the products by using the manufacturers drop down menu. When I click on either of these two I instantly get redirected to the main index.php page.

 

I know this has been vaguely touched on in this forum but no real answer/solution has been provided... aside from turning "Enable Automatic Redirects" to false in the admin configuration. When this option is false everything works as expected except the URL's have the traditional look to them: www.website.com/catalog/index.php?manufacturers_id=6.

 

So my question is whether or not this has been solved and what that solution may be.

 

Thanks for your time.

 

The manufacturers box creates a redirect .. there are posts here (in this thread) that I have made about tep_redirect and removing w3c & via that function. Give that a try.

Link to comment
Share on other sites

Entirely incorrect, seo urls does what is meant to do. you request a url like tep_href_link('my_file_name.php') seo urls returns a correct link. It does it's job so the problem is elsewhere.

 

Robert,

 

I placed all the info in this thread while you were offline, it appears that you missed it.

 

My contention is as follows:

 

the Manufacturers box builds the form using the following code in html_output.php:

 

$info_box_contents = array();

$info_box_contents[] = array('form' => tep_draw_form('manufacturers', tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false), 'get'),

'text' => tep_draw_pull_down_menu('manufacturers_id', $manufacturers_array, (isset($HTTP_GET_VARS['manufacturers_id']) ? $HTTP_GET_VARS['manufacturers_id'] : ''), 'onChange="this.form.submit();" size="' . MAX_MANUFACTURERS_LIST . '" style="width: 100% "') . tep_hide_session_id());

}

new infoBox($info_box_contents);

 

The html form that is built looks as follows:

 

<!-- Start Category Menu -->

<form name="goto" action="http://www.xxxx.com/osc/index.php" method="get"><select name="cPath" onChange="this.form.submit();"><option value="0">Please Select</option><option value="410">Specials</option><option value="425">Closeouts</option><option value="454">A & G</option><option value="22">Accu Wedge</option><option value="453">Ace Stocks</option>

 

and so on for the rest of the form, ending with:

</select></form>

<!-- End Category Menu -->

 

the first script line which contains the tep_href_link:

 

$info_box_contents[] = array('form' => tep_draw_form('manufacturers', tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false), 'get'),

 

returns a result of

 

<form name="goto" action="http://www.xxxx.com/osc/index.php" method="get"><select name="cPath" onChange="this.form.submit();">

 

the array portion of the script which uses tep_draw_pull_down_form:

 

'text' => tep_draw_pull_down_menu('manufacturers_id', $manufacturers_array, (isset($HTTP_GET_VARS['manufacturers_id']) ? $HTTP_GET_VARS['manufacturers_id'] : ''), 'onChange="this.form.submit();" size="' . MAX_MANUFACTURERS_LIST . '" style="width: 100% "') . tep_hide_session_id());

 

returns results of

 

<option value="0">Please Select</option>

<option value="410">Specials</option>

<option value="425">Closeouts</option>

<option value="454">A & G</option>

 

and so on.

 

the end result is a form which does not contain a complete url. Clicking on a line in the form takes you to the correct page with the standard oscommerce url visible. My contention is that USU's was written to handle forms such as this. This is standard out of the box code from USU and STS both. No changes have been made.

 

Simply stating tep_href_link works and the problem is elsewhere is ignoring what I am trying to get across. Each form line does not contain a full url, does not call tep_href_link and therefore can not be converted using the USU tep_href_link function.

 

I can deal with this, what I have not been able to find is how oscommerce performs once a line in a form is selected. If I know what function or class is used, I could probably modify to work as USU.

 

 

Your thoughts?

Link to comment
Share on other sites

Your thoughts?

 

I just don't understand what you want or perhaps what you are saying.

 

seo urls produces urls nothing else ..

 

tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false)

 

Produces ..

http://www.xxxx.com/osc/index.php

 

Which is exactly what you asked it to do.

 

In the case of your form you set the select name as 'manufacturers_id'

 

So the url a posted form will produce is http://www.xxxx.com/osc/index.php?manufacturers_id=XX.

 

That is the way forms work.

 

In a fresh install of 2.1d ORIGINAL updated on a vanilla oscommerce install seo urls will auto 301 redirect that url to . .

 

http://www.xxxx.com/osc/manufacturers-name-m-XX.html.

 

If I have missed your meaning then I apologise but other than this I don't see what you want a url rewriter script to do.

Link to comment
Share on other sites

Your thoughts?

 

If what you meant is that it doesn't send the action as an seo url I have written a standalone file that you can throw into catalog root (as test.php or something).

 

It uses javascript to convert the action on submit. The forum loses indentation so it may not be that easy to read.

 

Please note that I wrote this to be helpful, it isn't an seo urls issue.

 

<?php
require('includes/application_top.php');
/**
* Test file for sending form as seo url
*
* This standalone script uses javascript
* to manipulate the form sending the action as an seo url.
* Can be saved as any file name.php and browsed to directly. 
* @var mixed
*/

// Prepare the beginning javascript header
$js_start =
<<<JSSTART
<script type="text/javascript" language="javascript">
function changeManufacturersAction()
{
JSSTART;
// FWR: Prepare the end javascript code
$js_end =
<<<JSEND
 document.manufacturers.submit();
}
// -->
</script>
JSEND;
 $manufacturers_query = tep_db_query("select manufacturers_id, manufacturers_name from " . TABLE_MANUFACTURERS . " order by manufacturers_name");
 if ($number_of_rows = tep_db_num_rows($manufacturers_query)) {
?>
<!-- manufacturers //-->
	 <table style="width: 35%; border: 1px solid #cccccc; background-color: #ffffcc; padding: 0.5em 0.5em 0.5em 0.5em;" cellpadding="0" cellspacing="0">
	  <tr>
		<td>
<?php
$form_string = "";
$js_logic = "";
$form_string .=  '			  <div style="padding: 0.5em 0.5em 0.5em 0.5em;"><b>FWR: Test Manufacturers Script<b></div>' . "\n";
$form_string .=  '				' . tep_draw_form('manufacturers', tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false), 'get') . "\n";

// Display a drop-down
  $manufacturers_array = array();
  if (MAX_MANUFACTURERS_LIST < 2) {
	$manufacturers_array[] = array('id' => '', 'text' => PULL_DOWN_DEFAULT);
  }
  // FWR: increment the option id
  $js_count = 1;
  while ($manufacturers = tep_db_fetch_array($manufacturers_query)) {
	$manufacturers_name = ((strlen($manufacturers['manufacturers_name']) > MAX_DISPLAY_MANUFACTURER_NAME_LEN) ? substr($manufacturers['manufacturers_name'], 0, MAX_DISPLAY_MANUFACTURER_NAME_LEN) . '..' : $manufacturers['manufacturers_name']);
	$manufacturers_array[] = array('id' => $manufacturers['manufacturers_id'],
								   'text' => $manufacturers_name);
	// FWR: Simple variable name for use in javascript
	$js_manu_id = $manufacturers['manufacturers_id'];
	// FWR: Build the JS logic for this particular  manufacturers_id
	$js_logic .=
"  if(document.manufacturers.manufacturers_id.options[$js_count].selected == true) {
document.manufacturers.action =  '" . str_replace('&', '&', tep_href_link(FILENAME_DEFAULT, 'manufacturers_id=' . $js_manu_id)) . "';
 }" . "\n";
 $js_count++;
  }
// FWR: Print it all to screen
$form_string .=  '				' . tep_draw_pull_down_menu('manufacturers_id', $manufacturers_array, (isset($HTTP_GET_VARS['manufacturers_id']) ? $HTTP_GET_VARS['manufacturers_id'] : ''), 'onchange="changeManufacturersAction();" size="' . MAX_MANUFACTURERS_LIST . '" style="width: 100%"') . tep_hide_session_id() . "\n";
$form_string .=  '				</form>' . "\n";
$form_string .=  '			  </div>';
echo $js_start . "\n";
echo $js_logic . "\n";
echo $js_end . "\n";
echo $form_string . "\n";
?>
		</td>
	  </tr>
	</table>
<!-- manufacturers_eof //-->
<?php
 }  
?>

Edited by FWR Media
Link to comment
Share on other sites

The manufacturers box creates a redirect .. there are posts here (in this thread) that I have made about tep_redirect and removing w3c & via that function. Give that a try.

 

 

Thanks. I have tried this as you instructed yet the results are the same. Is there any other option? I'm wondering why my particular installation is having these issues when others are not... ?

 

If it helps, I have the following contributions installed:

 

STS v4.5.8

Header Tags SEO v3.0.8

Multiple Products Manager v2.5

Easy Populate v2.76g

 

I appreciate you taking the time to help me with this. Thanks again.

Link to comment
Share on other sites

I just don't understand what you want or perhaps what you are saying.

 

seo urls produces urls nothing else ..

 

tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false)

 

Produces ..

http://www.xxxx.com/osc/index.php

 

Which is exactly what you asked it to do.

 

In the case of your form you set the select name as 'manufacturers_id'

 

So the url a posted form will produce is http://www.xxxx.com/osc/index.php?manufacturers_id=XX.

 

That is the way forms work.

 

In a fresh install of 2.1d ORIGINAL updated on a vanilla oscommerce install seo urls will auto 301 redirect that url to . .

 

http://www.xxxx.com/osc/manufacturers-name-m-XX.html.

 

 

 

Bingo, I would expect USU to re-write the url and it is not. That has been the point I am trying to get across. The url simply comes through to the new page as standard osc, it is not being converted. This is standard USU 2.1d as taken from your contribution using STS. Every other url on this site: a direct hyperlink, rss output, xml output, converts as expected, these 2 forms do not. And they are the only url's built in this fashion.

 

And it is not clear why. The only reason I can think of is that the url is built in the tep_draw_form and tep_draw_pull_down_menu builds the mfgr's id as opposed to a url built in 1 step using tep_href_link only.

Link to comment
Share on other sites

Bingo, I would expect USU to re-write the url and it is not. That has been the point I am trying to get across. The url simply comes through to the new page as standard osc, it is not being converted. This is standard USU 2.1d as taken from your contribution using STS. Every other url on this site: a direct hyperlink, rss output, xml output, converts as expected, these 2 forms do not. And they are the only url's built in this fashion.

 

And it is not clear why. The only reason I can think of is that the url is built in the tep_draw_form and tep_draw_pull_down_menu builds the mfgr's id as opposed to a url built in 1 step using tep_href_link only.

 

It's obvious why.

 

seo urls creates exactly the link you ask it to then THE FORM creates the posted url.

 

I say again it has ABSOLUTELY nothing to do with seo urls.

Link to comment
Share on other sites

Thanks. I have tried this as you instructed yet the results are the same. Is there any other option? I'm wondering why my particular installation is having these issues when others are not... ?

 

If it helps, I have the following contributions installed:

 

STS v4.5.8

Header Tags SEO v3.0.8

Multiple Products Manager v2.5

Easy Populate v2.76g

 

I appreciate you taking the time to help me with this. Thanks again.

 

I would need to see the site

Link to comment
Share on other sites

It's obvious why.

 

seo urls creates exactly the link you ask it to then THE FORM creates the posted url.

 

I say again it has ABSOLUTELY nothing to do with seo urls.

 

As I have thought all along, this is a gap in the USU's contribution, it does not convert standard osc box forms which are written in this fashion. You can say that it has nothing to do with USU, but I prefer to look at it as an opportunity to close a gap in the contribution. This is not a home grown box, this is one provided by the project and probably used in 100's of stores.

 

Why have a contribution which is supposed to increase SEO, but does not convert all url's, leaving Google, in its odd wisdom during a spider scan, to perhaps penalize a site for duplicate content?

 

I do appreciate the script provided containing alternate code and javascript, I will look at it and see if it can used or modified to fit within the existing box process.

Link to comment
Share on other sites

As I have thought all along, this is a gap in the USU's contribution, it does not convert standard osc box forms which are written in this fashion. You can say that it has nothing to do with USU, but I prefer to look at it as an opportunity to close a gap in the contribution. This is not a home grown box, this is one provided by the project and probably used in 100's of stores.

 

Why have a contribution which is supposed to increase SEO, but does not convert all url's, leaving Google, in its odd wisdom during a spider scan, to perhaps penalize a site for duplicate content?

 

I do appreciate the script provided containing alternate code and javascript, I will look at it and see if it can used or modified to fit within the existing box process.

 

Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah!!!!!

 

For the LAST time, ultimate seo urls provides URLS!!! it does not alter the way forms work in basic html.

Link to comment
Share on other sites

The site can be found here. It's a basic install of OSC and I havn't done much work on it yet...

 

I really appreciate it. Thanks again.

 

Ok this is an issue with some oddly setup servers that do not provide PATH_INFO as expected ( I think)

 

includes/classes/seo.class.php

 

 

Find ..

 

		function check_redirect(){
			$this->need_redirect = false; 
			if( false !== (strpos(getenv('PATH_INFO'), DIR_WS_HTTP_CATALOG)) ){
			  $path_corrected = ltrim(str_replace(DIR_WS_HTTP_CATALOG, '', getenv('PATH_INFO')), '/');
			  $this->path_info = is_numeric(strpos($path_corrected, '/')) ? $path_corrected : NULL;
			} else {
			  $this->path_info = is_numeric(strpos(ltrim(getenv('PATH_INFO'), '/') , '/')) ? ltrim(getenv('PATH_INFO'), '/') : NULL;
			}

 

Replace with ..

 

		function check_redirect(){
			$this->need_redirect = false; 
			// BOF: FWR - Some servers show the folders in getenv('PATH_INFO') like /catalog/shop/
			$getEnvPathInfo = getenv('PATH_INFO');
			if( false !== strpos($getEnvPathInfo, DIR_WS_HTTP_CATALOG) ){
			  $rawpath = str_replace(DIR_WS_HTTP_CATALOG, '', $getEnvPathInfo);
			} else {
			  $rawpath = $getEnvPathInfo;
			}  
			$this->path_info = is_numeric(strpos(ltrim($rawpath, '/') , '/'))
			? ltrim($rawpath, '/') : NULL;
			// EOF: FWR - Some servers show the folders in getenv('PATH_INFO') like /catalog/shop/

Link to comment
Share on other sites

Ok this is an issue with some oddly setup servers that do not provide PATH_INFO as expected ( I think)

 

 

The closest I have to that is this:

 

function check_redirect(){
$this->need_redirect = false;
$this->path_info = is_numeric(strpos(ltrim(getenv('PATH_INFO'), '/') , '/')) ? ltrim(getenv('PATH_INFO'), '/') : NULL;
$this->uri = ltrim( basename($_SERVER['REQUEST_URI']), '/' );
$this->real_uri = ltrim( basename($_SERVER['SCRIPT_NAME']) . '?' . $_SERVER['QUERY_STRING'], '/' );
$this->uri_parsed = $this->not_null( $this->path_info )
? parse_url(basename($_SERVER['SCRIPT_NAME']) . '?' . $this->parse_path($this->path_info) )
: parse_url(basename($_SERVER['REQUEST_URI']));
$this->attributes['SEO_REDIRECT']['PATH_INFO'] = $this->path_info;
$this->attributes['SEO_REDIRECT']['URI'] = $this->uri;
$this->attributes['SEO_REDIRECT']['REAL_URI'] = $this->real_uri;
$this->attributes['SEO_REDIRECT']['URI_PARSED'] = $this->uri_parsed;
$this->need_redirect();
$this->check_seo_page();
if ( $this->need_redirect && $this->is_seopage && $this->attributes['USE_SEO_REDIRECT'] == 'true') $this->do_redirect();
}

 

Is this the function you are referring to? Thanks again.

 

On a side note, when posting code, how do I make sure the code box will display correctly without having to scroll horizontally?

Edited by DimeNote
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...