بعد از اینکه یک کانتینر جدید در Google Tag Manager (یا به اختصار GTM) ایجاد میکنید، باید دو قطعه کد را در وبسایت خود قرار دهید: یکی در بخش <head>
و دیگری بلافاصله پس از باز شدن تگ <body>
.
اما تا حالا از خودتان پرسیدهاید چرا دو کد؟ چرا فقط یکی کافی نیست؟ اغلب ابزارهای تحلیل داده مثل Google Analytics یا Mixpanel از شما میخواهند فقط یک کد را در تمامی صفحات وبسایت قرار دهید. اما در گوگل تگ منیجر قضیه کمی متفاوت است و این دو بخش کاربردهای خاص خود را دارند. در ادامه، بهطور مشخص درباره تگ <noscript>
و دلیل استفاده (یا حتی عدم نیاز به آن) صحبت خواهیم کرد.
بررسی کدهای نصب گوگل تگ منیجر روی سایت
احتمالاً تصویر زیر برای نصب گوگل تگ منیجر برایتان آشناست:
در اینجا، قطعه اول کد (که معمولاً شامل <script>
است)، قلب تپندهی گوگل تگ منیجر محسوب میشود. هرچه این کد را در جای بالاتری از HTML قرار دهید (مثلاً در <head>
)، زودتر بارگذاری میشود و در نتیجه تگهای بازاریابی و ردیابی نیز زودتر فعال میشوند. این یعنی اطلاعات دقیقتری از رفتار کاربران بهدست میآورید.
این قطعهی اصلی وظایف مهمی را بر عهده دارد:
ایجاد Data Layer، فعالسازی triggerها، اجرای tagها و مدیریت کل فرآیند ردیابی در سایت.
بدون این اسکریپت، عملاً هیچکدام از قابلیتهای GTM کار نخواهد کرد.
اما تگ <noscript>
چطور؟ واقعاً لازم است؟
حالا برسیم به کد دوم؛ یعنی تگ <noscript>
. این قسمت ماجرا کاملاً متفاوت است. شاید تعجب کنید اگر بگویم در بسیاری از مواقع اصلاً نیازی به آن ندارید.
بر اساس تجربیاتی که از بررسی صدها کانتینر GTM بهدست آمده، میتوان گفت بیش از ۹۵٪ از کاربران معمولی و بازاریابان روزمره (البته این آمار کمی اغراقآمیزه 😉)، عملاً هیچ نیازی به <noscript>
ندارند. با این حال، چون گوگل آن را پیشنهاد داده، خیلیها بدون بررسی از آن استفاده میکنند.
چرا بسیاری از افراد همچنان از noscript استفاده میکنند؟
- چون در راهنمای گوگل آمده است.
- چون احساس میکنند ممکن است برای کاربرانی که جاوااسکریپت را غیرفعال کردهاند مفید باشد.
- چون نمیخواهند ریسک نادیده گرفتن یک پیشنهاد رسمی را بپذیرند.
اما واقعیت این است که اگر سایت شما برای کاربران ایرانی طراحی شده و اکثر کاربران از مرورگرهای بهروز استفاده میکنند (که جاوااسکریپت را پشتیبانی میکنند)، احتمال اینکه به <noscript>
نیاز داشته باشید بسیار کم است.
تگ noscript در Google Tag Manager دقیقاً چطور کار میکند؟
وقتی جاوااسکریپت غیرفعال باشد، چه اتفاقی میافتد؟
قابل توجه آنهایی که فکر میکنند جاوااسکریپت فقط برای جلوههای بصری سایتهاست: خاموش کردن جاوااسکریپت میتواند عملکرد بخشهای اساسی بسیاری از وبسایتها را مختل کند.
آمار دقیقی در دست نیست که چه تعداد کاربر اینترنت با جاوااسکریپت غیرفعال وبگردی میکنند، اما واقعیت این است که این تعداد احتمالاً بسیار اندک است. اگر شک دارید، فقط کافیست برای چند دقیقه جاوااسکریپت مرورگر خود را غیرفعال کرده و وارد وبسایتهای موردعلاقهتان شوید.
🔍 نتیجه؟
بسیاری از بخشهای سایت نه تنها ظاهرشان تغییر میکند، بلکه عملکردشان به کلی مختل میشود. از انیمیشنهای گرافیکی بگذریم، حتی قابلیتهایی مثل ذخیره کوکیها، بارگذاری برخی فرمها یا حتی ارسال اطلاعات آماری نیز از کار میافتند. در چنین محیطی، امکانات وب تا حد زیادی از بین میرود.
چرا کد دوم در Google Tag Manager داخل تگ <noscript>
قرار دارد؟
پاسخ ساده است: این کد زمانی فعال میشود که جاوااسکریپت مرورگر خاموش باشد.
تگ <noscript>
در واقع راهحلی برای مواقعی است که جاوااسکریپت غیرفعال است. وقتی مرورگر صفحهای را بدون جاوااسکریپت باز میکند، این تگ وارد عمل میشود و یک iFrame را بارگذاری میکند.
iFrame چیست و چرا مهم است؟
iFrame یک قاب درونصفحهای (Inline Frame) است که اجازه میدهد یک سند HTML دیگر، در دل صفحه فعلی بارگذاری شود. بسیاری از ابزارهای آنلاین از iFrame استفاده میکنند؛ از جمله:
- نمایش تبلیغات Google AdSense
- فرمهای ثبتنام یا عضویت
- بارگذاری محتوای خارجی از منابع دیگر
در سناریوی بدون جاوااسکریپت، این iFrame فعال شده و تگهایی که داخل آن تعریف شدهاند، اجرا میشوند. این یعنی حتی در نبود JS، همچنان امکان ردیابی یا ارسال داده وجود دارد — البته نه به شکل کامل.
یک استثنا: تنها نوع تگی که در نبود جاوااسکریپت پشتیبانی میشود
در حالتی که JS غیرفعال است، فقط یک نوع تگ در GTM قابل استفاده است: Custom Image Tag یا تگ تصویری سفارشی.
این تگ یک درخواست برای بارگذاری یک تصویر به آدرسی خاص ارسال میکند، اما نکته اینجاست که با همین درخواست ساده، اطلاعاتی به سرور مقصد ارسال میشود.
مثلاً فرض کنید تصویری با URL زیر درخواست شود:
arduinoCopyEdithttps://www.example.com/something?parameter1=good¶meter2=123
سرور دریافتکننده، مقادیر parameter1
و parameter2
را پردازش کرده و ممکن است آنها را به عنوان یک رویداد ثبت کند (مثلاً در Google Analytics).
بنابراین حتی بدون جاوااسکریپت، این تگ میتواند اطلاعاتی مثل آدرس صفحه، شناسه کاربر، یا هر پارامتر دلخواه دیگر را به سرور ارسال کند.
البته محدودیتهایی هم وجود دارد
اگرچه Custom Image Tag یک راهحل ساده و سریع به نظر میرسد، اما محدودیتهایی هم دارد. شما نمیتوانید با آن تعاملات پیچیده یا سناریوهای چندمرحلهای را ردیابی کنید. همچنین ابزارهای تحلیلی پیشرفتهتر به دادههای دقیقتری نیاز دارند که تنها با جاوااسکریپت قابل جمعآوریاند.
محدودیتهای Google Tag Manager زمانی که JavaScript غیرفعال است
اگر در مرورگر کاربر جاوااسکریپت غیرفعال باشد، بسیاری از قابلیتهای Google Tag Manager (GTM) عملاً از کار میافتند. فراموش کنید که بتوانید رویدادهایی مثل ارسال فرمها، ردیابی ویدیوهای YouTube، اسکرول صفحه یا هر نوع تعامل کاربر را ثبت کنید. در چنین شرایطی فقط نوع خاصی از تریگرها (Trigger) فعال خواهند بود؛ یعنی:
- Pageview
- DOM Ready
- Window Loaded
متأسفانه هیچ راهحل یا ترفند فنی برای عبور از این محدودیت وجود ندارد؛ چرا که اجرای این موارد مستقیماً به فعال بودن JavaScript وابسته است.
وضعیت متغیرها (Variables) در حالت غیرفعال بودن JavaScript
اغلب متغیرهایی که در Google Tag Manager استفاده میکنیم، زمانی که جاوااسکریپت خاموش است، کارایی خاصی ندارند. در ادامه، یک جدول راهنمای ساده از متغیرهای GTM آماده کردهایم که نشان میدهد کدامها بدون JavaScript همچنان قابل استفادهاند:
نام متغیر داخلی (Built-in Variables) | قابل استفاده بدون JS؟ | توضیحات |
---|---|---|
Click Element, Click ID, … | ❌ | ردیابی کلیکها نیازمند JS است |
Container ID, Version, Debug Mode | ✅ | بدون JS هم در دسترساند |
Event | ⚠️ محدود | فقط رویدادهای مرتبط با بارگذاری صفحه |
Page URL, Page Path, Hostname | ✅ | اطلاعات از خود مرورگر قابل دریافت است |
Referrer | ❌ | به JS نیاز دارد |
… | … | … |
🔍 توجه: متغیرهایی مثل “Data Layer Variable” بهصورت جزئی کار میکنند؛ به شرطی که بهصورت پارامتر URL در صفحه قرار داده شوند.
چه زمانی باید از تگ <noscript>
در GTM استفاده کنیم؟
در برخی شرایط خاص، باید کدی که در تگ <noscript>
ارائه میشود را در وبسایت خود قرار دهید:
- اگر قصد دارید رفتار بازدیدکنندگانی که جاوااسکریپت را غیرفعال کردهاند نیز ردیابی کنید.
- یا اگر میخواهید مالکیت دامنه را در Google Search Console تأیید کنید و روش «تأیید با GTM» را انتخاب کردهاید.
- یا حتی اگر الان قصد استفاده ندارید، اما ممکن است در آینده نیاز پیدا کنید.
در غیر این صورت، استفاده از نسخه noscript GTM ضروری نیست و میتوانید بدون نگرانی آن را نادیده بگیرید.
سؤالات متداول درباره کد noscript در Google Tag Manager
اگر زمان کافی برای خواندن کل مقاله ندارید، این بخش برای شماست. در ادامه، رایجترین پرسشها درباره تگ <noscript>
در Google Tag Manager آورده شده که میتونه خیلی سریع به شما کمک کنه تا موضوع رو درک کنید:
۱. آیا بخش <noscript>
در کد GTM الزاماً باید داخل صفحه قرار بگیره؟
خیر. اگر نیازی به موارد زیر ندارید، میتونید این بخش رو نادیده بگیرید:
- ردیابی کاربران با مرورگرهایی که JavaScript در اونها غیرفعال شده
- تأیید مالکیت سایت در Google Search Console از طریق GTM
۲. آیا تگ <noscript>
فقط باید در بخش <body>
قرار بگیره؟
بله. تگ <noscript>
فقط باید در بخش <body>
استفاده بشه. از اونجایی که این تگ باعث بارگذاری یک iFrame میشه، و iFrame داخل <head>
مجاز نیست، قرار دادن noscript در <head>
باعث نامعتبر شدن کد سایت میشه.
۳. آیا همه تگها در صورت غیرفعال بودن JavaScript اجرا میشن؟
خیر. تقریباً هیچکدوم از تگها در این حالت فعال نمیشن، بهجز Custom Image Tag (تگ تصویر سفارشی).
۴. تکلیف Data Layer چی میشه وقتی JavaScript غیرفعال باشه؟
Data Layer کاملاً وابسته به JavaScript هست. پس وقتی JS غیرفعاله، Data Layer کار نمیکنه؛ مگر اینکه یک توسعهدهنده لینک iframe رو با پارامترهای خاصی (query string) تنظیم کنه.
۵. آیا در Custom Image Tag میشه از متغیرهای Data Layer استفاده کرد؟
در حالت عادی خیر. اگر فقط تگ noscript رو توی سایت قرار بدید، متغیرهای Data Layer کار نمیکنن. اما اگه برنامهنویس هستید یا به یکی دسترسی دارید، میتونید لینک داخل noscript رو با پارامترهای لازم سفارشی کنید. GTM اون پارامترها رو میخونه، البته اگه container شما شامل اون متغیرها باشه.
۶. وقتی JavaScript فعاله، آیا بخش <noscript>
هم فعال میشه؟
خیر. تا زمانی که JavaScript فعاله، noscript غیرفعاله و نادیده گرفته میشه.
۷. پس تگ Custom Image فقط زمانی کار میکنه که JS غیرفعاله؟
خیر. این تگ هم در حالت فعال بودن JavaScript و هم در حالت غیرفعال کار میکنه. وقتی JS فعاله، با <script>
اجرا میشه و وقتی JS خاموشه، از طریق <noscript>
اجرا میشه.
۸. چه triggerهایی در حالت غیرفعال بودن JS و فعال بودن noscript کار میکنن؟
فقط triggerهایی که مبتنی بر مشاهدهی صفحه هستن مثل:
- Page View
- DOM Ready
- Window Loaded
سایر triggerها در این حالت درست عمل نمیکنن.
۹. کدوم متغیرهای GTM با وجود غیرفعال بودن JavaScript هنوز کار میکنن؟
بهطور خلاصه، فقط متغیرهای مربوط به صفحه مثل Page Path و Page URL. همچنین متغیرهای کمکی مثل Container ID و حالت Debug، متغیرهای ثابت (Constant Variable) و عدد تصادفی (Random Number). لیست کامل در بخش «محدودیتهای GTM در حالت غیرفعال بودن JavaScript» موجوده.
۱۰. حالت Preview در GTM چی؟ اونم مبتنی بر JS هست؟ پس چطور اشکالزدایی کنیم؟
بله، حالت Preview هم مبتنی بر JavaScript هست و کار نمیکنه. برای دیباگ کردن، بهترین ابزار شما تب Network در مرورگره. جزئیات کامل در راهنمای مرتبط آورده شده.
۱۱. در Google Tag Assistant با این خطا مواجه میشم: gtm no-script code not found: either missing or not in <body>
. باید چیکار کنم؟
همونطور که در این مقاله توضیح داده شد، noscript برای عملکرد GTM ضروری نیست. شما فقط زمانی بهش نیاز دارید که بخواید:
- کاربران بدون JavaScript رو ردیابی کنید
- مالکیت سایت رو در Google Search Console تأیید کنید
در مورد Search Console، باید بلافاصله بعد از تگ <body>
، تگ noscript رو قرار بدید. برای ردیابی کاربران با JS غیرفعال، کافیه noscript رو هرجای بخش <body>
بگذارید.