article

آموزش ساخت نقشه XML سایت (Sitemap) با PHP و MySQL

php-sitemap

یکی از ملزومات مورد نیاز مدیران وب معرفی اطلاعات آدرس های URL وبسایت، وبلاگ و... به صورت دستی بندی شده و دقیق به موتورهای جستجو است تا این موتورها به راحتی و با دقت بیشتر بتوانند کل صفحات موجود در یک آدرس اینترنتی را پیدا کرده و پوشش دهند، بدین منظور پروتکلی تعریف شده تحت عنوان Sitemap که در آدرس رسمی sitemaps.org با جزئیات در دسترس است، این پروتکل به وبمسترها اجازه می دهد تا آدرس های URL خود را در یک فایل XML قرار داده و به تناوب محتوای آن را به روزرسانی نمایند، با توجه به اینکه معمولا تعداد صفحات یک پایگاه اینترنتی همواره در حال تغییر و به روزرسانی است، ثبت دستی این تغییرات در فایل XML عملا گزینه مناسبی نبوده و بسیار وقتگیر و خسته کننده خواهد بود، ضمن اینکه احتمال بروز اشتباه نیز بالا خواهد رفت، از این رو در آموزش پیش رو ضمن ارائه اطلاعاتی در خصوص نقشه XML سایت، نحوه ساخت و به روزرسانی داینامیک آن با کدهای PHP و پرس و جوی MySQL را نیز به صورت نمونه توضیح خواهیم داد.

XML چیست و چرا در نقشه سایت استفاده می شود؟


XML (مخفف eXtensible Markup Language) زبان نشانه گذاری برای انتقال اطلاعات بین دستگاه های مختلف و یک استاندارد فراگیر است، XML قابل استفاده برای ماشین و قابل خواندن و درک توسط انسان است و این قابلیت وجود دارد تا با ساده ترین متد ممکن در تگ های مختلف نقشه XML سایت مواردی مانند آدرس صفحه، دوره به روزرسانی، تاریخ آخرین تغییرات، اولویت آدرس ها و... را برای هر URL به صورت جداگانه مشخص کنیم، لذا پروتکل Sitemap این زبان را برای ایجاد نقشه سایت مناسب دیده و در نظر گرفته است.

شیوه نگارش (Syntax) نقشه XML سایت


شیوه نگارش (Syntax) یک نقشه XML سایت در حالت کلی و برای نمونه به شکل زیر است:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com</loc>
</url>
<url>
<loc>http://www.example.com/?link=2</loc>
</url>
</urlset>
توضیح:
- رمزگذاری (encoding) نقشه XML سایت باید به صورت UTF-8 باشد که در خط اول دستورات آن را تنظیم می کنیم.
- sitemaps.org آدرس سایت رسمی پروتکل نقشه XML سایت است، در شروع تگ urlset آن را به عنوان پروتکل مرجع قرار می دهیم.
- هر نقشه XML سایت باید با یک تگ urlset شروع و پایان یابد، در واقع تگ urlset برای هر نقشه سایت، تنها یک بار تکرار می شود.
- لینک ها و اطلاعات آنها در تگ url و به تعداد مورد نیاز قرار می گیرند، ترجیحا لینک ها را از بالاترین سطح تا پائین ترین سطح در تگ های url مرتب کنید، به طور مثال بخش ها را ابتدا و زیرمجموعه ها را در سطح های پائین تر قرار دهید.
- برای آدرس هایی که در سایت شما به اسلش (/) ختم می شوند، در نقشه سایت نیز باید حتما اسلش را در پایان آدرس URL قرار دهید، در غیر اینصورت نیازی به این کار نیست و توصیه نیز نمی شود، در واقع باید آدرس ها را به همان شکلی وارد کنید که در سایتتان استفاده می کنید.
- از به کار بردن کاراکترهای &, ', ", > و < در آدرس لینک ها خودداری کنید و به جای آنها از جایگزین HTML استفاده نمائید، در PHP با توابعی مانند htmlspecialchars می توان کاراکترهای خاص را به مقادیر HTML آنها تبدیل کرد.

ایجاد نقشه XML سایت به صورت داینامیک با PHP و MySQL


معمولا تعداد لینک های سایت های امروزی به چند مورد محدود نیست و همواره با تغییراتی افزایشی همراه است، از این جهت به روزرسانی دستی فایل XML امری بسیار زمانبر و با ضریب بروز اشتباه بالا خواهد بود و به همین جهت برای مدیریت و به روزرسانی نقشه XML سایتمان باید از زبان های سمت سرور و از جمله PHP و سیستم مدیریت پایگاه داده MySQL استفاده کنیم، در کد زیر ما اطلاعات فرضی را از پایگاه داده فراخوانی کرده و برای هر مطلب، لینک آن را به نقشه سایتمان اضافه و در پایان لینک ها را در یک فایل با نام sitemap.xml کپی می کنیم:
<?php
//ابتدا یک فایل با نام sitemap.xml بسازید.
//فایل را دریافت کرده و یک بار محتویات آن را پاک می کنیم
$file = "sitemap.xml";
//تنظیم مجوز های ویرایش
chmod($file, 0755);
//استفاده از متد w+
$file_handle = fopen($file, 'w+')
or die("خطا: سطح دسترسی برای ویرایش فایل در سرور تنظیم نیست!");
//متغیر با مقادیر خالی
$empty = "";
//نوشتن در فایل
$string_data = $empty;
fwrite($file_handle, $string_data);
fclose($file_handle);

//باز کردن مجدد فایل
$file = "sitemap.xml";
chmod($file, 0755);
//این بار با متد a
$file_handle = fopen($file, 'a') or die("خطا: سطح دسترسی برای ویرایش فایل در سرور تنظیم نیست!");
    
$start = "<?xml version='1.0' encoding='UTF-8'?>
<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n"
;
//نوشتن فایل با متد a
$string_data = $start;
fwrite($file_handle, $string_data);

//صفحه نخست
$home = "<url><loc>http://example.com</loc></url>\n";
//نوشتن
$string_data = $home;
fwrite($file_handle, $string_data);

//قبل از اتصال به پایگاه داده باید اطلاعات اتصال را تعریف کنید
$conn = mysqli_connect("localhost", "db_user", "db_pass", "db_name");
if(!$conn){
    echo "Error!: " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
} else{
    //دریافت اطلاعات پست ها از دیتابیس و تبدیل به لینک
    $result = mysqli_query($conn, "SELECT * FROM posts ORDER BY rank ASC") or die(mysqli_error($conn));
    while($row = mysqli_fetch_array($result)){
        $id = $row['id'];
        $url = "<url><loc>http://example.com/?id=$id</loc></url>\n";
        //نوشتن
        $string_data = $url;
        fwrite($file_handle, $string_data);
    }
}

//بستن نقشه سایت
$end = "</urlset>";
//نوشتن
$string_data = $end;
fwrite($file_handle, $string_data);
fclose($file_handle);
//پایان اتصال
mysqli_close($conn);
?>
توضیح:
- فایلی با نام sitemap.xml ترجیحا در ریشه سایت بسازید.
- در کد بالا ابتدا بعد از فراخوانی فایل یک بار با متد +w محتویات آن را پاک سازی می کنیم (این کار برای جلوگیری از تکرار لینک ها در هر بار به روزرسانی نقشه XML سایتمان است).
- مجدد فایل را این بار با متد a فراخوانی کرده و اطلاعات جدید را در آن می نویسیم (فرق متد a و +w در این است که متد a به محتویات کنونی فایل خللی وارد نمی کند و در انتهای مقادیر موجود، مقادیر جدید را اضافه می کند اما متد +w فایل را خالی کرده و مجدد می نویسد).
- در نمونه کد بالا اطلاعات را از جدولی فرضی به نام posts دریافت کرده و برای هر مطلب یک لینک به خروجی می دهیم، توجه داشته باشید که اکستنشن استفاده شده در کد mysqli است که قاعدتا می تواند بر اساس نیاز خود از PDO نیز استفاده کنید.
- لینک های ما باید استاندارد HTML باشند و لذا استفاده از کارکترهای خاص &, ', ", > و < در آدرس لینک ها مجاز نمی باشد، توابعی مانند htmlspecialchars در PHP در این مورد کاربرد دارند.
- برای آپدیت مرتب نقشه XML سایت می توانیم به عنوان مثال آن را به کدهای صفحه ای که مطالبمان را از آن ارسال می کنیم اضافه کرده تا با هر بار ارسال مطلب جدید، اطلاعات فایل sitemap.xml نیز به روز رسانی شود، قاعدتا برای اعمال این حالت باید کمی برنامه نویسی سمت سرور (مانند PHP) مرتبط با CMS مورد استفاده بلد باشیم.
استفاده از نقشه XML سایت به لینک های معمول محدود نمی شود، محتویات دیگر صفحات وب از جمله تصاویر، ویدئوها، اخبار و... را نیز می توان در Sitemap گنجاند:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.sitemaps.org/schemas/sitemap-image/1.1"
        xmlns:video="http://www.sitemaps.org/schemas/sitemap-video/1.1">

<url>
<loc>http://www.example.com/</loc>
<image:image>
<image:loc>http://example.com/imagename.jpg</image:loc>
</image:image>
<video:video>     
<video:content_loc>http://www.example.com/videofilename.flv</video:content_loc>
<video:player_loc allow_embed="yes" autoplay="ap=1">http://www.example.com/videoplayer.swf?video=videofilename</video:player_loc>
<video:thumbnail_loc>http://www.example.com/thumbs/videofilename.jpg</video:thumbnail_loc>
<video:title>عنوان ویدئو</video:title>  
<video:description>توصیف ویدئو</video:description>
</video:video>
</url>
<url>
<loc>http://www.example.com/?link=2</loc>
</url>
</urlset>

افزودن تاریخ و اطلاعات بیشتر به Sitemap


علاوه بر تگ <loc> که آدرس لینک ها را در آن قرار می دهیم، از چند تگ (اختیاری) دیگر نیز می توانیم در نقشه XML سایت خود استفاده کنیم، از جمله <lastmod> برای نمایش تاریخ ایجاد یا به روز رسانی لینک، <changefreq> که دوره تغییر یک لینک را مشخص می کند و <priority> که میزان اهمیت آن را نسبت به سایر لینک ها نشان می دهد.
<?xml version="1.0" encoding="UTF-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com</loc>
<lastmod>2012-03-20</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>http://www.example.com/?link=2</loc>
<lastmod>2012-02-18T21:45:19+03:30</lastmod>
<changefreq>weekly</changefreq>
<priority>1</priority>
</url>
</urlset>
توضیح:
- فرمت مقادیر تگ <lastmod> می تواند به صورت تاریخ ساده یا تاریخ همراه زمان و اختلاف زمانی باشد (در مثال بالا از هر دو روش استفاده کرده ایم).
- تگ <changefreq> می تواند مقادیری مانند ماهیانه (monthly)، هفتگی (weekly)، ساعت به ساعت (hourly)، روزانه (daily)، سالیانه (yearly)، همیشگی (always) و یا هرگز (never) داشته باشد که نشان دهنده چرخه حدودی تغییرات آن لینک است.
- تگ <priority> میزان اهمیت لینک را مشخص می کند، این مقدار می تواند به ترتیب از کم اهمیت ترین (0.0) تا پراهمیت ترین (1.0) در نوسان باشد.
اطلاعات تکمیلی در خصوص نقشه XML سایت را می توانید در سایت رسمی آن مشاهده کنید:
sitemaps.org
sectionدسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
» نمایش آمار بازدیدها با PHP بدون استفاده از دیتابیس
» نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
» دریافت و نمایش پیج رنک گوگل با PHP
» تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP
» ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP
commentنظرات (۵۶ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: saeid
۱۸:۳۲ ۱۳۹۳/۱۱/۰۶
سلام چجوری میشه سایت مپ رو داینامک کرد مثلا در سایت شما آدرس
http://webgoo.ir/section/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C/css
که مربوط به یک دسته بندی است من چجوری می تونم لینک های موجود در اون رو روزانه قرار بدم من اگه لینک بالا قرار بدم اطلاعات و لینک های موجود در آن معرفی میشه یا باید کار دیگری کرد؟
<url> 
<loc>http://webgoo.ir/section/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C/css
</loc>
<lastmod>2012-02-18T21:45:19+03:30</lastmod>
<changefreq>weekly</changefreq>
<priority>1</priority>
</url>
درسته؟
پاسخ: 
اطلاعات موجود در هر لینک تنها به عنوان محتوا برای همان لینک معرفی می شوند، به عبارتی اگر لینک های دیگری در محتوای لینک قرار داده شده در نقشه سایت موجود باشند، جزء نقشه سایت نیستند بلکه به عنوان محتوا در نظر گرفته می شوند (البته این به معنی ایندکس نشدن لینک های زیرمجموعه نیست، بلکه صرفا چزء لینک های معرفی شده به عنوان نقشه سایت قرار نمی گیرند)، به عبارتی اگر می خواهید محتوای لینکی، جزء نقشه سایت باشد، باید در فایل XML آن را معرفی کرده باشید (با توجه به اینکه هدف از نفشه XML سایت بیشتر کمک به ربات ها در فهم ساختار و ایندکس راحتتر مطالب سایت است، زمانی که یک لینک اصلی معرفی می شود، الزامی به معرفی لینک های زیرمجموعه آن وجود ندارد، اما اگر معرفی کنید بهینه تر است).
نویسنده: saeid
۲۰:۲۷ ۱۳۹۳/۱۱/۰۹
سلام
منظورتونو کامل متوجه نشدم یعنی درسایت من اگر مراجعه کنید در قسمت مجموعه ها هر روز چند لینک (چند بلاگ) اضافه می شود و یعنی من اگر مثلا
http://www.talarmarkazi.com/talararak.php
را به عنوان لینک قرار دهم لینک های درون آن به گوگل معرفی نمی شوند؟ اگر بخوام محتوای آن مجموعه ها در گوگل قرار بگیرد باید تک تک آنها را هر چند روز که اضافه می شوند به نقشه خود اضافه کنم؟
من قبلا از افزونه Google XML Sitemap برای سایت وردپرسی خود استفاده می کردم که در سایت مپ اصلی
site.com/sitemap.xml
چند (لینک) سایت مپ دیگر قرار داشت با همان فرمت xml که مثلا یکی مربوط به پست ها و یکی مربوط به برچسب ها و غیره بود که وقتی به گوگل معرفی می شد هم لینک های سایت و هم محتوا معرفی میشد البته اکنون سایت من php است
لطفا یک توضیح کامل بدهید واقعا ممنون مطلب مفید دیگری مثل این پیدا نکردم
پاسخ: 
همان طور که گفتیم الزامی به معرفی تمام لینک های یک سایت در نقشه XML نیست، می توانید با معرفی سرشاخه ها، مطمئن باشید که لینک های زیرمجموعه توسط ربات گوگل پیدا خواهند شد، نقشه XML تنها یک کمک برای ربات جستجوگر است و نه بیشتر، به عبارتی این ربات آنقدر کنجکاو تعریف شده که حتی بدون نقشه سایت به راحتی می تواند لینک های موجود در هر صفحه را لیست کرده و به آنها سرک بکشد و از لینک های موجود در آنها به سایر صفحات و ...
نتیجه: اگر تعداد لینک های زیرمجموعه ای شما خیلی زیاد است، می توانید به معرفی لینک اصلی بسنده کنید، از این بابت هیچ مشکلی در ایندکس صفحات زیرمجموعه پیش نمی آید (مگر اینکه خودتان با سایر روش ها آنها را برای ربات ها مسدود کنید).
نویسنده: saeid
۱۱:۵۹ ۱۳۹۳/۱۱/۱۱
سلام
خیلی ممنون از اینکه جواب سوال های منو دادید واقعا سایت عالی دارید
فقط یه سوال دیگه هم دارم : من در این آموزش باید یک فایل به نام
sitemap.xml
داشته باشم؟ یعنی همه اون موارد بالا باید در یک فایل قرار بگیرد؟ به ترتیبی که قرار دادید؟ یک نمونه نمی تونید بذارید؟
پاسخ: 
نقشه XML می تواند در چند فایل باشد (هر فایل حداکثر اندازه ای دارد که در ابزار وبمستر گوگل در حال حاضر 10 مگابایت یا 50000 URL در نظر گرفته شده)، برای دیدن نمونه می توانید عبارت بالا را به انتهای آدرس سایت ها اضافه و در مرورگر تست کنید!
https://productforums.google.com/forum/?hl=en#!category-topic/webmasters/sitemaps/kJ-ZjeaJ3aw
نویسنده: اصغر
۱۱:۳۴ ۱۳۹۳/۱۲/۱۹
سلام وقتی سایت شما را در گوگل جستجو می کنیم نتایج رو به شکل زیر نشون می ده
https://www.google.com/search?q=%D9%88%D8%A8+%DA%AF%D9%88&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a&channel=sb
آیا این هم با نقشه سایت درست شده و چه طور؟
پاسخ: 
خیر این موضوع ارتباط مستقیم به نقشه سایت ندارد، در ابتدا باید ساختار و دسته بندی مشخصی (بخش، مجموعه، زیرمجموعه و...) برای سایتتان تعریف کنید اما این موضوع تضمینی برای نمایش در لیست جستجو به صورت توسعه یافته نیست، در واقع گوگل با توجه به معیارهای خود این حالت را برای یک سایت در نظر می گیرد که با توجه به تجربه می توان بازدید بالای سایت، رعایت اصول سئو، رنک بالای سایت، قدمت و... را در آن موثر دانست.
نویسنده: رضا
۰۰:۳۰ ۱۳۹۴/۰۲/۲۱
چطور باید مشکل زیر رو برطرف کنم؟
This page contains the following errors:
error on line 16 at column 82: EntityRef: expecting ';'
Below is a rendering of the page up to the first error.
با تشکر
پاسخ: 
معمولا اینگونه خطاها در هنگام اعتبار سنجی، ناشی از استفاده از کاراکترهایی مانند & به صورت مستقیم در سند است (معمولا در آدرس های URL داینامیک) که باید به معادل HTML آنها یعنی
&amp;
تبدیل شود، در واقع در خروجی نباید کاراکترهای خاص را به صورت خام داشته باشید (در PHP تابع htmlentities در این مورد کاربرد دارد)، همچنین اگر دستورات جاوا اسکریپت را به صورت مستقیم در صفحات XHTML استفاده کنید، با چنین خطاهایی مواجه خواهید شد، رفع مشکل در این حالت استفاده از CDATA است، مثال:
<script type="text/javascript">
//<![CDATA[
var elm = document.getElementById(id);
//]]>
</script>
نویسنده: ساغر
۱۵:۱۹ ۱۳۹۴/۰۳/۰۸
سلام.
شما منوی دسته بندی محصولات را در نظر بگیرید که محصولات 1 و 2 و 3 داخل آن هستند. با انتخاب محصول یک به صفحه category.php?id=1 میرویم و با انتخب محصول 2 به همان صفحه ولی با id 2 میرویم category.php?id=2. حالا چجوری این رو باید توی سایت مپ بنویسم؟
متشکرم.
پاسخ: 
بستگی به سلیقه، نیاز و هدفتان دارد، اما در کل باید به چند نکته توجه کنید:
- هدف از Sitemap صرفا کمک به موتورهای جستجو برای پیدا کردن راحت تر ساختار سایت است، لذا اگر یک صفحه داشته باشید که در آن به مطالب زیرمجموعه لینک شده باشد، درج لینک صفحه اصلی معمولا برای مطالب زیرمجموعه نیز کفایت می کند، هرچند برای اطمینان بیشتر می توان لینک مطالب را نیز به عنوان خروجی نقشه سایت در نظر گرفت.
- از نظر موتورهای جستجو اختلاف در حد شماره id نیز باعث متمایز شدن دو صفحه می گردد، به عبارتی لینک هایی که درج کرده اید اگرچه ساختاری مشابه دارند، اما به جهت متفاوت بودن id در واقع دو صفحه مجزا از سایتتان هستند و از دید ربات های جستجوگر دو محتوای متفاوت محسوب می شوند.
نتیجه اینکه اگر لینک های فوق جزء لینک های اصلی و ساختاری سایتتان هستند، در نقشه سایت درج کنید، در غیر اینصورت لینکی را درج کنید که یک سطح بالاتر از این موارد باشد.
نویسنده: nobody
۱۸:۵۶ ۱۳۹۴/۰۳/۱۴
سلام بر شما
شما توی نقشه سایت خودتون (webgoo) کاراکترها رو UTF8 نکردین لذا وقتی مستقیما نقشه سایت شما رو باز میکنیم کاراکترهای فارسی به صورت یونیکد هستن
حالا من موقع خوندن دیتاها از دیتابیس
SET NAMES UTF8
رو میزنم و توی نقشه سایت خودم
www.pcenter.ir
کلیه لینکهای مربوط به کاراکترهای فارسی یونیکد نیستن و درست نمایش داده میشن سوالم اینه که نمایش کاراکترهای فارسی به صورت یونیکد توی سایت مپ واسه تشخیص بهتر توسط گوگل تاثیر داره یا نه؟
پاسخ: 
بر اساس استانداردهای پیشنهاد شده توسط RFC (مخفف Request for Comments که زیرمجموعه IETF یا جامعه تعریف استاندارد برای اینترنت است)، آدرس های URL باید تنها شامل کاراکترهای استاندارد جدول ASCII باشند و برای پشتیبانی از زبان های زیرمجموعه UTF8 و انسجام بیشتر، از روشی به نام Percent-encoding یا تبدیل درصدی استفاده می شود، البته شاید انجام این کار برای موتور جستجوی گوگل خیلی ضروری نباشد، چون الگوریتم های گوگل به قدر کافی هوشمند هستند تا یونیکد عبارتها را تشخیص دهند، منتها در کل بهتر است از استاندارد Percent-encoding برای آدرس های URL استفاده کنید، در PHP انجام این کار با دو تابع امکانپذیر است:
- برای تبدیل جهت استفاده در فرم های وب از توابع
urlencode/urldecode
- برای تبدیل جهت استفاده در آدرس های URL از توابع
rawurlencode/rawurldecode
نکته: urlencode تبدیل را سازگار با application/x-www-form-urlencoded انجام می دهد (Space تبدیل به + می شود)، rawurlencode به صورت عادی عمل کرده و Space تبدیل به 20% می شود.
نویسنده: nobody
۲۰:۴۰ ۱۳۹۴/۰۳/۱۶
متشکر از پاسخ شما
یه سوال دیگه وقتی آدرس سایت مثلا سایت شما webggo.ir در گوگل سرچ میشه اولین جستجو صفحه اصلی سایت شما همراه با چندتا لینک که به صورت زیر مجموعه از قسمتهای مختلف سایت نشون داده میشه تو سرچ اکثر سایتها این مورد رو مشاهده کردم حالا از کجا باید این لینک های جانبی رو به گوگل معرفی کنیم توی نقشه سایت که discreption نداریم
توی سرچ یاهو هم خود یاهو مینویسه که این سایت discreption نداره از کجا باید بهش داد شما از کجا دادین؟
پاسخ: 
این موارد بر اساس فاکتورهای تعریف شده در الگوریتم های موتورهای جستجو برای شناسایی ساختار سایت ها به وجود می آیند، در واقع چند عامل شانس سایت شما را برای نمایش به صورت ساختاری در لیست جستجو بیشتر می کند:
- رعایت اصول SEO در کل سایت و وجود ساختار یکتا برای لینک ها (به طور مثال وجود دسته بندی ها و...).
- ثبت سایت در ابزار وبمستر سایت های گوگل و بینگ در آدرس های زیر:
https://www.google.com/webmasters

www.bing.com/toolbox/webmaster
- وجود و معرفی نقشه XML سایت به موتورهای جستجو تا حدی که ساختار اصلی سایتتان در آن تعریف شده باشد.
- کسب اعتبار برای سایت از طریق انتشار مطالب یکتا و به روزرسانی متناوب، در نتیجه لینک شدن سایت شما توسط دیگران، انتشار لینک های مطالب سایت در شبکه های اجتماعی، افزایش رنک، رتبه الکسا و... (موتورهای جستجو به این موضوع اهمیت زیادی می دهند و تنها سایت هایی که از دید آنها بر اساس بازخورد مخاطبان اعتبار دارند را در هنگام جستجو به صورت ساختاری نمایش می دهند).
نویسنده: جواد
۱۶:۲۸ ۱۳۹۴/۰۶/۱۹
سلام
آیا فید خوان RSS نیز در سئو و معرفی هرچه بهتر سایت یا وبلاگ به موتورهای جستجو تاثیری دارد یا خیر ؟
پاسخ: 
اگر منظورتان از فیدخوان (ابزار خواندن فید) همان فید RSS است!، بله، یکی از راه های معرفی بهتر لینک های سایت به موتورهای جستجو و همچنین آگاهی (موتور جستجو) از وضعیت به روزرسانی سایت یا وبلاگ استفاده از فید RSS است.
نویسنده: ali
۲۲:۴۱ ۱۳۹۴/۰۶/۲۸
شما نقشه سایت برای یک جدول post را گفتید. حالا اگه بخواهیم مطالب وارد شده در چند جدول را وارد کنیم چکار کنم؟ کدهاش چجوری میشه؟
پاسخ: 
روش کلی کار تفاوت چندانی نمی کند، هم می توانید چند فایل XML (برای هر جدول یک فایل) داشته باشید، هم اینکه کمی کدنویسی PHP بلد باشید و قبل از بستن تگ ها، پرس و جوی جدیدی متناسب با جداول مورد نظرتان اضافه کنید، یعنی این قسمت را برای هر جدول به صورت مجزا داشته باشید:
$result = mysqli_query($conn, "SELECT * FROM posts ORDER BY rank ASC")
or die(mysqli_error($conn));
while($row = mysqli_fetch_array($result)){
$id = $row['id'];
$url = "<url><loc>http://example.com/?id=$id</loc></url>\n";
//نوشتن
$stringData = $url;
fwrite($fileHandle, $stringData);
}
نویسنده: حسین
۱۱:۱۹ ۱۳۹۴/۰۸/۲۹
سلام خسته نباشید !
اول تشکر میکنم از سایت خوبتون
من یه مشکلی دارم با سایت مپ ها ساخته شده، این سایت مپ ها بعد از ارسال 10000 رکورد ارور میدن !
میخواستم بدونم راهی هست که بشه به طور مثال هر 9000 مطلب رو توی یه سایت مپ بریزه ؟
یا روشی باشه که سایت مپ کرش نکنه و خراب بشه !
حتی افزونه های حرفه ای وردپرس هم این مشکل رو دارن ، توی نظرات دیدم یک نفر دیگه هم این سوال رو داشت ! اگه امکانش هست یه سورس برای ما مبتدی ها بزارید خیلی عالی میشه !
پاسخ: 
این فایل توسط سیستم مدیریت محتوای سایت شما ساخته می شود و لذا تنها با ویرایش بخش ایجاد نقشه XML می توان چنین قابلیتی را تعریف کرد تا هر فایل محدود به تعداد خاصی ردیف شود (نیاز به برنامه نویسی دارد و زمانبر است)، راه دیگر تغییر نام دستی فایل نقشه سایت و معرفی مجدد آن به ابزار وبمستر گوگل و... است.
نویسنده: عزیزی
۱۸:۴۹ ۱۳۹۴/۰۹/۲۰
سلام دوست گرامی
اگر بخواهم sitemap با ظاهری مثل
http://news.rozblog.com/sitemap.xml
و
http://news.nasrblog.com/sitemap.xml
داشته باشم چکاری باید انجام دهم ؟
خواهشا راهنمایی بفرمایید هر چه زودتر با تشکر
پاسخ: 
کافی است تگی مشابه تگ زیر را در خروجی فایل XML داشته باشید:
<?xml-stylesheet type="text/xsl" href="http://news.rozblog.com/xml-sitemap.xsl"?>
همچنین باید استایل و کدهای فایل XSL موجود در قسمت href را بر اساس استاندارد XML تهیه کرده باشید.
نویسنده: احمد
۱۰:۲۳ ۱۳۹۴/۱۲/۰۳
وقتی در changefreq مشخص می کنیم که بروزرسانی و تغییر روزانه است پس چه نیازی می باشد که از lastmod نیز استفاده شود؟
پاسخ: 
این موارد اختیاری هستند و ممکن است برنامه ای که قرار است از فایل نقشه سایت استفاده کند (به طور مثال ربات گوگل) اهمیت بیشتری نسبت به یک مورد قائل شود یا صرفا با یک حالت برنامه ریزی شده باشد، از طرفی دوره تغییر، پیش بینی یک تاریخ تقریبی است و با تاریخ دقیق آخرین تغییرات تفاوت می کند، لذا بهتر است هر دو حالت استفاده شود!
نویسنده: محسن
۲۳:۰۲ ۱۳۹۴/۱۲/۲۳
سلام، خسته نباشید
من سایت مپ رو دریافت کردم، این کدشه، می خوام ببینم کدوم قسمت رو باید در سایت مپ وبمستر گوگل وارد کنیم؟ چون هر چی وارد می کنم گوگل ارور می ده و با خطای 400 روبرو میشم.
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<!-- created with Free Online Sitemap Generator www.xml-sitemaps.com -->

<url>
<loc>http://behfile.blogsky.com/</loc>
<changefreq>weekly</changefreq>
<priority>1.00</priority>
</url>
<url>
<loc>http://behfile.blogsky.com/m</loc>
<changefreq>weekly</changefreq>
<priority>0.80</priority>
</url>
<url>
این کد هم همین طور ادامه داره، چون تعداد صفحات وب زیاده.
ممنون.
پاسخ: 
برای Sitemap باید آدرس URL آن را در ابزار وبمستر گوگل ثبت کنید، یعنی آدرسی که اگر آن را در مرورگر وارد کنیم، نقشه سایت به عنوان نتیجه نمایش داده می شود، به طور مثال:
http://webgoo.ir/sitemap.xml
نویسنده: وحید
۲۳:۰۳ ۱۳۹۵/۰۱/۰۱
سایت من قابلیت آپلود کردن هیچ فایلی جز تصاویر رو نداره. چطوری نقشه سایت رو بزارم؟؟
پاسخ: 
سوالتان واضح نیست!، قاعدتا وقتی امکان آپلود فایل محدود است، نمی توانید فرمت غیر تصویر آپلود نمائید، هرچند ایجاد نقشه سایت معمولا به صورت داینامیک و در سرور، بدون نیاز به آپلود فایل صورت می گیرد!
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





6 × 5
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form mohadeseh
در:
ممنون از راهنماییتون مشکلم حل شد
۱۳۹۹/۰۷/۲۸

form محمد
در:
سلام. یک کد نوشته ام بدین صورت: وقتی صفحه باز شده یک پنجره پیام خالی با یک ok باز شده هر چه ok را...
۱۳۹۹/۰۷/۲۸

form فایز پور جهانبخشی
در:
سلام اگر بخواهیم برنامه ای که داخل متلب نوشتیم تا یک ثانیه اجرا شود و بعد از ثانیه اول در حالت خطا که...
۱۳۹۹/۰۷/۲۸

form mohadeseh
در:
الان کد من که توی تگ <head> گزاشتم میخواستم بدونم ایا امکانش هست که توی تگ link که ایکون رو باهاش اوردم بتونم...
۱۳۹۹/۰۷/۲۷

form mohadeseh
در:
سلام ببخشید لطفا راهنمایی کنید که چجوری title برای favicon در html بزارم؟ جوری که وقتی موس روی icon قرار بگیره متن...
۱۳۹۹/۰۷/۲۷

form ryomaechizen
در:
سلام. اگه حافظه وب پر بشه و مجبورا عکسا کپی باشن چطور باید مشکل بارگزاریشون حل بشه؟
۱۳۹۹/۰۷/۲۶

form رونا
در:
پرونده فرستاده شده نمی‌تواند به wp-content/uploads/2020/10 برود. سلام این ارور برای چی رخ می ده
۱۳۹۹/۰۷/۲۵

form reza
در:
سلام خوبید انشاالله؟ خواستم بدونم این نوار ابزار رو چطور باید اونایی رو دوست دارم بزارم سمت راست وبلاگم. هر چی کد و ......
۱۳۹۹/۰۷/۲۴

form سینا
در:
چگونه میتوانیم با استفاده از HTML فرمول شیمیایی مواد را بنویسیم؟ با عدد اتمی، جرمی و بار اتمی
۱۳۹۹/۰۷/۲۱

form فاطمه
در:
سلام ممنونم... خیلی ساده و روون توضیح دادین.. اونقدر که تشویق شدم محتوای یه فایل تکس رو با ایجکس درون یه div بیارم ولی...
۱۳۹۹/۰۷/۲۱

form امیرحسین
در:
خب متوجه شدم. که باید خط اول عدد فانکشن رو تغییر بدم. بسته به تعداد آرایه یا هر عدد دیگه تغییر بدم جوابمو...
۱۳۹۹/۰۷/۲۱

form امیرحسین
در:
عالی بود. خیلی ممنونم. ولی هر چند کلمه داخل آرایه داشته باشم به همون میزان خروجی گرفته میشه. من اگه 10 کلمه در آرایه داشته...
۱۳۹۹/۰۷/۲۱

form سعادتی
در:
سلام کاش روش برطرف کردن این بهم ریختگی رو هم توضیح میدادید. ممنون
۱۳۹۹/۰۷/۲۰

form امیرحسین
در:
موفق شدم اینو پیدا کنم. ولی میخوام کلمات تکراری داخلشون نباشه. مثال AAA فقط یک بار در اون خط وجود داشته باشه.
۱۳۹۹/۰۷/۲۰

form امیرحسین
در:
سلام. نه محدودیت زمانی وجود نداره.
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
سلام خسته نباشید. میخوام از این تابع برای بدست آوردن لیست های متفاوت استفاده کنم. مثلا یه آرایه داشته باشم. امیدوارم کمکم...
۱۳۹۹/۰۷/۲۰
form ابوالفضل
در:
سلام وقتتون بخیر من میخوام یه افزونه برای مرورگر کروم طراحی کنم و میخوام یه متنی رو هر سری از سایت دریافت کنه و...
۱۳۹۹/۰۷/۲۰
form mahdi
در:
سلام چطور می تونم از ip خارجی استفاده کنم؟ برای دریافت لانچر میخام. مرسی
۱۳۹۹/۰۷/۱۹
form احسان عباسی
در:
با سلام و تشکر از سایت خوبتون من یه کد تعریف کردم که در بورس ایران سهم مدنظرمو بیاره .. میخواستم ببینم امکانش هست دستوری...
۱۳۹۹/۰۷/۱۷
form شبنم
در:
سلام وقتتون بخیر، ببخشید از کلمه event یا e دقیقا چه زمانی توی فانکشن استفاده میکنیم؟
۱۳۹۹/۰۷/۱۷
form احمد
در:
با عرض سلام مجدد ساختار کلی دستورم به این صورت هست. بعد از حلقه وایل اون دیو کلاس 1 و 2 و 3 میخواهم...
۱۳۹۹/۰۷/۱۶
form احمد
در:
با عرض سلام ببخشید چطوری میتونم یه قسمت از تگ ها رو داخل حلقه وایل رد کنم دوباره تگ های بعدی داخل حلقه قرار بگیرن...
۱۳۹۹/۰۷/۱۶
form ابوالفضل
در:
سلام واقعا من خیلی گشتم تا بتونم این آموزش رو پیدا کنم چون واقعا نمی دونستم چی بنویسم تا یک رتبه بندی برای نتایج جستجو...
۱۳۹۹/۰۷/۱۵
form mahtab
در:
سلام وقتتون بخیر ببخشید میشه بفرمایید چجوری کلیپ رو بزاریم وبلاگ ؟؟ بی زحمت کامل بفرمایین ممنون و متشکر
۱۳۹۹/۰۷/۱۴
form Saeid Azari
در:
سلام ببخشید اگه امکانش هست سوال منو جواب بدید یکم گیج شدم...من یک کد html دارم که باید یک سایت درست کنم و ان را...
۱۳۹۹/۰۷/۱۳
form ابوالفضل
در:
سلام یک سوال دارم چجوری یک متنی که درون تگ td هست و بعد تگ br هست (تگ br درون تگ td است) رو...
۱۳۹۹/۰۷/۱۳
form parnian
در:
با سلام با توجه به این که این مطلب در سال 91 نوشته شده ایا تغیری هم کرده؟ مثلا استفاده و مهم بودن تگ های...
۱۳۹۹/۰۷/۱۳
form fahimeh
در:
سلام من دارم پروژه واسه دانشگاه مینویسم طراحی سایتو کردم برای کار با پایگاه داده دستور insert و delete کار میکنه ولی...
۱۳۹۹/۰۷/۱۲
form امین
در:
با عرض سلام ببخشید یه فرم دارم اخر فرمم یه دکمه دارم میخواستم بدونم چطوری باید بعد از کلیک کردن دکمه به صفحه دیگه انتقال...
۱۳۹۹/۰۷/۱۱
form محسن
در:
سلام من از فرم ساز گرویتی استفاده میکنم آیا امکان استفاده همچین چیزی رو میتونم داخلش داشته باشم آیا کدی داره که در قسمت...
۱۳۹۹/۰۷/۱۱
form مالکی
در:
چرا وبلاگم بالا نمی یاد
۱۳۹۹/۰۷/۰۹
form احمد
در:
با عرض سلام مجدد و خسته نباشید ببخشید نمونه کد رو اگر امکانش هست نگاه کنید که چطوری این متغییری رو که بدست اوردم در...
۱۳۹۹/۰۷/۰۹
form الناز
در:
سلام وقتتون بخیر. چطور میشه برنامه ای رو در php نوشت که کدملی رو تبدیل به شماره دانشجویی کنه اگه برام بنویسید ممنون میشم.
۱۳۹۹/۰۷/۰۹
form محمد
در:
سلام من میخواستم بدونم چه طوری میشه بدون اینکه از کاربر بپرسی که میخواهد از حساب خروج پیدا کند خود سایت بفهمد که کاربر از...
۱۳۹۹/۰۷/۰۹
form احمد
در:
با سلام ببخشید چطوری باید در جکوری از یک متغییر در صفحات دیگه استفاده کنم مثال دو عدد را باهم جمع کردم و ریختم داخل...
۱۳۹۹/۰۷/۰۹
form مهسا
در:
سلام و خسته نباشید مشکلی برای وبلاگ من پیش اومده موقع ورود بهم پیام میده وبلاگ داره بروز رسانی میشه و بعدا وارد وبلاگ شوید...
۱۳۹۹/۰۷/۰۸
form Moshtagh
در:
سلام و خسته نباشید بنده چند روزه که وقتی اطلاعات ورود به وبلاگم رو وارد تیترها و کلیک میکنم با چنین پاسخی مواجه میشم...
۱۳۹۹/۰۷/۰۸
form mahtab
در:
سلام خسته نباشین ببخشید چرا بلاگفا باز نمیکنه ؟؟؟ میرم مدیریت وبلاگ نه تو بروز شده ها وبی هستم نه هم که...
۱۳۹۹/۰۷/۰۷
form جواد
در:
سلام و عرض ادب. سایت من هک شده و یک کد ریدایرکت تو دیتابیس هاستم بارگزاری شده که آخر همه پست ها تو...
۱۳۹۹/۰۷/۰۷
form نبی
در:
‏asc و desc رو جابجا نوشتی
۱۳۹۹/۰۷/۰۴
form ساناز محمدی
در:
سلام مرسی از کدی که گذاشتید ♥
۱۳۹۹/۰۷/۰۳
form mahtab
در:
سلام خسته نباشین ببخشید میخواستم بپرسم که چجوری میتونیم یه کلیپ رو از کامپیوتر از انیستا دانلود کنیم ؟؟ اها اینم بگم...
۱۳۹۹/۰۷/۰۲
form سعید
در:
سلام دستتون درد نکنه از پروژه شما استفاده کردم فقط یه مشکل اگه در یک صفحه دو تا لیست کشویی داشته باشیم چطوری...
۱۳۹۹/۰۷/۰۱
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.