برای بهینهسازی سئو سایت Largest Contentful Paint (LCP) که یکی از معیارهای مهم در Core Web Vitals برای ارزیابی تجربه کاربری وبسایتها است، میتوانید موارد زیر را در نظر داشته باشید:
1. بهینهسازی تصاویر
- کاهش اندازه تصاویر: استفاده از نسخههای فشردهتر تصاویر، بدون از دست دادن کیفیت زیاد.
- Lazy loading: بارگذاری تصاویر هنگامی که به محدوده دید کاربر نزدیک میشوند.
- استفاده از فرمتهای مدرن: مانند WebP که کیفیت بالایی دارند و حجم کمتری نسبت به فرمتهای دیگر مثل JPEG یا PNG دارند.
2. بهینهسازی فونتها
- بارگذاری اولویتدار فونتها: استفاده از
preload
در فونتهای مهم. - استفاده از فونتهای وب استاندارد: که سریعتر بارگذاری میشوند.
3. بهینهسازی جاوااسکریپت و CSS
- کم کردن اندازه فایلها: فشردهسازی (minification) و ادغام (concatenation) فایلها.
- بارگذاری غیر انسدادی: استفاده از
async
وdefer
برای برچسبهای<script>
. - کدهای بیاستفاده: حذف کدهای جاوااسکریپت و CSS که استفاده نمیشوند.
4. کشسازی محتوا
- استفاده از سرویسهای شبکه توزیع محتوا (CDN): برای افزایش سرعت بارگذاری محتوا.
- تنظیم سربرگهای کش HTTP: تا مرورگرها بتوانند محتوا را کش کنند و در درخواستهای بعدی سریعتر بارگذاری شود.
5. سرور
- بهبود پاسخدهی سرور: ارتقاء سختافزار سرور یا بهینهسازی پیکربندی سرور.
- استفاده از HTTP/2 یا HTTP/3: برای کاهش زمان اتصال و بهبود عملکرد.
6. بهینهسازی محتوای متنی
- استفاده از فرمتهای فشردهتر: مانند Brotli برای فشردهسازی محتوا.
- کاهش حجم محتوای متنی: کوتاه کردن متنها جایی که امکانپذیر است و حفظ محتوای باارزش.
7. سایر موارد
- بهینهسازی برای موبایل: اطمینان ابرای بهینهسازی Largest Contentful Paint (LCP) که یکی از معیارهای مهم در Core Web Vitals برای ارزیابی تجربه کاربری وبسایتها است، میتوانید موارد زیر را انجام دهید:
- بهینهسازی تصاویر:
- کاهش حجم تصاویر با استفاده از فرمتهای کارآمد مانند WebP که کیفیت بالا و حجم کمتری دارند.
- استفاده از تکنیکهایی مانند lazy loading برای بارگذاری تصاویر به تأخیر افتاده.
- تنظیم ابعاد تصاویر قبل از بارگذاری در صفحه تا مرورگر نیاز به انجام این کار در زمان بارگذاری نداشته باشد.
- بهینهسازی فونتها:
- استفاده از
preload
برای فونتهایی که اولویت بارگذاری دارند. - انتخاب فونتهایی که به سرعت بارگذاری میشوند و از فونتهای محلی استفاده کردن تا از بارگذاریهای غیرضروری جلوگیری کنید.
- بهینهسازی CSS و JavaScript:
- فشردهسازی (minify) و ادغام (concatenate) فایلها برای کاهش تعداد درخواستها و حجم دادههای انتقالی.
- استفاده از تکنیکهای بارگذاری غیرهمزمان (asynchronous) یا به تعویق افتاده (defer) برای جاوا اسکریپت.
- بهبود سرور و پاسخگویی شبکه:
- ارتقاء پیکربندی سرور یا استفاده از شبکه تحویل محتوا (CDN) برای بهبود زمان پاسخگویی.
- استفاده از پروتکلهای مدرن مانند HTTP/2 یا HTTP/3 که عملکرد بهتری دارند.
- استفاده از کش:
- تنظیم سرور برای استفاده از کشهای مرورگر به شکل مؤثر.
- تعیین سیاستهای مناسب کش برای منابع استاتیک.
- بهینهسازی محتوای داینامیک:
- اطمینان از اینکه محتوای داینامیک به سرعت تولید و ارسال میشود، بدون تأخیرهای غیرضروری.
به یاد داشته باشید که LCP به بزرگترین عنصر محتوایی که در viewport بارگذاری میشود اشاره دارد و میتواند یک تصویر، یک بلوک متنی سنگین یا حتی یک ویدئو باشد.
Render Delay در lcp متن چیست؟
Render Delay در زمینه بهینهسازی وب و معیارهای Core Web Vitals به تأخیری اشاره دارد که در رندر شدن بزرگترین محتوای معنادار یک صفحه وب (که میتواند یک بلوک متنی باشد) ایجاد میشود. این تأخیر میتواند به دلیل عوامل مختلفی باشد که بر ظاهر شدن این محتوا در صفحه تأثیر میگذارند.
در مورد متن، Render Delay میتواند به خاطر موارد زیر باشد:
- بارگذاری دیرهنگام فونتها: اگر فونتهای سفارشی استفاده شوند و بارگذاری آنها زمانبر باشد، رندر متن تا زمانی که فونت بارگذاری شده و قابل استفاده باشد، به تأخیر خواهد افتاد.
- جاوااسکریپتی که رندر را مسدود میکند: اگر اسکریپتهایی وجود داشته باشند که باید قبل از رندر شدن متن اجرا شوند، این اسکریپتها میتوانند رندر متن را به تأخیر بیندازند.
- CSS که رندر را مسدود میکند: اگر صفحه نتواند محتوا را نمایش دهد تا زمانی که فایلهای CSS بارگذاری و تجزیه شوند، این میتواند منجر به تأخیر در رندر شدن متن شود.
برای کاهش Render Delay و بهبود LCP، میتوانید موارد زیر را انجام دهید:
- بارگذاری اولویتدار (Preload) فونتها: با استفاده از
link rel="preload"
در هدر HTML میتوانید فونتهای مورد نیاز را زودتر بارگذاری کنید. - استفاده از فونتهای محلی: که به سرعت بارگذاری میشوند و نیازی به دریافت از شبکه ندارند.
- بهینهسازی و فشردهسازی CSS و JavaScript: تا حجم کمتری داشته باشند و سریعتر بارگذاری شوند.
- استفاده از تأخیر در بارگذاری (defer) برای JavaScript: که نیاز به اجرا فوری ندارد تا اجرای آنها تا بعد از رندر شدن اولیه صفحه به تعویق بیفتد.
- استفاده از CSS Critical Path: که فقط شامل استایلهای لازم برای رندر اولیه صفحه است و میتواند به سرعت بارگذاری شود.
با اجرای این بهبودها، شما میتوانید تأخیر درRender Delay در زمینه بهینهسازی وب و مخصوصاً در معیار Largest Contentful Paint (LCP) به تأخیر در رندر کردن بزرگترین عنصر محتوایی صفحه وب اشاره دارد که معمولاً یک تصویر بزرگ یا بلوک بزرگی از متن است. LCP یکی از سه معیار اصلی Core Web Vitals است که تجربه کاربری را در وب سایتها اندازهگیری میکند.
Render Delay در مورد متن میتواند به خاطر عوامل متفاوتی رخ دهد، مثل:
- بارگذاری دیرهنگام فونتهای سفارشی
- جاوااسکریپتهایی که بارگذاری صفحه را مسدود میکنند
- استایلهای CSS که باید پردازش شوند قبل از اینکه متن بتواند رندر شود
از آنجایی که LCP معیاری است که تأثیر مستقیمی بر روی SEO و رتبهبندی وب سایت دارد، کاهش Render Delay و بهینهسازی زمان بارگذاری LCP بسیار مهم است. برای بهبود LCP و کاهش Render Delay میتوانید:
- از فونتهای محلی استفاده کنید یا فونتهای وب را از پیش بارگذاری کنید.
- اسکریپتها و CSSهایی که رندر را مسدود میکنند را بهینهسازی کنید.
- استفاده از تکنیکهای Lazy Loading برای محتوایی که نیازی به بارگذاری فوری ندارد.
این توصیهها به بارگذاری سریعتر صفحه و بهبود تجربه کاربری کمک میکنند.چگونه از فونتهای محلی استفاده کنید یا فونتهای وب را از پیش بارگذاری کنید.
چگونه از فونتهای محلی استفاده کنید یا فونتهای وب را از پیش بارگذاری کنیم؟
برای استفاده از فونتهای محلی یا پیش بارگذاری فونتهای وب، شما میتوانید از روشهای زیر استفاده کنید:
استفاده از فونتهای محلی
برای استفاده از فونتهای محلی، شما میتوانید در تعریف @font-face
در CSS خود، فونتهایی را که قبلاً بر روی دستگاه کاربر نصب شدهاند را مشخص کنید. مثال زیر نشاندهندهی نحوهی استفاده از فونت محلی Arial
است:
body {
font-family: Arial, sans-serif;
}
در این مثال، اگر فونت Arial
بر روی دستگاه کاربر موجود باشد، مرورگر از آن استفاده خواهد کرد و در غیر این صورت به فونت پیشفرض sans-serif
سوئیچ میکند.
پیش بارگذاری فونتهای وب
برای پیش بارگذاری فونتها، شما میتوانید از تگ link
با rel="preload"
در HTML خود استفاده کنید. این کار به مرورگر میگوید که فونت مورد نظر باید زودتر و با اولویت بیشتری بارگذاری شود. مثال زیر نحوهی پیش بارگذاری یک فونت وب را نشان میدهد:
<link rel="preload" href="/path/to/font.woff2" as="font" type="font/woff2" crossorigin="anonymous">
با اضافه کردن این خط در بخش head
HTML، فونت قبل از بارگذاری کامل CSS بارگذاری خواهد شد و در نتیجه تأخیر کمتری در رندر صفحه ایجاد میکند.
نکات مهم برای بهبود عملکرد
- مطمئن شوید که فونتهایی را که پیش بارگذاری میکنید واقعاً استفاده میشوند تا منابع بیمورد بارگذاری نشوند.
- استفاده از
crossorigin="anonymous"
زمانی ضروری است که فونتها از یک دامنهی متفاوت با دامنهی اصلی درخواست میشوند (از CORS استفاده میکنند). - فونتها را فشردهسازی کنید (مثلاً با استفاده از فرمتهای WOFF2) تا حجم فایلها کمتر شود و بارگذاری سریعتر صورت گیرد.
- اگر فونتهای متعددی را پیش بارگذاری میکنید، به تعداد فونتها و وزن کلی آنها توجه کنید تا تأثیر منفی بر عملکرد صفحه نگذارند.
با اجرای این روشها، مبرای استفاده از فونتهای محلی یا پیش بارگذاری فونتهای وب، شما میتوانید از روشهای زیر استفاده کنید:
استفاده از فونتهای محلی
برای استفاده از فونتهای محلی، شما میتوانید در تعریف @font-face
در CSS خود، فونتهایی را که قبلاً بر روی دستگاه کاربر نصب شدهاند را مشخص کنید. مثال زیر نشاندهندهی نحوهی استفاده از فونت محلی Arial
است:
body {
font-family: Arial, sans-serif;
}
در این مثال، اگر فونت Arial
بر روی دستگاه کاربر موجود باشد، مرورگر از آن استفاده خواهد کرد و در غیر این صورت به فونت پیشفرض sans-serif
سوئیچ میکند.
پیش بارگذاری فونتهای وب
برای پیش بارگذاری فونتها، شما میتوانید از تگ link
با rel="preload"
در HTML خود استفاده کنید. این کار به مرورگر میگوید که فونت مورد نظر باید زودتر و با اولویت بیشتری بارگذاری شود. مثال زیر نحوهی پیش بارگذاری یک فونت وب را نشان میدهد:
<link rel="preload" href="/path/to/font.woff2" as="font" type="font/woff2" crossorigin="anonymous">
با اضافه کردن این خط در بخش head
HTML، فونت قبل از بارگذاری کامل CSS بارگذاری خواهد شد و در نتیجه تأخیر کمتری در رندر صفحه ایجاد میکند.
نکات مهم برای بهبود عملکرد
- مطمئن شوید که فونتهایی را که پیش بارگذاری میکنید واقعاً استفاده میشوند تا منابع بیمورد بارگذاری نشوند.
- استفاده از
crossorigin="anonymous"
زمانی ضروری است که فونتها از یک دامنهی متفاوت با دامنهی اصلی درخواست میشوند (از CORS استفاده میکنند). - فونتها را فشردهسازی کنید (مثلاً با استفاده از فرمتهای WOFF2) تا حجم فایلها کمتر شود و بارگذاری سریعتر صورت گیرد.
- اگر فونتهای متعددی را پیش بارگذاری میکنید، به تعداد فونتها و وزن کلی آنها توجه کنید تا تأثیر منفی بر عملکرد صفحه نگذارند.
چگونه اسکریپتها و CSSهایی که رندر را مسدود میکنند را بهینهسازی کنیم؟
برای بهینهسازی اسکریپتها و CSSهایی که رندر صفحه وب را مسدود میکنند، راهکارهای مختلفی وجود دارد. این روشها به کاهش تأثیر منفی منابعی که باید قبل از نمایش صفحه بارگذاری شوند، کمک میکنند. در ادامه چند توصیه برای بهینهسازی این منابع آورده شده است:
برای CSS:
- کاهش حجم CSS:
- از ابزارهای فشردهسازی مانند Clean-CSS یا cssnano برای کم کردن حجم فایلهای CSS استفاده کنید.
- حذف CSSهای اضافی که استفاده نمیشوند با استفاده از ابزارهایی مانند PurifyCSS یا UnCSS.
- استفاده از CSS Critical Path:
- فقط CSSهایی که برای رندر اولیه صفحه نیاز است (CSS مسیر بحرانی) را در قسمت
head
قرار دهید و بقیه را به صورت غیرهمزمان بارگذاری کنید.
- بارگذاری غیرهمزمان:
- استفاده از
media
attributes برای جلوگیری از بارگذاری CSSهایی که مربوط به شرایط خاصی هستند (مثلاً چاپ یا صفحهنمایشهای با عرض خاص). - استفاده از
preload
برای بارگذاری پیشفرض CSSهای مهم درhead
.
برای JavaScript:
- بارگذاری غیرهمزمان یا به تأخیر افتاده:
- استفاده از
async
یاdefer
در تگ<script>
برای جلوگیری از مسدود شدن رندر توسط جاوااسکریپت. async
برای اسکریپتهایی که وابستگی به سایر اسکریپتها یا DOM ندارند.defer
برای اسکریپتهایی که باید پس از بارگذاری و تجزیهی DOM اجرا شوند.
- مدیریت وابستگیها:
- اطمینان حاصل کنید که اسکریپتها در ترتیب صحیح بارگذاری میشوند، خصوصاً اگر از
async
استفاده میکنید.
- کاهش حجم JavaScript:
- استفاده از ابزارهای فشردهسازی و مینیفای مانند UglifyJS یا Terser برای کاهش حجم اسکریپتها.
- شکستن اسکریپتها به باندلهای کوچکتر:
- تقسیم کد JavaScript به بخشهای کوچکتر و بارگذاری آنها به صورت پویا با استفاده از تکنیکهایی مانند CodeSplitting و Dynamic Imports در ماژولهای جاوااسکریپت (ES Modules).
- استفاده از Service Workers:
- استفاده از Service Workers برای کش کردن اسکریپتها و دیگر منابع در مرورگر کاربران که میتواند زمان بارگذاری را در بازدیدهای بعدی به شدت کاهش دهد.
- Tree Shaking:
- در فرآیند ساخت، “Tree Shaking” را اجرا کنید تا کدهای غیراستفاده شده حذف شوند و فقط کدهایی که واقعاً مورد نیاز هستند بستهبندی و ارائه شوند.
- استفاده از Webpack یا ابزارهای مشابه:
- ابزارهایی مانند Webpack، Rollup، یا Parcel را برای بهینهسازی و ترکیب منابع استفاده کنید.
بهینهسازی اسکریپتها و CSSهایی که رندر را مسدود میکنند فرآیندی است که ممکن است نیاز به انجام تستهای متعدد و تنظیمات دقیق داشته باشد تا بهترین عملکرد را بدست آورید. استفاده از ابزارهایی نظیر Google PageSpeed Insights، Lighthouse، و WebPageTest میتواند در ارزیابی عملکرد صفحه و شناسایی فرصتهای بهینهسازی کمککننده باشد.
استفاده از تکنیکهای Lazy Loading برای محتوایی که نیازی به بارگذاری فوری ندارد چطور است ؟
Lazy Loading یک تکنیک مفید برای بهبود عملکرد صفحات وب است، در این آموزش سئو مهتک خواهیم گفت چرا که باعث میشود محتوایی که نیازی به بارگذاری فوری ندارد، تنها زمانی بارگذاری شود که کاربر به آن محتوا نیاز پیدا کند. این روش میتواند بار شبکه و زمان لود صفحه را کاهش دهد. در زیر به چند روش برای پیادهسازی Lazy Loading اشاره شده است:
تصاویر و ویدئوها
برای تصاویر و ویدئوها، میتوانید از loading="lazy"
استفاده کنید که یک ویژگی بومی HTML است و در اکثر مرورگرهای مدرن پشتیبانی میشود.
<img src="example.jpg" loading="lazy" alt="توضیح تصویر">
<iframe src="video-player.html" loading="lazy"></iframe>
این ویژگی به مرورگر اجازه میدهد تا تصویر یا iframe را تنها زمانی بارگذاری کند که کاربر به آن نزدیک شود.
اسکریپتها
برای اسکریپتها، میتوانید از ویژگیهای async
یا defer
استفاده کنید که بارگذاری اسکریپت را تا پس از تجزیه DOM به تأخیر میاندازند:
<script src="example.js" defer></script>
محتوای سفارشی یا سایر منابع
برای محتوای دیگر مانند دادههایی که باید از API بارگیری شوند یا کامپوننتهایی که باید به صورت تنبل بارگذاری شوند، میتوانید از JavaScript بهره ببرید:
- Intersection Observer API: این API به شما اجازه میدهد تا یک callback را زمانی اجرا کنید که یک المان خاص وارد محدوده نمایش کاربر میشود.
let observer = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
// بارگذاری محتوا
entry.target.src = entry.target.dataset.src;
observer.unobserve(entry.target);
}
});
}, {rootMargin: "0px", threshold: 0.1});
document.querySelectorAll("[data-src]").forEach(img => {
observer.observe(img);
});
- Dynamic Imports: برای بارگذاری ماژولها یا کامپوننتها به صورت تنبل در JavaScript، میتوانید از dynamic imports استفاده کنید.
window.addEventListener('scroll', async () => {
if (window.scrollY > 1000) { // فرض بر اینکه بعد از اسکرول 1000px باید بارگذاری انجام شود
const module = await import('./lazy-module.js');
module.load();
}
});
استفاده از این تکنیکها به کاهش زمان بارگذاری اولیه صفحه کمک میکند و تجربه کاربری بهترLazy Loading یک تکنیک مفید برای بهبود عملکرد صفحات وب است، چرا که باعث میشود محتوایی که نیازی به بارگذاری فوری ندارد، تنها زمانی بارگذاری شود که کاربر به آن محتوا نیاز پیدا کند. این روش میتواند بار شبکه و زمان لود صفحه را کاهش دهد. در زیر به چند روش برای پیادهسازی Lazy Loading اشاره شده است:
تصاویر و ویدئوها
برای تصاویر و ویدئوها، میتوانید از loading="lazy"
استفاده کنید که یک ویژگی بومی HTML است و در اکثر مرورگرهای مدرن پشتیبانی میشود.
<img src="example.jpg" loading="lazy" alt="توضیح تصویر">
<iframe src="video-player.html" loading="lazy"></iframe>
این ویژگی به مرورگر اجازه میدهد تا تصویر یا iframe را تنها زمانی بارگذاری کند که کاربر به آن نزدیک شود.
اسکریپتها
برای اسکریپتها، میتوانید از ویژگیهای async
یا defer
استفاده کنید که بارگذاری اسکریپت را تا پس از تجزیه DOM به تأخیر میاندازند:
<script src="example.js" defer></script>
محتوای سفارشی یا سایر منابع
برای محتوای دیگر مانند دادههایی که باید از API بارگیری شوند یا کامپوننتهایی که باید به صورت تنبل بارگذاری شوند، میتوانید از JavaScript بهره ببرید:
- Intersection Observer API: این API به شما اجازه میدهد تا یک callback را زمانی اجرا کنید که یک المان خاص وارد محدوده نمایش کاربر میشود.
let observer = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
// بارگذاری محتوا
entry.target.src = entry.target.dataset.src;
observer.unobserve(entry.target);
}
});
}, {rootMargin: "0px", threshold: 0.1});
document.querySelectorAll("[data-src]").forEach(img => {
observer.observe(img);
});
- Dynamic Imports: برای بارگذاری ماژولها یا کامپوننتها به صورت تنبل در JavaScript، میتوانید از dynamic imports استفاده کنید.
window.addEventListener('scroll', async () => {
if (window.scrollY > 1000) { // فرض بر اینکه بعد از اسکرول 1000px باید بارگذاری انجام شود
const module = await import('./lazy-module.js');
module.load();
}
});
استفاده از این تکنیکها به کاهش زمان بارگذاری اولیه صفحه کمک میکند و تجربه کاربری بهتر ارمغان می آورد.