Spatiu sau liniuta intre cuvinte in adresa URL?

Search Engine Optimization, discutii, tehnici legate de optimizare si indexare site web in motoarele de cautare, Google, Yahoo, Bing.
alexinio3d
Mesaje: 96

Spatiu sau liniuta intre cuvinte in adresa URL?

Siteul meu imi genereaza un link cu spatiu intre cuvinte (adica un exemplu ii acesta :

Cod: Selectaţi tot

siteul.ro/post.php?id=18&titlu=Sony a anuntat Xperia Z Ultra, “doar” 6.44 inch
Unde dupa cum se observa, este id-ul postului si titlu cum ii salvat in baza de date.
Intrebarea mea ii urmatoarea :
E bine daca las adresa URL asa, sau trebuie sa pun ceva de genu asta?

Cod: Selectaţi tot

siteul.ro/post.php?id=18&titlu=Sony-a-anuntat-Xperia-Z-Ultra,-“doar”-6.44-inch
Google imi va detecta linkul sau nu mil va detecta ?
Siteuri create / configurate de mine :
SilvoProject.Ro ( Magazin Online ) : SilvoProject.Ro
TreiSute.Ro ( Comunitate de gaming ) : TreiSute.Ro

MarPlo
Salut
Din experienta pot spune ca indicat este sa inlocuiesti spatiile dintre cuvinte din adresa URL cu liniuta, si deasemenea sa stergi alte caractere non alfa-numerice, afara de liniute (cum sunt: ghilimele, punct, virgula, etc.).
Asta se poate face usor in PHP cu preg_replace() si str_replace().
Exemplu:

Cod: Selectaţi tot

$titlu = 'Sony a anuntat Xperia Z Ultra, “doar” 6.44 inch';
$titlu = preg_replace('/[^a-z0-9 _-]+/i', '', $titlu);
$titlu = str_replace(' ', '-', $titlu);
echo $titlu;        // Sony-a-anuntat-Xperia-Z-Ultra-doar-644-inch    

alexinio3d
ok dar eu am o interogatie ceva gen :

Cod: Selectaţi tot

if(isset($_GET['id']) && isset($_GET['titlu']) && $_GET['id'] != "" && $_GET['titlu'] != ""){
	echo post_view($_GET['id'], $_GET['titlu']);
}

Cod: Selectaţi tot

function post_view($id, $titlu){
$sql_post = "SELECT * FROM `lgsl_post` WHERE id='".$id."' AND titlu='".$titlu."'";
$mysql_post = mysql_query($sql_post) or die ('Eroare : '.mysql_error());
$raw = mysql_fetch_array($mysql_post);
		$id = $raw['id'];
		$titlu = $raw['titlu'];
		$id_user = $raw['id_user'];
		$post = $raw['post'];
		$data = $raw['data_ora'];
		$img = $raw['img'];
		echo "<pre>";
		echo "<h4><a href=\"/post.php?id=".$id."&titlu=".$titlu."\" alt=\"".$titlu."\" title=\"".$titlu."\">".$titlu."</a></h4>";
		echo $post."<br /><br />";
		$sql_user = "SELECT * FROM lgsl_user WHERE id = '".$id_user."'";
		$mysql_user = mysql_query($sql_user) or die ('Eroare : '.mysql_error());
		$user = mysql_fetch_array($mysql_user);
		echo "Autor : <a href=\"/membru.php?user_id=".$user['id']."&user=".$user['nume']."\" alt=\"".$user['nume']."\" title=\"".$user['nume']."\">".$user['nume']."</a>";
		echo "<span style=\"float:right\">";
		// Plugin share Facebook
		echo "<a class=\"fb-share\" href=\"#\" onclick=\"window.open('https://www.facebook.com/sharer/sharer.php?u='+encodeURIComponent(location.href), 'facebook-share-dialog', 'width=626,height=436'); return false;\"> Share on Facebook</a>&nbsp;";
		// Plugin trimite Facebook
		echo "<div class=\"fb-send\" data-href=\"http://www.treisute.ro\"></div>   ".$data;
		echo "</span>";
		echo "</pre>";
		echo "<center><div class=\"fb-comments\" data-href=\"http://www.treisute.ro\" data-width=\"1024px\" data-num-posts=\"100\"></div></center>";
}
unde imi verifica daca titlu si id se gasesc in baza de date si ma gandesc ca daca fac cu "-" si fara ghilimele o sami dea eroare .
ce idee imi poti da ? :)
Siteuri create / configurate de mine :
SilvoProject.Ro ( Magazin Online ) : SilvoProject.Ro
TreiSute.Ro ( Comunitate de gaming ) : TreiSute.Ro

MarPlo
Daca id-ul este unic (cum de regula asa trebuie), nu mai e nevoie sa verifici si dupa titlu, faci verificarea doar dupa id; fiind Unic, nu sunt 2 articole cu acelasi id.

Cod: Selectaţi tot

$sql_post = "SELECT * FROM `lgsl_post` WHERE id=$id LIMIT 1";
 

bordanc_nicu
Am si eu o problema similara, in toate locurile unde am ID unic pentru fiecare postare, am reusit prin eliminarea caracterelor non alfanumerice din link, dar am o tabela care contine coloana autor, si doresc sa imi fie afisate doar volumele unui anumit autor.
Ce functie ar trebui sa folosesc in php, pentru a putea recunoaste autorul din baza de date dupa un string modificat cu liniute?
Renunta la ce nu poti pastra, pentru a castiga ce nu poti pierde!

MarPlo
Depinde cum e adaugat in baza de date. Daca in baza de date e spatiu in loc de liniuta, in PHP inlocuiesti liniuta cu spatiu, folosind str_replace() , apoi se face select cu sirul inlocuit.

Cod: Selectaţi tot

$sir2 = str_replace('-', ' ', $sir);
$sql = "SELECT * FROM `tabel` WHERE `autor` = '$sir2'";
 - Ideea e ca in Select sa ai sirul asa cum e in baza de date, de obicei cu o functie inversa celei folosite la inlocuire.

Sau altfel, se face Select-ul cu "autor" care e la acel ID unic. Exemplu:

Cod: Selectaţi tot

$sql = "SELECT * FROM `tabel` WHERE `autor` = (SELECT `autor` FROM `un_tabel` WHERE `un_tabel`.`id` = $id  LIMIT 1)";
- Daca situatia e altfel, da mai multe detalii.

bordanc_nicu
Fiind generat in mod dinamic, filtrarea pentru generarea link-ului o fac inlocuind orice caracter care nu este alfanumeric cu liniuta "-", astfel nu sunt inlocuite doar spatiile, ci si virgule, si liniuta de subliniere.
De exemplu, URL-ul: talkingnet.blogspot.ro/2011/10/nuance-talks-522-released-release-notes.html nu are transmis un ID unic, iar in titlul paginii apare si o virgula.
As dori eventual sa stiu daca SQL nu ar accepta vre-o functie care eventual fiind inlocuite liniutele cu spatii, sa permita o cautare dupa cuvintele rezultate din inlocuirea liniutelor.
Renunta la ce nu poti pastra, pentru a castiga ce nu poti pierde!

MarPlo
Personal nu cunosc o astfel de functie.
Ca solutii, vad sa se schimbe adresa URL astfel incat sa contina id-ul. De exemplu, daca adresa URL e generata dinamic in PHP, in loc de extensia ".html" sa fie ".id", findca oricum extensia in adrese URL rescrise nu are vreo valoare speciala, decat sa iti fie de folos in script.
O alta solutie, sa faci o coloana in tabelul mysql in care sa adaugi sirul asa cum e dupa inlocuire, cum e in llink, si te folosesti de acea coloana in Select.

bordanc_nicu
Da, pana la urma aleg varianta ca sa adaug inca o coloana in tabela, coloana care sa contina numele autorului modificat pentru a se potrivi cu link-ul.
Renunta la ce nu poti pastra, pentru a castiga ce nu poti pierde!

Subiecte similare