سلام! من حسین محمودیام، کارشناس سئو در تیم «وزیر سئو». اگر تا حالا توی گزارشهای گوگل آنالیتیکس یا سرچ کنسول به فیلتر «Doesn’t match regex» برخورد کردی و دقیقاً مطمئن نبودی چطور کار میکنه یا چه فرقی با بقیه فیلترها داره، باید بگم که تنها نیستی. خیلی از ما اولش با این فیلتر کمی گیج میشیم.
ما معمولاً عادت داریم دنبال دادههایی بگردیم که مطابقت دارن، اما قدرت واقعی تحلیل حرفهای، در حذف کردن هوشمندانهی «نویزها» و دادههای بهدردنخوره. درک تفاوت فیلترهای Matches و Doesn’t Match دقیقاً کلید رسیدن به این سطح از تحلیله. توی این راهنمای عملی، میخوایم قدم به قدم یاد بگیریم که چطور از این ابزار قدرتمند برای تمیز کردن گزارشهامون و گرفتن تصمیمهای دقیقتر استفاده کنیم.
جدول مقایسه سریع: Matches Regex در برابر Doesn’t Match Regex
| ویژگی | Matches regex (مطابقت با الگو) | Doesn’t match regex (عدم مطابقت با الگو) |
|---|---|---|
| هدف اصلی | پیدا کردن (Include) | حذف کردن (Exclude) |
| معنی ساده | «فقط اینها رو بهم نشون بده» | «همهچیز رو نشون بده، به جز اینها» |
| مثال رایج | پیدا کردن فقط کوئریهای برند (الگو: برند من|brand) | حذف کردن کوئریهای برند برای دیدن فقط غیربرندها (الگو: برند من|brand) |
| سناریوی استفاده | وقتی دنبال یک گروه خاص و محدود هستید. | وقتی میخواهید «نویزها» (ترافیک تست، اسپم، برند) را از یک مجموعه داده بزرگ حذف کنید. |
ویژگی
Matches regex (مطابقت با الگو)
Doesn’t match regex (عدم مطابقت با الگو)
هدف اصلی
پیدا کردن (Include)
حذف کردن (Exclude)
معنی ساده
«فقط اینها رو بهم نشون بده»
«همهچیز رو نشون بده، به جز اینها»
مثال رایج
پیدا کردن فقط کوئریهای برند (الگو: برند من|brand)
حذف کردن کوئریهای برند برای دیدن فقط غیربرندها (الگو: برند من|brand)
سناریوی استفاده
وقتی دنبال یک گروه خاص و محدود هستید.
وقتی میخواهید «نویزها» (ترافیک تست، اسپم، برند) را از یک مجموعه داده بزرگ حذف کنید.
درک مفهوم “Doesn’t match regex”
فیلتر “Doesn’t match regex” دقیقاً چیست؟
راستش رو بخوای، این فیلتر یکی از ابزارهای قدرتمند (و گاهی کمی ترسناک!) توی جاهایی مثل گوگل سرچ کنسول یا گوگل آنالیتیکس هست.
به زبان خیلی ساده، «Doesn’t match regex» یعنی: «هر چیزی رو به من نشون بده، به جز اونهایی که با این الگوی خاصی که من تعریف میکنم مطابقت دارن.»
این دقیقاً نقطه مقابل فیلتر «Matches regex» (مطابقت با عبارت منظم) هست. اونجا دنبال الگو میگردیم، اینجا داریم الگو رو حذف (Exclude) میکنیم.
تعریف کوتاه RegEx (عبارات منظم) برای مبتدیان
اگر تا حالا با RegEx (مخفف Regular Expressions) کار نکردی، اصلاً نگران نباش.
فکر کن RegEx یک زبان کدنویسی خیلی فشرده است که برای «پیدا کردن الگوها» (Pattern Matching) توی متن استفاده میشه.
این با جستجوی عادی فرق داره. مثلاً:
جستجوی عادی (Contains): به دنبال کلمه «کفش» میگرده.
جستجویRegEx: میتونه به دنبال الگویی مثل کفش|کفاش|کفاشی (یعنی هر کدوم از این سه کلمه) یا ^کفش.*مردانه$ (یعنی متنی که با ‘کفش’ شروع بشه و به ‘مردانه’ ختم بشه) بگرده.
پس RegEx یک ابزار فوقالعاده دقیق برای تعریف الگوهای متنی هست.
تفاوت حیاتی بین “Doesn’t match regex” و “Does not contain”
اینجا دقیقاً همونجایی هست که خیلی از همکاران ما گیج میشن و درک تفاوتش خیلی در آنالیز دادهها مهمه.
“Does not contain” (شامل نمیشود): این فیلتر خیلی ساده است. فقط به دنبال یک رشته متن دقیق میگرده و هر چیزی که شامل اون رشته باشه رو حذف میکنه.
مثال: اگر فیلتر کنی «Does not contain ‘خرید’»، تمام URLها یا کوئریهایی که کلمه «خرید» رو دارن (مثل /خرید-گوشی/ یا /قیمت-خرید-لپتاپ/) حذف میشن.
“Doesn’t match regex” (با عبارت منظم مطابقت ندارد): این فیلتر به دنبال یک الگو میگرده و هر چیزی که با اون الگو مطابقت داشته باشه رو حذف میکنه.
مثال: فرض کن میخوای هم «خرید» و هم «فروش» رو از نتایجت حذف کنی.
با “Does not contain” نمیتونی این کار رو همزمان انجام بدی (باید دو تا فیلتر جدا بزنی).
اما با “Doesn’t match regex” میتونی الگوی خرید|فروش رو وارد کنی. (علامت | در RegEx به معنی «یا» هست).
حالا این فیلتر هر URL یا کوئری که شامل «خرید» یا «فروش» باشه رو حذف میکنه.
نکته کلیدی: “Does not contain” بر اساس «وجود یک متن ساده» فیلتر میکنه، در حالی که “Doesn’t match regex” بر اساس «مطابقت با یک الگوی پیچیده» (که میتونه شامل ‘یا’، ‘و’، الگوهای شروع/پایان متن و…) فیلتر میکنه.
چرا و چه زمانی باید از “Doesn’t match regex” استفاده کنیم؟
این فیلتر زمانی به کارت میاد که بخوای دادهها رو «تمیز» کنی و روی بخشهای خاصی متمرکز بشی. استفاده ازش برای «حذف کردن» (Excluding) نویزها، به مراتب قویتر از فیلترهای «شامل شدن» (Including) عمل میکنه.
قدرت در حذف چند شرطی (استفاده از اپراتور |)
این دقیقاً ستارهی درخشانِ RegEx و دلیل اصلی استفاده از «Doesn’t match» هست.
در زبان RegEx، علامت پایپ | (که معمولاً روی کیبورد بالای Enter قرار داره) به معنی «یا» (OR) هست.
سناریوی عملی (مثلاً در گوگل سرچ کنسول GSC):
فرض کن میخوای تمام کوئریهای غیربرند (Non-Brand) سایتت رو ببینی تا بفهمی در کلمات کلیدی اطلاعاتی چه جایگاهی داری. اسم برند تو «وزیر سئو» هست و میدونی که کاربرها اون رو به شکلهای «vazir seo» و «سایت وزیر سئو» هم جستجو میکنن.
به جای اینکه سه تا فیلتر جداگانه «Does not contain» بسازی، خیلی راحت یک فیلتر RegEx میزنی:
Filter: Custom (regex)
Type: Doesn’t match regex
Pattern: وزیر سئو|vazir seo|سایت وزیر سئو
نتیجه: سرچ کنسول در یک حرکت، تمام کوئریهایی که شامل «وزیر سئو» یا «vazir seo» یا «سایت وزیر سئو» باشن رو حذف میکنه. چیزی که باقی میمونه، لیست تمیز کوئریهای غیربرند تو هست.
پاکسازی دادهها و حذف ترافیک اسپم یا تست
این یکی از کارهای حیاتی در تحلیل داده است. اگر دادههات کثیف باشن (مثلاً بازدیدهای خودت یا تیم فنیات قاطی دادههای کاربر باشه)، تحلیلهات هم اشتباه از آب درمیاد.
سناریوی عملی (مثلاً در Google Analytics 4):
فرض کن تیم فنی شما روی سابدامین staging.example.com تست انجام میده. یا شاید خودت صفحاتی رو برای تست A/B با پارامتر ?test=true باز میکنی. تو میخوای گزارش صفحات (Pages) رو ببینی، بدون این بازدیدهای تستی.
میتونی یک فیلتر (Filter) در گزارش Exploration بسازی:
Dimension: Page path and screen class (یا Hostname)
Operator: Doesn’t match regex
Pattern: staging|test=true
نتیجه: آنالیتیکس تمام بازدیدهای صفحاتی که در URL اونها کلمه staging یا عبارت test=true وجود داشته باشه رو نادیده میگیره و تو داری دادههای واقعی کاربرانت رو میبینی.
ایجاد سگمنتهای مخاطب بسیار دقیق
گاهی وقتها سادهترین راه برای تعریف یک گروه خاص از مخاطبان، حذف کردن تمام گروههای دیگه است.
سناریوی عملی (مثلاً در Google Analytics 4 برای ساخت Audience):
فرض کن میخوای کاربرانی رو پیدا کنی که فقط با صفحات محصولات (Product) و دستهبندیها (Category) درگیر بودن، اما اصلاً وارد بلاگ نشدن. (چون میخوای رفتار کاربرانی که «قصد خرید» داشتن رو جداگانه تحلیل کنی).
میتونی یک سگمنت بسازی که در اون، Page Path (مسیر صفحه):
Operator: Doesn’t match regex
Pattern: /blog/
نتیجه: تو داری به آنالیتیکس میگی: «فقط کاربرانی رو به من نشون بده که در هیچکدام از بازدیدهای صفحاتشون، مسیری که شامل /blog/ باشه وجود نداشته.»
این کار بهت اجازه میده رفتار کاربرانی که «فقط» با صفحات تجاری (Commercial) سایت درگیر بودن رو به صورت ایزوله (جدا شده) بررسی کنی.
کاربرد گام به گام در Google Analytics (GA4 و Universal)
آموزش ساخت فیلتر “Doesn’t match regex” در بخش Explore (GA4)
خب، بریم سراغ بخش عملی کار در GA4. این فیلترها معمولاً در بخش Explore (کاوش) استفاده میشن، جایی که گزارشهای سفارشی خودمون رو میسازیم.
فرض کن میخوایم یک گزارش «Free form» بسازیم:
وارد بخش Explore در GA4 شو و یک گزارش «Free form» (فرم آزاد) باز کن.
دایمنشن (Dimension) مورد نظرت رو (مثلاً Page path and screen class برای آدرس صفحات یا Session source / medium برای منابع ترافیک) بکش و در بخش Rows (ردیفها) قرار بده.
حالا، در ستون «Variables» (متغیرها، ستون سمت چپ)، پایینتر از لیست Dimensions و Metrics، بخش Filters رو میبینی.
روی «Drop or select dimension or metric» کلیک کن و همون دایمنشنی که میخوای فیلتر کنی (مثلاً Page path and screen class) رو انتخاب کن.
در منوی «Select match type» (انتخاب نوع تطابق)، گزینه doesn’t match regex رو پیدا و انتخاب کن.
در کادر «Enter expression» (ورود عبارت)، الگوی RegEx خودت رو وارد کن.
روی دکمه Apply (اعمال) کلیک کن.
تمام! گزارشی که در سمت راست میبینی، الان بر اساس فیلتر «عدم تطابق» تو پاکسازی شده.
مثال عملی: حذف همزمان چند سورس ترافیک (Internal, Staging)
این یکی از رایجترین کارها برای تمیز کردن دادههای ترافیک هست. فرض کن نمیخوای بازدیدهایی که از سیستم تست (staging) یا ایمیلهای داخلی شرکت (مثلاً کمپین internal-email) میان رو توی گزارشت ببینی.
در بخش Filters (همونطور که بالا گفتم):
Dimension (دایمنشن): Session source / medium
Match type (نوع تطابق): doesn’t match regex
Expression (الگو): staging|internal-email
نتیجه: آنالیتیکس تمام سشنهایی که سورس/مدیوم اونها دقیقاً staging یا (به خاطر علامت |) internal-email باشه رو از این گزارش Explore تو حذف میکنه.
مثال عملی: فیلتر کردن تمام صفحات به جز یک دایرکتوری خاص
این سناریو کمی پیچیدهتره و قدرت واقعی RegEx رو نشون میده. فرض کن میخوای گزارش صفحاتت رو ببینی، اما اصلاً نمیخوای صفحات بخش ادمین (/admin/) یا صفحات بخش پشتیبانی (/support/) توی گزارش دیده بشن.
در بخش Filters:
Dimension (دایمنشن): Page path and screen class
Match type (نوع تطابق): doesn’t match regex
Expression (الگو): ^/admin/|^/support/
توضیح الگو:
علامت ^ در RegEx به معنی «شروع متن» هست. این کار دقت فیلتر رو خیلی بالا میبره تا مثلاً صفحهای مثل /blog/admin-tips/ رو به اشتباه حذف نکنه.
^/admin/: یعنی هر Page Path که با /admin/ شروع میشه.
|: یعنی «یا».
^/support/: یعنی هر Page Path که با /support/ شروع میشه.
نتیجه: این فیلتر، تمام صفحاتی که در این دو دایرکتوری هستن رو حذف میکنه و تو میتونی روی صفحات اصلی سایت (مثل بلاگ، محصولات و…) تمرکز کنی.
(برای کاربران قدیمی) پیادهسازی در فیلترهای View در Universal Analytics
یادش بخیر! هرچند Universal Analytics (UA) دیگه بازنشسته شده، اما درک منطق فیلترهاش هنوزم ارزشمنده. در UA، ما چیزی به اسم «View Filters» داشتیم.
این فیلترها برخلاف GA4، دادهها رو قبل از پردازش و برای همیشه تغییر میدادن (یا حذف میکردن). برای همین خیلی باید با احتیاط ازشون استفاده میکردیم.
برای پیادهسازی «Doesn’t match» در UA:
باید به بخش Admin -> View -> Filters میرفتی.
یک فیلتر جدید (Add Filter) میساختی.
Filter Type (نوع فیلتر) رو روی Custom (سفارشی) میذاشتی.
گزینه Exclude (حذف کردن) رو انتخاب میکردی.
در Filter Field (فیلد فیلتر)، مثلاً Request URI (برای URLها) یا Campaign Source (برای سورس ترافیک) رو انتخاب میکردی.
در Filter Pattern (الگوی فیلتر)، عبارت RegEx خودت رو مینوشتی (مثلاً: ^/admin/|^/support/).
تفاوت کلیدی: فیلتر Exclude در UA با الگوی RegEx، دقیقاً کار «doesn’t match regex» در GA4 Explore رو انجام میداد، با این تفاوت بزرگ که فیلتر UA دائمی بود و دادههای حذفشده هرگز برنمیگشتن؛ اما فیلتر GA4 Explore فقط روی همون گزارش اعمال میشه و هر وقت بخوای میتونی حذفش کنی.
پیادهسازی در Google Search Console (GSC)
چگونه کوئریهای برند (Brand) را فیلتر کنیم تا عبارات غیربرند را ببینیم؟
این یکی از پرکاربردترین و استراتژیکترین کارهاییه که میتونی توی سرچ کنسول انجام بدی. وقتی کوئریهای برند رو حذف میکنی، تازه میفهمی که عملکرد واقعی سئوی تو (مخصوصاً در کلمات کلیدی اطلاعاتی و بالای قیف) چطور بوده.
فرض کنیم اسم برند ما «وزیر سئو» هست و میدونیم که با املای «vazir seo» هم جستجو میشه.
وارد گزارش Performance (عملکرد) در GSC شو.
روی دکمه + New (جدید) در بالای فیلترها کلیک کن و Query (عبارت جستجو) رو انتخاب کن.
از منوی کشویی اول (که پیشفرض روی «Queries containing» هست)، گزینه Custom (regex) رو انتخاب کن.
در منوی کشویی دوم (که پیشفرض روی «Matches regex» هست)، اون رو به Doesn’t match regex تغییر بده.
حالا در کادری که باز میشه، الگوی خودت رو برای حذف تمام عبارات برند وارد کن. از | (پایپ به معنی «یا») استفاده میکنیم:
وزیر سئو|vazir seo
روی Apply (اعمال) کلیک کن.
نتیجه: الان گزارشی که میبینی شامل هیچکدام از کوئریهایی که «وزیر سئو» یا «vazir seo» رو در خودشون دارن، نیست. تو داری به عملکرد خالص «Non-Brand» سایتت نگاه میکنی.
حذف کردن چند زیرشاخه (Subfolder) یا پارامتر URL از گزارش
این کار برای تمرکز روی بخشهای خاصی از سایت عالیه. مثلاً میخوای عملکرد صفحاتت رو ببینی، به جز صفحات بلاگ و صفحات تگ.
در همون گزارش Performance، این بار روی تب Pages (صفحات) کلیک کن.
دوباره روی + New کلیک کن و این بار Page رو انتخاب کن.
دوباره فیلتر رو روی Custom (regex) و بعد Doesn’t match regex تنظیم کن.
فرض کن میخوای تمام URLهایی که با /blog/ شروع میشن یا شامل /tag/ هستن رو حذف کنی. الگو این میشه:
/blog/|/tag/
(نکته: در GSC، الگوهای RegEx به صورت “Partial Match” عمل میکنن، یعنی اگر الگو در هر جای URL پیدا بشه، مطابقت داره. پس اگر بخوایم دقیقتر باشیم و فقط شروع URL رو چک کنیم، میتونیم از ^ استفاده کنیم، اما برای سادگی، همین الگو هم کار میکنه.)
مثال حذف پارامتر (Parameter):
شاید URLهای تو پارامترهای مختلفی مثل ?source=email دارن که گزارش رو کثیف میکنه.
الگو: ?source=
(نکته: چون علامت ? در RegEx یک کاراکتر ویژه است، قبلش یک بکاسلش میذاریم تا به GSC بگیم منظورمون خودِ علامت سواله، نه دستور RegEx.)
مقایسه “Custom (regex)” با فیلترهای پیشفرض GSC
درک این تفاوت، کلید استفاده حرفهای از GSC هست:
| نوع فیلتر | کاربرد | محدودیت |
|---|---|---|
| Does not contain (شامل نمیشود) | ساده و سریع. فقط یک رشته متن ساده رو حذف میکنه. | فقط میتونی یک عبارت رو حذف کنی. (مثلاً: حذف «وزیر سئو») |
| Doesn’t match regex (مطابقت ندارد) | قدرتمند و انعطافپذیر. بر اساس یک الگو حذف میکنه. | نیاز به درک اولیه از RegEx داره (حداقل درک ` |
نوع فیلتر
کاربرد
محدودیت
Does not contain (شامل نمیشود)
ساده و سریع. فقط یک رشته متن ساده رو حذف میکنه.
فقط میتونی یک عبارت رو حذف کنی. (مثلاً: حذف «وزیر سئو»)
Doesn’t match regex (مطابقت ندارد)
قدرتمند و انعطافپذیر. بر اساس یک الگو حذف میکنه.
نیاز به درک اولیه از RegEx داره (حداقل درک `
تفاوت اصلی کجاست؟
اگر بخوای «وزیر سئو» و «vazir seo» رو حذف کنی، با فیلتر “Does not contain” نمیتونی. چون اگر بزنی “Does not contain: وزیر سئو”، باز هم “vazir seo” در نتایج میمونه. باید دو تا فیلتر جداگانه “Does not contain” اعمال کنی (که در GSC ممکنه پیچیده بشه یا اصلاً نشه).
اما با “Doesn’t match regex”، به راحتی الگوی وزیر سئو|vazir seo رو میدی و GSC هر دو رو در یک حرکت حذف میکنه.
پس هر وقت نیاز به حذف «چند شرطی» (OR) داشتی، «Doesn’t match regex» تنها راه حل توئه.
استفاده از “Doesn’t match regex” در Looker Studio (Data Studio)
لوکر استودیو (یا همون دیتا استودیو قدیمی) جاییه که قدرت RegEx واقعاً خودش رو نشون میده، چون به ما اجازه میده دادهها رو قبل از نمایش، کاملاً تمیز و دستهبندی کنیم.
ایجاد فیلتر در سطح چارت (Chart-level)
این سادهترین راه برای حذف دادههای ناخواسته از فقط یک نمودار یا جدول خاص هست.
چارتی (مثلاً یک جدول) که میخوای فیلتر کنی رو انتخاب کن.
در پنل Setup (تنظیمات) در سمت راست، به پایین اسکرول کن تا به بخش Filter برسی.
روی Add a filter (افزودن فیلتر) کلیک کن.
در پنجرهای که باز میشه، روی Create a filter (ایجاد فیلتر) کلیک کن.
یک اسم برای فیلترت بذار (مثلاً: «حذف صفحات ادمین»).
شرط رو روی Exclude (حذف کردن) تنظیم کن.
در «Select a field» (انتخاب فیلد)، دایمنشنی که میخوای فیلتر بشه رو انتخاب کن (مثلاً Page path).
در «Select a condition» (انتخاب شرط)، گزینه RegExp Match (مطابقت با عبارت منظم) رو انتخاب کن.
الگوی خودت رو وارد کن (مثلاً: ^/admin/|/login/).
نتیجه: این جدول خاص، دیگه هیچ صفحهای که با /admin/ شروع بشه یا شامل /login/ باشه رو نشون نمیده.
نکته مهم: در لوکر استودیو، ما مستقیماً گزینهی «Doesn’t match regex» رو نداریم. به جاش، از ترکیب Exclude + RegExp Match استفاده میکنیم که دقیقاً همون کار رو انجام میده.
ساخت فیلتر در سطح گزارش (Report-level) برای پاکسازی کلی دادهها
این روش خیلی قدرتمندتره. وقتی یک فیلتر در سطح گزارش (یا بهتره بگیم، در سطح «منبع داده» یا Data Source) میسازی، اون فیلتر روی تمام چارتهایی که از اون منبع داده استفاده میکنن اعمال میشه. این برای پاکسازیهای اساسی (مثل حذف ترافیک تست) عالیه.
از منوی بالا به Resource (منبع) -> Manage added data sources (مدیریت منابع داده اضافهشده) برو.
جلوی منبع دادهای که میخوای تمیزش کنی (مثلاً دیتاسورس GA4 یا GSC)، روی Edit (ویرایش) کلیک کن.
در بالای صفحه، روی Add a filter (افزودن فیلتر) کلیک کن.
مراحل دقیقاً مثل بالا هستن:
یک اسم انتخاب کن (مثلاً: «حذف ترافیک تست سراسری»).
Exclude رو انتخاب کن.
فیلد مورد نظر رو انتخاب کن (مثلاً Hostname یا Session source).
شرط رو روی RegExp Match بذار.
الگو رو وارد کن (مثلاً: staging.example.com|internal-test).
ذخیره کن و به گزارش برگرد.
نتیجه: کل گزارش تو الان تمیز شده و هیچ دادهای از اون هاستنیم (staging) یا اون سورس (internal-test) در هیچ چارتی نمایش داده نمیشه.
ترکیب با تابع CASE برای دستهبندی پیشرفته
اینجا دیگه سطح حرفهای کار با داده است. به جای حذف دادهها، ما اونها رو با استفاده از RegEx دستهبندی میکنیم. این کار با ساختن یک «فیلد محاسباتی» (Calculated Field) و تابع CASE انجام میشه.
تابع کلیدی اینجا REGEXP_MATCH هست. وقتی ما میخوایم «Doesn’t match regex» رو شبیهسازی کنیم، از NOT REGEXP_MATCH استفاده میکنیم.
سناریوی عملی: دستهبندی کوئریهای GSC به “Brand” و “Non-Brand“
در پنل Data Source (همونجایی که فیلتر میساختی) یا مستقیماً در پنل Setup چارت، روی Add a field (افزودن فیلد) کلیک کن.
یک اسم برای فیلد جدید بذار (مثلاً: «گروهبندی برند»).
این فرمول رو در کادر Formula وارد کن (فرض کنیم برند ما «وزیر سئو» و «vazir seo» هست):
SQL
CASE
WHEN REGEXP_MATCH(Query, “.*(وزیر سئو|vazir seo).*”) THEN “Brand”
ELSE “Non-Brand”
END
توضیح:
CASE: شروع شرط.
WHEN REGEXP_MATCH(Query, “.*(وزیر سئو|vazir seo).*”): اگر فیلد Query (کوئری) شامل «وزیر سئو» یا «vazir seo» بود…
THEN “Brand”: …اون رو «Brand» اسمگذاری کن.
ELSE “Non-Brand”: در غیر این صورت (یعنی اگر مطابقت نداشت)، اون رو «Non-Brand» اسمگذاری کن.
نتیجه: تو الان یک دایمنشن (Dimension) کاملاً جدید به اسم «گروهبندی برند» داری که میتونی اون رو توی جدولها و نمودارهات بکشی و ببینی که چند درصد کلیکها یا ایمپرشنهات برای برند بوده و چند درصد برای غیربرند. این خیلی قدرتمندتر از حذف کردن سادهی دادههاست.
ترفندهای پیشرفته و مثالهای تجربی
استفاده از متاکاراکترها (مانند ^ و $) برای عدم تطبیق دقیق
اینجاست که RegEx واقعاً قدرتمند میشه. متاکاراکترها (Metacharacters) به ما اجازه میدن که موقعیت الگو رو هم مشخص کنیم.
^ (Caret): این کاراکتر به RegEx میگه الگو فقط باید در ابتدای متن (String) پیدا بشه.
$ (Dollar sign): این کاراکتر میگه الگو فقط باید در انتهای متن پیدا بشه.
چرا این در “Doesn’t match” مهمه؟
فرض کن میخوای تمام صفحات بلاگ (/blog/) رو حذف کنی.
الگوی ضعیف: Doesn’t match regex: /blog/
مشکل: این الگو صفحهی /services/my-new-blog/ رو هم حذف میکنه، چون عبارت /blog/ درون اون وجود داره، هرچند با اون شروع نشده.
الگوی قوی (پیشرفته): Doesn’t match regex: ^/blog/
نتیجه: این الگو فقط صفحاتی رو حذف میکنه که دقیقاً با /blog/ شروع میشن. اون صفحهی /services/my-new-blog/ دیگه حذف نمیشه و در گزارش تو باقی میمونه، چون شروعش با /services/ هست.
همین منطق برای $ هم وجود داره. مثلاً .pdf$ (که . رو هم escape کردیم) یعنی: هر چیزی که دقیقاً به .pdf ختم میشه.
مثال: حذف تمام URLهایی که با پارامتر ?test= شروع میشوند
این یکی از رایجترین کارها برای تمیز کردن دادههای تست از گزارشهای آنالیتیکس یا سرچ کنسول هست.
چالش: ما میخوایم هر URLی که پارامتر ?test= رو داره (مثلاً: /my-page?test=true یا /product?test=abc) حذف کنیم.
تلهی رایج: علامت سوال ? در RegEx یک متاکاراکتر (به معنی “صفر یا یکی از کاراکتر قبلی”) هست. اگر فقط بنویسی ?test=، الگو درست کار نمیکنه.
راه حل (Escaping): ما باید به RegEx بگیم که منظورمون خودِ کاراکتر «علامت سوال» هست، نه دستور RegEx. این کار رو با گذاشتن یک بکاسلش () قبل از اون انجام میدیم.
فیلتر صحیح:
Type: Doesn’t match regex
Pattern: ?test=
نتیجه: این الگو به درستی هر URLی که شامل رشتهی متنی ?test= باشه رو پیدا میکنه و از گزارش تو حذف (Exclude) میکنه.
چطور عباراتی که شامل کاراکترهای خاص RegEx هستند را فیلتر کنیم (Escaping)
همونطور که در مثال ? دیدیم، خیلی از کاراکترها در RegEx معنی خاصی دارن. به اینها «متاکاراکتر» (Metacharacters) گفته میشه.
کاراکترهای خاص رایج: . ? + * ( ) [ ] |
مشکل: اگر بخوای عبارتی رو فیلتر کنی که خودش شامل این کاراکترهاست (مثلاً اسم برندت Site.com هست)، RegEx گیج میشه.
مثال تجربی: فرض کن میخوای کوئری برند site.com رو حذف کنی.
الگوی اشتباه: Doesn’t match regex: site.com
چرا اشتباهه؟ چون . (نقطه) در RegEx یعنی «هر کاراکتری». این الگو نه تنها site.com رو حذف میکنه، بلکه siteAcom، site-com و siteBcom رو هم (به اشتباه) حذف میکنه!
راه حل (Escaping): باید اون کاراکتر خاص رو با «خنثی» یا «Escape» کنیم.
الگوی صحیح: Doesn’t match regex: site.com
نتیجه: با اضافه کردن ، به RegEx میگیم که منظور ما دقیقاً خودِ کاراکتر «نقطه» هست، نه متاکاراکترِ «هر کاراکتری».
اشتباهات رایج که باید از آنها اجتناب کنید (Trustworthiness)
وقتی با ابزار قدرتمندی مثل RegEx کار میکنیم، پتانسیل خطا هم به همون اندازه بالا میره. یک اشتباه کوچک در الگوی RegEx میتونه تمام تحلیل ما رو زیر سوال ببره و «اعتماد» (Trust) ما به دادهها رو از بین ببره. اینجا چندتا از رایجترین تلههایی که خودم تجربه کردم و باید حتماً ازشون دوری کنی رو بررسی میکنیم.
خطر فیلتر کردن تصادفی تمام دادهها
این یکی از اون تلههای کلاسیک هست که معمولاً وقتی اتفاق میفته که از متاکاراکترهای خیلی «باز» (Broad) مثل . (نقطه) یا .* (نقطه-ستاره) در جای اشتباهی استفاده میکنیم.
سناریوی فاجعه: فرض کن میخوای فقط صفحهی اصلی (Homepage) که به صورت / (اسلش خالی) نشون داده میشه رو حذف کنی.
الگوی اشتباه: Doesn’t match regex: /
چه اتفاقی میفته؟ چون تقریباً تمام URLهای سایت تو (مثل /blog/ و /services/) شامل کاراکتر / هستن، این فیلتر «نمیتواند با / مطابقت داشته باشد» تقریباً برای هیچ URLی صادق نیست و در نتیجه، تمام دادههای تو حذف میشه! (چون همهشون با / مطابقت دارن و فیلتر ما “Doesn’t match” بود).
گزارشی که «صفر» نشون میده، نه تنها مفید نیست، بلکه اعتماد ما به کل سیستم گزارشدهی رو خدشهدار میکنه.
تست کردن عبارت RegEx قبل از اعمال نهایی
این قانون طلایی منه: هیچوقت، هیچوقت، هیچوقت یک عبارت RegEx رو مستقیماً روی فیلتر اصلی (مخصوصاً فیلترهای دائمی مثل View Filter در UA قدیم یا Data Source Filter در لوکر استودیو) اعمال نکن.
چطور تست کنیم؟
ابزارهای آنلاین: از سایتهایی مثل Regex101.com استفاده کن. میتونی چندتا از URLها یا کوئریهای نمونهات رو اونجا کپی کنی و الگوت رو در لحظه تست کنی تا ببینی دقیقاً چی رو انتخاب میکنه (Match) و چی رو رد میکنه.
تست معکوس: در خود ابزار (مثل GSC یا GA4 Explore)، قبل از زدن Doesn’t match regex، اول الگوت رو با Matches regex تست کن. آیا دقیقاً همون چیزهایی که میخواستی حذف بشن رو بهت نشون میده؟ اگه آره، پس حالا میتونی با خیال راحت فیلتر رو به Doesn’t match regex تغییر بدی.
فیلتر موقت: در لوکر استودیو، به جای اعمال فیلتر روی Data Source، اول اون رو فقط روی یک چارت اعمال کن تا مطمئن بشی نتیجه همونیه که میخوای.
این کارها به شدت از بروز خطاهای واضح جلوگیری میکنه و دقت گزارش رو بالا میبره.
حساسیت به بزرگی و کوچکی حروف (Case Sensitivity) در پلتفرمهای مختلف
این یکی از فنیترین و مهمترین نکاتیه که خیلیها نادیده میگیرن:
گوگل آنالیتیکس (GA4 و UA): به بزرگی و کوچکی حروف حساس (Case-Sensitive) هست. یعنی vazir seo با Vazir Seo دو چیز متفاوت در نظر گرفته میشن.
گوگل سرچ کنسول (GSC): به بزرگی و کوچکی حروف حساس نیست (Case-Insensitive). vazir seo و Vazir Seo رو یکی میبینه.
مشکل کجا پیش میاد؟ در آنالیتیکس. فرض کن میخوای ترافیک برند «Vazir Seo» رو حذف کنی.
الگوی اشتباه: Doesn’t match regex: vazir seo
نتیجه: این فیلتر فقط سورسهایی که دقیقاً با حروف کوچک vazir seo اومدن رو حذف میکنه. اگه کاربری با Vazir Seo (حرف اول بزرگ) وارد شده باشه، فیلتر تو اون رو نادیده میگیره و اون کاربر اشتباهاً در گزارش «غیربرند» تو باقی میمونه.
راه حل (ترفند پیشرفته): برای اینکه در آنالیتیکس به RegEx بگی «به بزرگی و کوچکی حروف حساس نباش»، باید از پیشوند (?i) در ابتدای الگوت استفاده کنی.
الگوی صحیح (در GA): Doesn’t match regex: (?i)vazir seo
نتیجه: پیشوند (?i) به موتور RegEx میگه «این الگو (vazir seo) رو بدون حساسیت به بزرگی و کوچکی حروف بررسی کن». حالا هم vazir seo و هم Vazir Seo و حتی VAZIR SEO به درستی حذف میشن و تو یک گزارش «Non-Brand» قابل اعتماد داری.
جمعبندی
امیدوارم این راهنمای عملی بهت کمک کرده باشه که دیگه از فیلتر Doesn’t match regex ترسی نداشته باشی. همونطور که دیدیم، این فیلتر اصلاً پیچیده نیست، فقط طرز فکر ما رو از «پیدا کردن» به «حذف کردن» تغییر میده.
چه برای حذف کوئریهای برند در سرچ کنسول تا بتونیم عملکرد سئوی غیربرند رو ببینیم، چه برای حذف ترافیک تست و اسپم در آنالیتیکس، Doesn’t match regex (مخصوصاً با کمک اپراتور | برای حذف چند شرطی) یکی از بهترین ابزارها در جعبه ابزار ماست.
یادت نره، RegEx فقط برای پیدا کردن نیست؛ گاهی وقتها، حذف کردن هوشمندانه دادهها، بینشهای خیلی عمیقتری به ما میده. همیشه قبل از اینکه به فیلترت اعتماد کنی، اون رو با چند نمونه داده تست کن.