با ساخت URL های دلخواه و سئو شده میتوانید رتبه خود را در نتایج موتور های جستجو بهبود ببخشید . همچنین ساخت آدرس های url سئو شده و خوانا به مخاطب نشان می دهد که محتوای این صفحه چیست . همچنین باعث زیبایی و نظم مطالب سایت شما می شو د . دو آدرس URL معمولی و سئو شده را دز مثال زیر میبینید
- URL معمولی : http://netparadis.com/index.php?p=123
- URL سئو شده : http://netparadis.com/generate-seo-friendly-url-in-php
کاملا واضح است که URL سئو شده کاربر پسند تر از از url معمولی است . همچنین ساخت URL های دلخواه و سئو شده به کاربر یک آگاهی کلی از اینکه در حال کلیک و باز کردن چه صفحه وب ی هستند, می دهد .
اگر قصد دارید که رتبه خود را در نتایج جستجوی گوگل و دیگر موتور های جستجو بالا ببرید , نیاز دارید که حتما تغییری در url های صفحات سایت و مقالات خود با ساخت URL های دلخواه و سئو شده ایجاد کنید .
به این تغییر آدرس صفحات به اصطلاح URL Rewriting می نامند . بسیاری از فریمورک ها از .htacces و مود rewrite برای تغییر آدرس های url استفاده می کنند .
همچنین سیستم مدیریت محتوای وردپرس نیز از این قابلیت استفاده می کند به اینصورت که برای هر پست یک عبارت قابل فهم و یکتا به نام slug اختصاص می دهد و آن را در دیتابیس ذخیره می کند . زمانی که عبارت مورد نظر , که حالا می تواند اسم مقاله یا هرچیزی که شما تعیین کردید باشد , درخواست می شود . پست مورد نظر از دیتابیس خوانده و به نمایش می دهد . قوانین rewrite آدرس url وردپرس در فایل .htaccess نیز قابل دسترس است.
مثلا برای تغییر آدرس http://netparadis.com/ index.php?id=netp به http://netparadis.com/netp از فایل .htaccess به اینصورت استفاده می کنیم :
1 2 |
RewriteCond %{REQUEST_URI} !^/index.php RewriteRule ^(.*)$ /index.php?id=$1 [L] |
در این آموزش , قصد داریم به شما نحوه تغییر url و ساخت URL های دلخواه و سئو شده در php همانند آدرس های صفحات وردپرس را نشان بدیم . اسکریپت php ما شما امکان تبدیل عنوان مطلب به url های اختصاصی را میدهد . ما همه کد های php لازم را در یک تابع به اسم generateSeoURL() جمع کردیم .
تابع generateSeoURL() به طور خودکار یک عبارت تمیز و منظم برای url می سازد .
تابع php ساخت URL های دلخواه و سئو شده
تابع generateSeoURL() به عنوان ورودی یک رشته که عنوان مطلب باشد را دریافت می کند و url های human-friendly با یک “-” (خط تیره – dash) به عنوان جدا کننده کلمات , ایجاد می کند .
- $string – الزامی* – رشته ای که قصد تبدیل آن به آدرس url سئو شده دارید .
- $wordLimit – اختیاری – ایجاد محدودیت برای طول url . به طور پیش فرض ۰ است .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php function generateSeoURL($string, $wordLimit = 0){ $separator = '-'; if($wordLimit != 0){ $wordArr = explode(' ', $string); $string = implode(' ', array_slice($wordArr, 0, $wordLimit)); } $quoteSeparator = preg_quote($separator, '#'); $trans = array( '&.+?;' => '', '[^\w\d _-]' => '', '\s+' => $separator, '('.$quoteSeparator.')+'=> $separator ); $string = strip_tags($string); foreach ($trans as $key => $val){ $string = preg_replace('#'.$key.'#i'.(UTF8_ENABLED ? 'u' : ''), $val, $string); } $string = strtolower($string); return trim(trim($string, $separator)); } |
برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود
نحوه استفاده
عنوان مقاله یا کلمه مورد نظر را به عنوان اولین پارامتر تابع generateSeoURL() پاس بدید . اگر قصد دارید تعداد کلمات را در url محدود کنید , می توانید عدد مورد نظر را برای حذف مقادیر اضافه به عنوان پارامتر دوم وارد کنید .
ساخت URL های دلخواه و سئو شده بدون محدودیت کلمه :
1 2 3 4 5 6 |
<?php $postTitle = 'Adding Google Map on Website within 5 Minutes'; $seoFriendlyURL = generateSeoURL($postTitle); //Output will be: adding-google-map-on-your-website-within-5-minutes |
ساخت URL های دلخواه و سئو شده با محدودیت کلمه :
1 2 3 4 5 6 |
<?php $postTitle = 'Adding Google Map on Your Website within 5 Minutes'; $seoFriendlyURL = generateSeoURL($postTitle, 6); //Output will be: adding-google-map-on-your-website |
ساخت URL های دلخواه و سئو شده با این روش بسیار کارآمد و ساده می باشد و به طبع باعث افزایش رتبه شما در نتایج گوگل و همچنین منظم بودن آدرس صفحات شما می شود . سعی کنید حتما و حتما اگر یک cms اختصاصی می نویسید یا اینکه در حال انجام یک پروژه هستید این قابلیت را در پروژه پیاده سازی کنید .
هر سوالی داشتید ، از قسمت نظرات اقدام کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید
سلام خسته نباشید.
htmlspecialchars تابع هنگام کار در ومپ درست اجرا نمیشه و تگ های وردی رو به موجودیت تبدیل نمیکنه همراه تگ نشون میده ؟ ولی بقیه کدها رو اجرا میکنه به نظرتون مشکل از کجاست
سلام. ممنون
باید دقیقتر بفرمایید متوجه نشدم
کد زیر تگ b رو نشان میده و علامت بزرگتر کوچکتر را به موجودیت تبدیل نمیکنه؟؟؟؟
$str = “This is some bold text.”;
echo htmlspecialchars($str);
در حقیقت باید اینجوری نشون بده
This is some <b>bold</b> text.
دلیلش اینه که مرورگر مجدد اون رو میخونه و چیزی که شما باید نگاه کنید view-source مرورگر هست نه خود خروجی مرورگر و در view-source یا همان ctrl+u میبینید همه چیز اوکی هست و مطمین باشید درست اینکد شده
سلام وقت بخیر استاد
برای ایجاد صفحه سفارشی خطای ۴۰۴ یا ۴۰۳ باید از چه روشی و در کدامین فایل سایت استفاده کنیم لطفا راهنمایی کنید.
سلام ممنون. در سی پنل بخشی به اسم Error pages هست از اونجا میتونید تنظیم کنید. از هاستینگ هم میتونید بپرسید
فایل .htaccess رو میشه روی لوکال هاست هم ساخت و این کدو اجرا کرد
سلام. بله
فایل .htaccess را داخل کدوم پوشه لوکال ایجاد کنم. و فانکشن generateSeoURL رو در کدوم فایل ذخیره کنیم. لطفا راهنمایی کنید
داخل همون فولدری که پروژتون هست و تابع رو هم هر جایی که میخواید استفاده کنید در پروژه اضافه کنید.
سلام استاد یه خواهش ازتون دارم . من نتونستم این کدو اجرا کنم میشه فایلمو براتون ارسال کنم یه نگاهی بهش بندازید ؟ کلافم کرده !!
سلام. این موارد انجام نمیشه یا باید php متوسط یاد بگیرید یا اگر پروژه تجاریه به یه برنامه نویس دیگه بسپارید.
باسلام وقت بخیر
سایتم وردپرس نیست . و فایل htaccess نداره . این پروژه رو چه طوری پیاده کنم رو سایت. لطفا راهنمایی کنید
سلام. ممنون
میتونید فایل .htaccess رو در هاست بسازید و مشکلی نداره
سلام
url فارسی رو چطور با php میسازن؟؟؟؟
سلام. بفرمایید
preg_replace(‘/&([^#])(?![a-z]{1,8};)/i’, ‘&$1’, $title);
موفق باشید.
سلام می خواستم به url سایت و قسمت ووکامرس post id اضافه کنم تا محصولات که نام های یکسان دارند تکراری نشه و توی قسمت پیوند های یکتا > پایگه سفارشی به این صورت وارد کردم: /product/%post_id%/
یه مشکل که اینجاست من تعداد زیادی الان محصول دارم و زمانی که اینو ووارد کردم چند ساعت اول محصولات با لینک قبلی ۴۰۴ بودن ولی الان اگه لینک قبلی هم بزنم ریدایرکت میشه به صفحه جدید بصورت خودکار و من هیچکاری برای ریدایرکت نکردم. می خواستم بدونم این موضوع باعث افت سئو میشه و یا اینکه ربات های گوگل ۴۰۴ تشخیص میدند با اینکه خود به خود صفحات ریدایرکت شدن؟
ممنون
سلام. بله در سئو تاثیر داره ولی به مرور دوباره اوکی میشه و سعی کنید داخل گوگل کنسول هم ثبت کنید
سلام آقای شفیعی ممنون از آموزش خوبتون یه سوالی داشتم من الان تونستم این یو ار الو :
mywebsite/post.php?postid=98
تبدیل به این یو ار ال کنم :
mywebsite/post/98
الان میخوام تایتل پست بزارم تو بخش :
mywebsite/post/98/title-post
این کارو تو htaccess به چه روشی انجام بدم .پارامتر ایدیو با گت گرفتم و تایتلم میتونم به این روش بگیرم :
mywebsite/post/98/?&mytitle=amozeshe sakhte url delkhah
ولی نمیتونم به این تبدیلش کنم :
mywebsite/post/98/amozeshe-sakhte-url-delkhah – یا این : mywebsite/post/amozeshe-sakhte-url-delkhah
تو این روش مث یو ار ال خودتون آیدی هم نشون داد نمیشه که خیلی قشنگه
mywebsite/post/amozeshe-sakhte-url-delkhah
خیلی ممنون میشم کمکم کنید مرسی
سلام.
شما باید در فیلدهایی که میخواین قرار بگیره مثلا آیدی پست قرار بگیره باید داخل htaccess بزارید که فقط عدد باشه با \d و ادامش که slug پست هست هم باید اختیاری بزارید. در کل کمی regex یاد بگیرید این موارد رو به سادگی میتونید پیاده سازی کنید
https://netparadis.com/regular-expression-regex-php
منبع اصلی این الگو نوشتن هم اینجاست : http://httpd.apache.org/docs/current/mod/mod_rewrite.html
اگه امکان داره یه راهنمایی خیلی کوچیک کنید متوجه میشم
بفرمایید به اینصورت استفاده کنید :
RewriteRule ^post/([0-9]+)/([^/]+) /?postid=$1&title=$2
سلام من می خوام این در این لینک product/index/test-or-text متن index رو که متد هستش رو حذف کنم دستوری هست در htacess
سلام.
به اینصورت تست کنید :
RewriteEngine On
RewriteRule ^/product/(.*)/test-or-text$ /product/test-or-text [L,QSA]
موفق باشید.
من کد زیر که دادین تست کردم کار نکرد متاسفانه:
RewriteRule (maskan)/([0-9]+) $1.php?id=$2 [L,QSA,NC]
و این کد جایگیزین کردم و کار کرد
RewriteRule ^(\d+)*$ /maskan/estate-moro.php?title=$1 [L,QSA,NC]
فقط یک مشکل داره فقط اعداد نمایش میده اگر مقدار string قرار دهیم کار نمیکنه
مشکل از کجا؟ممنون میشم اگر راهنمایی کنید
در مورد regex جستجو کنید. میتویند آموزش regex در php را هم بخونید.
به جای \d در بالا میتونید از .* استفاده کنید یا کنار \d یک \w هم اضافه کنید تا کاراکتر های لاتین هم خوانده بشه.
موفق باشید.
سلام
کد بالا برای index.php به درستی کا رمیکنه ولی صفحه ادامه مطلبم به ادرس moro.php وقتی داخل کد زیر ادرس از index.php به moro.php تغییر میدم:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/maskan/index.php
RewriteRule ^(.*)$ /maskan/moro.php?id=$1 [L]
با ارور Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
روبه برو میشم الان باید کد های صفحه moro داخل صفحه index.php قرار بدم تا کار کنه؟راه حلی وجود نداره؟
برای فایل داخل این فولدر باید به اینصورت استفاده کنید :
RewriteRule (maskan)/([0-9]+) $1.php?id=$2 [L,QSA,NC]
سلام
وقتی کد زیر داخل فایل htacces بذاریم:
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^(.*)$ /index.php?id=$1 [L]
۱
۲
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^(.*)$ /index.php?id=$1 [L]
url زیر باید:
https://site/index.php?id=5
به شکل زیر شود:
https://site/index.php/5
الان کد گذاشتیم تبدیل نمیکنه؟
سلام.
اول کد باید به اینصورت انجین رو روشن کنید : RewriteEngine on
پس اول کد
RewriteEngine on
قرار داده و بعد بقیه کد خودتون در ادامه بزارید.
و بصورت http://site/5 فراخوانی می شود
سلام خسته نباشید، ممنون از مقله ی خوبتون.
اگر ممکنه دقیقا توضیح بدید روش کار چطور هست.
سلام ممنون. توضیحات مورد نیاز در مقاله آمده. لطفا هرجایی نیاز به توضیح داشتید رو بفرمایید.
موفق باشید.
سلام ممنون از سایت خوبتون…
من با htaccess یه URL Rewrite بصورت زیر انجام دادم که همه چی درست کار میکنه و مشکلی نیست
RewriteRule ^product\/([0-9]+)$ https://example/product.php?item=$1 [QSA,L]
حالا تو صفحه product.php با استفاده از متد $_GET پارمتر item رو دریافت میکردم و برای نمایش محصولات از اون تو دیتابیس استفاده می کردم اما با URL Rewrite دیگه پارامتر item توسط متد $_GET دریافت نمیشه لطفا راهنماییم کنید. تشکر
سلام. در اینجا نیاز است که کمی روت بندی routing کنید یا اینکه با explode مقدار url را بصورت / جدا کنید و مقدار نهایی که برای itemid هست رو دریافت کنید و نباید مستقیما از $_GET استفاده کنید.
سلام
دستورات رو اجرا که میکنیم خب یه خروجی داره اما چطوری این خروجی رو باید جای URL بشونیم؟ من تابع رو اجرا میکنم اما URL تغییر نمیکنه!!
سلام. شما باید خروجی لینک خود را در دیتابیس ذخیره کنید و بعد آن را مثل index.php?id= که مشخص شده در کد php دریافت و در دیتابیس جستجو و محتوا را نمایش بدید که این مورد رو هم باید از طریق هم htaccess و هم کدهای php مدیریت و مناسب پروژه خود تغییر بدید.
سلام
منم متوجه نشدم تمامی کار هایی که گفتین انجام دادم ولی چه جوری url تغییر بدم ممکن یک مثال بزنید؟
این طوریکه توضیح دادین باید urlدخل دیتابیس با ایدی ذخیر کنم(مثل:theme-56) و url با get در ادامه مطلب بگیرم و با explode ایدی جدا کنم؟
منم متوجه نشدم تمامی کار هایی که گفتین انجام دادم ولی چه جوری url تغییر بدم ممکن یک مثال بزنید؟
این آدرس یک مقاله در سایت شماست مثلا index.php?id=
اگر اون کد htaccess رو بزارید از این به بعد به جای مثلا
site/index.php?id=NEWPOST
کافیه
site/NEWPOST
بزنید تا دقیقا همان صفحه باز بشه.
و اون تابع generateSeoURL فقط برای ساخت رشته و لینک گذاری مطالبتون در سایت هست و کاربرد دیگه ای نداره و مهم فقط همان htaccess برای شماست
تا مثال بالاتون درسته ممنونم ولی مشکل من چکونگی دریافت ایدی هستش که به این صورت دریافت میکنم $id=$_GET[‘id’]; و نمیشه
بهتره php تا حد متوسط رو یاد بگیرید و بعد سراغ این مثال بیاید و یاد بگیرید چطور یک سایت خبری برای نمایش مطالب از دیتابیس و ثبت نام کاربران را بسازید
سلام / از بابت این مقاله خوبتون ممنونم/ فقط یه سوال:
اینکه در تعریف تابع $wordLimit = نوشتید و جلوش بعد مساوی هیچی نیست و یا در لاین ۵ بعد از != باز هیچی ننوشتین را متوجه نمیشم. میشه بگین چرا خالیه؟؟
سلام . خوشحالم که مفید واقع شده . همانطور که داخل متن پست هم با رنگ قرمز توضیح داده شده برای کپی کدها باید روش دابل کلیک کنید تا وارد محیط سفیدرنگ کپی بشید و بعد کدها رو استفاده کنید
موفق باشیذ.
سلام. ظاهرا تو تابع فوق ثابت UTF8_ENABLED تعریف نشده . چون در زمان اجرا خطای Notice: Use of undefined constant UTF8_ENABLED – assumed ‘UTF8_ENABLED’ نمایش داده میشود.ممنون میشم اصلاح کنید.
سلام . مشکل خاصی نیست به جای UTF8_ENABLED مقدار true بگذارید.
موفق باشید.