2009-06-10 4 views
2

Я занимаюсь разработкой веб-сайта PHP, и в настоящее время мои ссылки в facebook иш стиль, как такИспользование SEO-дружественные ссылки

me.com/profile.php?id=123 

Я думал о переезде в чем-то более дружественным к ползущей поиска двигатели (как здесь StackOverflow), что-то вроде:

me.com/john-adams

Но как я могу отличить от двух пользователей с одинаковым именем - или более правильно, то как StackOverflow отличить от двух вопросов с такое же название? я думал сделать что-то вроде

me.com/john-adams-123 

и разбора URL.

Любые другие рекомендации?

+0

http://stackoverflow.com/questions/975240/I-love-badgers Также идет на этот вопрос - число - это идентификатор в таблице, последний бит - только для SEO и выглядит красиво. –

ответ

7

Stackoverflow делает что-то похожее на ваш вариант me.com/john-adams-123, за исключением, например, me.com/123/john-adams, где часть john-adams фактически не имеет программного значения. Способ, который вы предлагаете, немного лучше, потому что числовой идентификатор без семантического содержания находится дальше вправо в URL-адресе.

Что я хотел бы сделать, это сохранить уникальный пул (эти URL-адреса URL-адреса, как правило, называемые слизнями) в таблице пользователя, и при необходимости добавить число при необходимости, чтобы получить уникальный.

+0

на самом деле, лучше использовать числовые идентификаторы из-за лучшей производительности базы данных при использовании индексированных столбцов с довольно короткими целыми значениями по сравнению с довольно длинными значениями строки (varchar). – zappan

5

В случае переполнения стека, в это

http://stackoverflow.com/questions/975240/using-seo-friendly-links 

http://stackoverflow.com/questions <- Constant prefix 
/975240       <- Unique question id 
using-seo-friendly-links   <- Any text at all, defaults to title of question. 

Facebook, с другой стороны, решил просто сделать все подобрать уникальный идентификатор. Затем они будут использовать это как страницу профиля. Что-то вроде http://facebook.com/p/username/. Они решают проблему уникальности между пользователями, просто требуя, чтобы она была некоторой строкой, которую пользователь выбирает, которая уникальна среди всех существующих пользователей.

3

SO 'читы' :-).

Ссылка на ваш вопрос "Using SEO-friendly links", но "Using SEO-friendly links" также работает.

Часть после номера - это дружественный бит для SEO, но на самом деле все равно, что там. Я думаю, что он по умолчанию имеет название вопроса.

Так что в вашем случае вы можете построить связь, как:

me.com/123/john-adams 

второй Джона Адамса будет иметь другой идентификатор и уникальный URL-адрес, как:

me.com/111/john-adams 
0

Я бы пойти с стиль me.com/john-adams-123, потому что я думаю, что самая левая часть URI имеет большее значение в рейтинге SEO.

На самом деле, если вы готовы использовать это на несколько контроллеров (а не только профиль пользователя), вы можете сделать это больше как me.com/john-adams-profile-123 с переписыванием правила перенаправления /.+-profile-(\d+) к profile.php?uid=$1 и все еще быть в состоянии использовать, скажем, me.com/john-adams-articles-123 для статей этого пользователя ...

2

Я бы сказал, что предложенное вами решение является лучшим решением, что и stackoverflows как она сохраняет содержимое иерархии:

me.com/john-adams-123 

Использования уникального идентификатора перед именем пользователя просто бессмысленно.

Я бы, однако, рекомендовать соблюдение типа контента:

me.com/john-adams-123.html 

Это позволит согласующихся URLs, отбывая различные типы контента.

Кроме того, вы можете использовать sexatrigesimal для уникального идентификатора, чтобы дополнительно уменьшить количество ненужного хлама в вашей URL, особенно для высоких конечных чисел, но это часто избыточно: D

me.com/john-adams-123.html -> me.com/john-adams-3F.html 
me.com/john-adams-1234567890.html -> me.com/john-adams-KF12OI.html 

Наконец, не забудьте использовать 301 переадресацию на несоответствующие доступные URI для перенаправления на «правильную» безопасную схему, чтобы предотвратить дублирование контента.

+1

Я чему-то научился сегодня - sexatrigesimal. Благодаря :) –

0

Чтобы избежать обращения к ссылкам, содержат специальные символы, вы можете использовать этот плагин для Zend Framework.

https://github.com/btlagutoli/CharConvert

$filter2 = new Zag_Filter_CharConvert(array(
       'onlyAlnum' => true, 
       'replaceWhiteSpace' => '-' 
      )); 
echo $filter2->filter('éééé ááááá ? 90 :');//eeee-aaaaa-90 

это может помочь вам справиться с завязками на других языках