Using Analyticsاستخدام Analytics

Web analytics that never learns who anybody is. No cookies, no fingerprints, no identifiers of any kind — and, more unusually, no record of an individual visit exists at any point. A pageview increments a counter and is gone.تحليلات ويب لا تعرف قطّ مَن يكون أحد. لا كوكيز، ولا بصمات، ولا مُعرِّفات من أي نوع — والأغرب: لا يوجد في أي لحظة سجلٌّ لزيارة فردية. مشاهدةُ صفحةٍ تزيد عدّاداً ثم تزول.

In development — not open for sign-up yet. This page describes how it behaves.قيد التطوير — لم يُفتح للتسجيل بعد. تصف هذه الصفحة كيف يتصرّف.

Overviewنظرة عامة

What it doesما يفعله

It counts what happened on your site, and it never learns who made it happen. No cookies, no fingerprints, no identifiers of any kind — and, more unusually, no record of an individual visit exists at any point. A pageview increments a counter in memory and is gone.يَعُدّ ما جرى على موقعك، ولا يعرف قطّ مَن فعله. لا كوكيز، ولا بصمات، ولا مُعرِّفات من أي نوع — والأغرب: لا يوجد في أي لحظة سجلٌّ لزيارة فردية. مشاهدةُ صفحةٍ تزيد عدّاداً في الذاكرة ثم تزول.

Most privacy-first tools store an event per pageview and promise not to misuse it. This stores counters. The difference is not a policy — it is what the code can physically do.معظم الأدوات المهتمّة بالخصوصية تخزّن حدثاً لكل مشاهدة وتَعِد بألّا تُسيء استعماله. أما هذا فيخزّن عدّادات. والفرق ليس سياسةً — بل هو ما تستطيع الشيفرة فعله ماديّاً.

Per site, per day: pageviews, visits, top pages, countries, referrer hosts and campaigns. A daily chart, a period comparison, and five tables that add up. That is the whole product, and the shortness of the list is the point — no funnel builder, no cohort explorer, no session replay, because those have to follow a person around and there is no person here to follow.لكل موقع، ولكل يوم: مشاهدات الصفحات، والزيارات، وأكثر الصفحات، والدول، ومضيفات الإحالة، والحملات. مخطّط يومي، ومقارنة بين فترتين، وخمسة جداول تتوافق أرقامها. هذا هو المنتج كله، وقِصَر القائمة مقصود — لا بنّاء مسارات، ولا مستكشف مجموعات، ولا إعادة عرض للجلسات، لأن تلك تحتاج إلى تتبّع شخص، ولا شخص هنا يُتتبَّع.

InstallالتثبيتOne <script> tag, 2.0 KB compressedوسم <script> واحد، ٢٫٠ كيلوبايت مضغوطاً
CollectsيجمعPath, referrer host, campaign tags, country, browser, operating system, deviceالمسار، ومضيف الإحالة، ووسوم الحملة، والدولة، والمتصفّح، ونظام التشغيل، والجهاز
Never collectsلا يجمع أبداًIP address, cookies, storage, device fingerprint, the User-Agent string itselfعنوان IP، والكوكيز، والتخزين، وبصمة الجهاز، ونصّ وكيل المستخدم نفسه
DashboardاللوحةLoads a year of history in one request, then filters instantly in the browserتحمّل سنةً من التاريخ في طلب واحد، ثم تُرشِّح فوراً في المتصفّح
Sign-inتسجيل الدخولPasskey, through Authمفتاح مرور، عبر Auth
Deleting your accountحذف حسابكSelf-service, complete, about ten minutesخدمة ذاتية، كاملة، نحو عشر دقائق
Why thisلماذا هذا

Why this rather than the alternativesلماذا هذا دون البدائل

Against Google Analyticsفي مقابل Google Analytics

It builds a profile of your visitors, and that profile is something you then answer for. Here no profile is built: nothing is written to a visitor's browser and nothing about a person is stored at any point — and the numbers arrive unsampled, because there is no sampling when the aggregate is the storage.يبني ملفّاً عن زوّارك، وذلك الملفّ شيء تتحمّل تبعته بعد ذلك. وهنا لا يُبنى أيّ ملفّ: لا يُكتب شيء في متصفّح الزائر ولا يُخزَّن شيء عن أيّ شخص في أيّ لحظة — وتصل الأرقام دون أخذ عيّنات، إذ لا عيّنات حين يكون المُجمَّع هو التخزين.

Against the privacy-first toolsفي مقابل الأدوات المهتمّة بالخصوصية

Plausible, Fathom and their peers are a real improvement — and most of them still store one row per pageview, and recognise a returning visitor by hashing their IP address with a daily salt. A hashed address is still an identifier: stable for the day, reversible by brute force over a space of four billion, and present on disk. This has no equivalent, because it does not need one.‏Plausible وFathom وأمثالهما تحسينٌ حقيقي — ومع ذلك يخزّن معظمها صفّاً لكل مشاهدة، ويتعرّف على الزائر العائد بتجزئة عنوان IP بمِلحٍ يومي. والعنوان المُجزّأ يبقى مُعرِّفاً: ثابتٌ طوال اليوم، وقابل للعكس بالقوة الغاشمة في فضاء من أربعة مليارات، وموجود على القرص. وهذا لا نظير له عندنا، لأنه لا يحتاجه.

A visit is a page loadالزيارة تحميلُ صفحة

That is the entire definition. The script says "this is a new document" on load and "this is a route change" when a single-page app navigates without reloading; counting the first gives visits, counting both gives pageviews. Nothing is remembered between one request and the next, so there is nothing to identify.هذا هو التعريف كله. يقول السكربت «هذه وثيقة جديدة» عند التحميل، و«هذا تغيير مسار» حين يتنقّل تطبيق أحادي الصفحة دون إعادة تحميل؛ فعَدُّ الأول يُعطي الزيارات، وعَدُّ كليهما يُعطي مشاهدات الصفحات. ولا يُحتفَظ بشيء بين طلب وآخر، فلا شيء يُعرَّف.

This is the honest limitation too: a refresh is a new visit, and someone returning tomorrow is a new visit. The dashboard says "visits" and "page loads" for that reason — never "users" and never "unique visitors", numbers other tools report and cannot actually justify.وهذا هو القيد الصادق أيضاً: التحديث زيارة جديدة، ومن يعود غداً زيارة جديدة. ولهذا تقول اللوحة «زيارات» و«تحميلات صفحات» — لا «مستخدمون» ولا «زوّار فريدون»، وهي أرقام تعرضها أدوات أخرى ولا تستطيع تبريرها فعلاً.
Data modelنموذج البيانات

The data model, in fullنموذج البيانات، كاملاً

What is storedما يُخزَّن

FieldالحقلExampleمثالNotesملاحظات
Siteالموقعs_9xK2Yoursموقعك
Dayاليوم2026-07-30Bucketed in your timezone, not UTCمُجمَّع بمنطقتك الزمنية أنت، لا بتوقيت UTC
Pathالمسار/blog/postQuery string and fragment removed, lowercasedتُزال سلسلة الاستعلام والجزء، ويُحوَّل إلى أحرف صغيرة
Referrer hostمضيف الإحالةnews.ycombinator.comHost only — never the full URLالمضيف فقط — لا العنوان الكامل أبداً
Campaignالحملةnewsletter · email · julyFrom utm_source, utm_medium, utm_campaignمن utm_source وutm_medium وutm_campaign
EventالحدثsignupA name you declare and send. Counted exactly; nothing is attached to itاسم تعلنه أنت وترسله. يُحتسب بدقة، ولا يُرفق به أي شيء
Unrecognised eventحدث غير معروفpurchseA name your site sent that you have not declared. Kept only so the console can show it back to you, at most a few per day, and never countedاسم أرسله موقعك ولم تعلِنه. يُحفَظ لتتمكّن لوحة التحكم من عرضه عليك فقط، بضعة أسماء في اليوم على الأكثر، ولا يُحتسب أبداً
CountryالدولةSATwo-letter code, via Geolocرمز من حرفين، عبر Geoloc
Pageviews, visitsالمشاهدات، الزيارات1483, 1102Countersعدّادات
Time of dayوقت اليوم14:00, 14:23Counters by hour, and by minute for the “last 15 minutes” figureعدّادات بالساعة، وبالدقيقة لرقم «آخر ١٥ دقيقة»
BrowserالمتصفّحChrome 126Family and major version. Counted on its own — never joined to any other rowالعائلة والإصدار الرئيسي. يُعَدّ وحده — ولا يُربَط أبداً بأي صفٍّ آخر
Operating systemنظام التشغيلAndroid 14Family and major version, where the browser reports one honestly. Counted on its ownالعائلة والإصدار الرئيسي، حيث يُصرّح به المتصفّح بصدق. يُعَدّ وحده
DeviceالجهازmobileOne of three: desktop, mobile, tablet. Counted on its ownواحد من ثلاثة: مكتبي، جوّال، لوحي. يُعَدّ وحده

Each of these is a counter, not a row. /blog/post was seen 412 times on 30 July; there is no record of any one of those 412, and no way to associate two of them with each other. Counters do run finer than the day — by hour, and by minute for the live figure — and they are still totals: that eleven page loads happened in one minute says nothing about who made them, or whether any two were the same person.كلٌّ من هذه عدّاد، لا صفّ. رُئي /blog/post ٤١٢ مرّة في ٣٠ يوليو؛ ولا سجلَّ لأيٍّ من تلك الـ٤١٢، ولا سبيل لربط اثنتين منها ببعضهما. والعدّادات أدقّ من اليوم فعلًا — بالساعة، وبالدقيقة للرقم الحيّ — ومع ذلك تبقى مجاميع: كون إحدى عشرة مشاهدة وقعت في دقيقة واحدة لا يقول شيئًا عمّن قام بها، ولا عمّا إذا كانت اثنتان منها لشخص واحد.

What is never storedما لا يُخزَّن أبداً

  • Your visitors' IP addresses. An address is resolved to its /24 network — the range, not the host — and released within the same function. Never written to disk, never logged, and never hashed: a salted hash is still an identifier and would defeat the point.عناوين IP لزوّارك. يُحلَّل العنوان إلى شبكته /24 — النطاق لا المضيف — ويُطلَق داخل الدالة نفسها. لا يُكتَب على قرص، ولا يُسجَّل، ولا يُجزَّأ أبداً: فالتجزئة المُملَّحة تبقى مُعرِّفاً وتُبطِل المقصود.
  • Cookies or browser storage. Nothing is written to your visitors' browsers — not a cookie, not localStorage, not even an ETag, which is a perfectly good tracking identifier and is deliberately absent from our responses.الكوكيز أو تخزين المتصفّح. لا يُكتَب شيء في متصفّحات زوّارك — لا كوكي، ولا localStorage، ولا حتى ETag، وهو مُعرِّف تتبّع جيّد تماماً، وغائب عمداً عن استجاباتنا.
  • The full referrer URL. Referrer URLs carry search terms and private page titles; we keep the host and discard the rest before anything is counted.عنوان الإحالة الكامل. عناوين الإحالة تحمل عبارات بحث وعناوين صفحات خاصة؛ نُبقي المضيف ونطرح الباقي قبل عَدِّ أي شيء.
  • Anything joining two pageviews together. No session id, no visitor id, no fingerprint.أيُّ شيء يربط مشاهدتين معاً. لا مُعرِّف جلسة، ولا مُعرِّف زائر، ولا بصمة.
  • Screen size and language. Not today. Browser, operating system and device are now collected, and on exactly the terms promised here before they arrived: coarse buckets, each counted on its own, never a combined tuple. Nothing in the service ever holds the three together, because a joined browser + OS + device + country narrows towards a person on a quiet site.حجم الشاشة واللغة. ليس اليوم. أمّا المتصفّح ونظام التشغيل والجهاز فتُجمَع الآن، وبالشروط ذاتها التي وُعِد بها هنا قبل وصولها: فئات خشنة، يُعَدّ كلٌّ منها وحده، لا صفّاً مركّباً أبداً. ولا يحتفظ أيُّ جزء من الخدمة بالثلاثة معاً، لأن جمع المتصفّح ونظام التشغيل والجهاز والدولة يضيق نحو شخص بعينه على موقع هادئ.

How long it is keptكم يُحتفَظ به

Detail fades with age. The total is exact forever; what degrades is the breakdown.تتلاشى التفاصيل مع الزمن. المجموع دقيق إلى الأبد؛ والذي يخفّ هو التفصيل.

AgeالعمرGranularityالدقّةPagesالصفحاتCountries & referrersالدول والإحالات
Under 24 hoursأقل من ٢٤ ساعةHourly, and per minute for visitsبالساعة، وبالدقيقة للزياراتAllالكلAllالكل
1–7 days١–٧ أيامDailyيومياًTop 100 + (other)أعلى ١٠٠ + (أخرى)Countries all; referrers top 20 + (other)الدول كلّها؛ والإحالات أعلى ٢٠ + (أخرى)
7–30 days٧–٣٠ يوماًDailyيومياًTop 20 + (other)أعلى ٢٠ + (أخرى)Countries all; referrers top 20 + (other)الدول كلّها؛ والإحالات أعلى ٢٠ + (أخرى)
30–90 days٣٠–٩٠ يوماًDailyيومياًCountries onlyالدول فقط
Over 90 daysأكثر من ٩٠ يوماًWeeklyأسبوعياًCountries onlyالدول فقط
Two things follow, both deliberate. Your totals never drift — at every age the listed pages plus (other) add up to exactly the pageview count, so "total pageviews, March" is exact in five years' time. And per-page history is not forever: after a month you can see how much traffic you had and roughly where it came from, but not which individual page earned it. That is the trade for holding almost nothing.يتبع ذلك أمران، كلاهما مقصود. مجاميعك لا تنحرف — ففي كل عمر تتوافق الصفحات المدرَجة زائد (أخرى) مع عدد المشاهدات تماماً، فـ«إجمالي مشاهدات مارس» دقيقٌ بعد خمس سنين. وتاريخ كل صفحة ليس أبديّاً: بعد شهر ترى كم بلغ مرورك ومن أين جاء تقريباً، لا أيَّ صفحة كسبته. وذلك ثمنُ ألّا نحمل تقريباً شيئاً.

Deleting your accountحذف حسابك

Self-service, from the console, with no email to anybody.خدمة ذاتية، من لوحة التحكم، بلا بريد إلى أحد.

  1. You confirm. Collection for the site stops immediately.تؤكّد. يتوقّف الجمع للموقع فوراً.
  2. About ten minutes pass. Not a cooling-off period — the service runs on several machines, each holding a few minutes of counters in memory, and the wait is what guarantees a late write cannot recreate what was just deleted.تمرّ نحو عشر دقائق. ليست مهلة تراجع — فالخدمة تعمل على عدّة آلات، كلٌّ تحمل دقائق من العدّادات في الذاكرة، والانتظار هو ما يضمن ألّا تُعيد كتابةٌ متأخرة ما حُذف للتوّ.
  3. Everything is removed — counters, history, the exported blob, and your account record. We hold no email address for you, so nothing is left over. Sign-in runs through Auth, which never knew who you were either.يُزال كل شيء — العدّادات، والتاريخ، والكتلة المُصدَّرة، وسجلّ حسابك. لا نحمل لك بريداً، فلا يبقى شيء. وتسجيل الدخول يجري عبر Auth، الذي لم يعرف هو الآخر مَن أنت.
Tracesالتتبّعات

Traces are a second pipeline, and a different promiseالتتبّعات مسار ثانٍ، ووعد مختلف

Everything above describes counting. There is more this service can do: accept traces — OpenTelemetry spans describing one piece of work, so you can see where a slow request or a slow page went.كل ما سبق يصف العدّ. وهناك ما هو أكثر تستطيع هذه الخدمة فعله: استقبال التتبّعات — وهي مقاطع OpenTelemetry تصف عملاً بعينه، لترى أين ذهب الطلب البطيء أو الصفحة البطيئة.

The promise above is about counting, and traces have their own. What we guarantee about a trace is where it goes: a store separate from your counts, on its own clock, never mixed into the numbers you read — and that the trace id lives only as long as the page load it belongs to. What we cannot guarantee is its contents: page timings are ours, but the spans you add carry names you choose and reach servers you control, so you decide what goes in it. A span we did not write is not ours to make promises about.الوعد أعلاه يخصّ العدّ، وللتتبّعات وعدها الخاص. فما نضمنه في التتبّع هو أين يذهب: مخزن منفصل عن أرقامك، بساعته الخاصّة، لا يُخلَط بالأرقام التي تقرأها — وأن مُعرِّف التتبّع لا يعيش إلا بقدر تحميل الصفحة الذي يخصّه. وما لا نضمنه هو محتواه: أزمنة الصفحة من عندنا، أمّا المقاطع التي تضيفها فتحمل أسماء تختارها وتبلغ خوادم تتحكّم بها، وأنت من يقرّر ما يدخل فيه. ومقطعٌ لم نكتبه ليس لنا أن نَعِد بشأنه.
  • It is off unless you turn it on. Traces arrive from a backend you point at us, or from the beacon once you add data-traces to the script tag — never by default. With it on, the page mints a trace id in memory for that one load: written to no cookie and no storage, and gone when the document is. A reload is a new trace, joined to nothing.معطّلة ما لم تُفعّلها. تصل التتبّعات من خادم توجّهه إلينا، أو من الخدمة في صفحاتك بعد أن تضيف data-traces إلى وسم السكربت — ولا تصل افتراضياً أبداً. وعند تفعيلها تُنشئ الصفحة مُعرِّف تتبّع في الذاكرة لذلك التحميل وحده: لا يُكتب في كوكي ولا في تخزين، ويزول بزوال الوثيقة. وإعادة التحميل تتبّع جديد لا يرتبط بشيء.
  • A separate store, on its own clock. Traces do not live with your counts and are not part of them; they are deleted after three days, and nothing reads one older than 48 hours.مخزن منفصل، بساعته الخاصّة. لا تُخزَّن التتبّعات مع أرقامك ولا تُعدّ جزءاً منها؛ وتُحذف بعد ثلاثة أيام، ولا يقرأ شيء تتبّعاً أقدم من ٤٨ ساعة.
  • It changes nothing about counting. No span becomes a number on your dashboard, and no count is derived from one.ولا تغيّر شيئاً في العدّ. فلا يتحوّل مقطع إلى رقم في لوحتك، ولا يُشتقّ عدّ من مقطع.
Said plainly because the alternative is worse: two honest claims that contradict each other unless the page says which covers what. If you never send a trace, everything above this section is the whole of what we hold.قيل هذا صراحةً لأن البديل أسوأ: وعدان صادقان يتناقضان ما لم تُبيّن الصفحة أيّهما يغطّي ماذا. وإن لم ترسل تتبّعاً قطّ، فكل ما فوق هذا القسم هو كلّ ما نحتفظ به.
OpenTelemetryOpenTelemetry

Send traces and metrics from your own systemsأرسل التتبّعات والمقاييس من أنظمتك

The same host accepts OTLP over HTTP for two signals: traces, and metrics from your own services. Point any OpenTelemetry SDK at it. There is no library of ours to install and nothing proprietary on the wire — which also means you can point the same exporter somewhere else tomorrow.يستقبل المضيف نفسه OTLP عبر HTTP لإشارتين: التتبّعات، والمقاييس القادمة من خدماتك. وجّه إليه أي حزمة OpenTelemetry. لا مكتبة من عندنا تُثبّتها ولا شيء مغلق على السلك — ما يعني أيضاً أنك تستطيع توجيه المُصدِّر نفسه إلى مكان آخر غداً.

# The BASE url — the SDK appends /v1/traces or /v1/metrics itself.
OTEL_EXPORTER_OTLP_ENDPOINT=https://analytics.ali-web-services.com

# Your site id travels as a HEADER, never as a query parameter.
OTEL_EXPORTER_OTLP_HEADERS=X-Aliweb-Site=s_9xK2
Two details that fail quietly. The endpoint is the base URL: the SDK appends the signal path per signal, so naming /v1/traces yourself produces /v1/traces/v1/traces and nothing arrives. And the site id must be a header — a stock exporter rebuilds the request from scheme, host and path, so a ?i= query parameter is dropped before the request leaves your process. Both are answered with 200 either way, because a request naming no site we can resolve is accepted and stored nowhere.تفصيلان يفشلان بصمت. العنوان هو الرابط الأساسي: فالحزمة تضيف مسار الإشارة بنفسها، وكتابة /v1/traces بيدك تُنتج /v1/traces/v1/traces فلا يصل شيء. ومُعرِّف الموقع يجب أن يكون ترويسة — إذ يعيد المُصدِّر القياسي بناء الطلب من المخطّط والمضيف والمسار، فيسقط مُعامل الاستعلام ?i= قبل مغادرة الطلب لعمليتك. وكلاهما يُجاب بـ200 في الحالتين، لأن طلباً لا يسمّي موقعاً نعرفه يُقبل ولا يُخزَّن في أي مكان.
  • Traces show where one piece of work went — a slow request, a slow page — across whatever services you instrument. They carry the same promise, and the same limits, as the section above.التتبّعات تُظهر أين ذهب عملٌ بعينه — طلب بطيء أو صفحة بطيئة — عبر ما تُجهّزه من خدمات. وتحمل الوعد نفسه والحدود نفسها الواردة في القسم أعلاه.
  • Metrics are counters and gauges your own services report — requests, latency, whatever you record — and they appear on the Resources screen beside the service and instance that sent them.المقاييس عدّادات ومؤشّرات تُبلِغ عنها خدماتك — الطلبات، زمن الاستجابة، وما تسجّله — وتظهر في شاشة الموارد بجانب الخدمة والنسخة التي أرسلتها.
  • Neither becomes a number on your traffic dashboard. They are separate stores on their own clock, and no pageview, visit or event is ever derived from one.ولا يتحوّل أيٌّ منهما إلى رقم في لوحة حركتك. فهما مخزنان منفصلان بساعتهما الخاصّة، ولا يُشتقّ من أيٍّ منهما مشاهدة أو زيارة أو حدث.
A site does not need the script tag to use this. A backend that only exports traces or metrics is a supported setup, and the console says so rather than offering you an install snippet you do not need.لا يحتاج الموقع إلى وسم السكربت لاستخدام هذا. فالخادم الذي يُصدِّر التتبّعات أو المقاييس فقط إعدادٌ مدعوم، وتقول اللوحة ذلك بدل أن تعرض عليك مقتطف تثبيت لا تحتاجه.
Errorsالأعطال

Crash reporting, grouped into issuesتقارير الأعطال، مجمّعة في مسائل

When your page throws, the error is reported and grouped with every other occurrence of the same fault — so a bad deploy is one row that happened ten thousand times, not ten thousand rows. Each group carries what broke, where, on which release, and when it was last seen.حين تُخفق صفحتك، يُبلَّغ عن العطل ويُجمَّع مع كل تكرار آخر للعطل نفسه — فالنشرة الخاطئة صفٌّ واحد وقع عشرة آلاف مرة، لا عشرة آلاف صف. وتحمل كل مجموعة ما الذي انكسر، وأين، وفي أي إصدار، ومتى شوهد آخر مرة.

<script defer src="https://analytics.ali-web-services.com/a.js"
        data-site="s_9xK2"
        data-errors
        data-release="2026-09-08.1"></script>
The message is yours, and that is the part we cannot promise about. What we control is where it goes and what we strip: a message is scrubbed for things shaped like addresses and tokens, then capped at 256 bytes, and only the representative of a group is kept. But new Error("no such user: ada@example.com") is ordinary code somebody wrote in good faith, and if you put a person in an error message you have sent us a person. Read your own messages before turning this on.الرسالة رسالتك، وهي الجزء الذي لا نستطيع الوعد بشأنه. فما نتحكّم به هو أين تذهب وما الذي نحذفه: تُنقّى الرسالة ممّا يشبه العناوين والرموز، ثم تُقصّ عند ٢٥٦ بايت، ولا يُحتفظ إلا بممثّل المجموعة. لكن new Error("no such user: ada@example.com") شيفرة عادية كتبها أحدهم بحسن نية، وإن وضعت شخصاً في رسالة عطل فقد أرسلت إلينا شخصاً. اقرأ رسائلك قبل تفعيل هذا.
  • It is off unless you turn it on. Add data-errors to the script tag — never by default, for the same reason traces are opt-in. data-release is optional and is what lets you see that a fault started with one deploy.معطّلة ما لم تُفعّلها. أضف data-errors إلى وسم السكربت — ولا تعمل افتراضياً أبداً، للسبب نفسه الذي يجعل التتبّعات اختيارية. وdata-release اختياري، وهو ما يتيح لك أن ترى أن عطلاً بدأ مع نشرة بعينها.
  • The stack is parsed on our side, not in the browser. Every engine writes Error.stack its own way, and a parser in the page would be bytes every visitor downloads and a fix nobody receives until they redeploy their script tag.تُحلَّل المكدّسة عندنا لا في المتصفّح. فكل محرّك يكتب Error.stack بطريقته، ومحلّلٌ داخل الصفحة يعني بايتات يحمّلها كل زائر وإصلاحاً لا يصل أحداً حتى يعيد نشر وسم السكربت.
  • At most eight reports per page load, and the surplus is dropped rather than counted. A count somebody else supplies is a number on your screen that a stranger chooses.ثمانية تقارير على الأكثر لكل تحميل صفحة، والفائض يُسقَط لا يُعدّ. فعددٌ يورّده شخص آخر هو رقم على شاشتك يختاره غريب.
  • A separate store, on its own clock. Error groups are stored apart from your counts and are not part of them; they are deleted after three days, and nothing reads one older than 48 hours.مخزن منفصل، بساعته الخاصّة. تُحفظ مجموعات الأعطال بمعزل عن أرقامك ولا تُعدّ جزءاً منها؛ وتُحذف بعد ثلاثة أيام، ولا يقرأ شيء مجموعةً أقدم من ٤٨ ساعة.
  • It changes nothing about counting. No error becomes a number on your traffic dashboard, and no count is derived from one.ولا تغيّر شيئاً في العدّ. فلا يتحوّل عطل إلى رقم في لوحة حركتك، ولا يُشتقّ عدّ من عطل.
FieldالحقلNotesملاحظات
KindالنوعThe error class — TypeError, ReferenceError.صنف العطل — TypeError أو ReferenceError.
MessageالرسالةScrubbed and capped. Kept on the group's representative only.مُنقّاة ومقصوصة. تُحفظ لممثّل المجموعة وحده.
StackالمكدّسةUp to sixteen frames, deepest first — the frame that threw is the one you need.حتى ستة عشر إطاراً، الأعمق أولاً — فالإطار الذي أخفق هو ما تحتاجه.
PathالمسارNormalised exactly as a counted path is — query string and fragment removed. Never a full URL.يُطبَّع تماماً كما يُطبَّع المسار المعدود — تُحذف سلسلة الاستعلام والجزء. ولا يكون رابطاً كاملاً أبداً.
ReleaseالإصدارWhatever you put in data-release, or empty.ما تضعه في data-release، أو فارغ.
HandledمُعالَجWhether your code caught it or it reached the top.هل التقطته شيفرتك أم بلغ القمّة.
There is no identifier of any kind in an error report — no address, no session, nothing that would let two reports be recognised as the same person. A group is a fault, not a set of people who met it.لا يوجد مُعرِّف من أي نوع في تقرير العطل — لا عنوان ولا جلسة ولا شيء يتيح التعرّف على تقريرين بوصفهما الشخص نفسه. فالمجموعة عطلٌ، لا مجموعةُ أشخاصٍ صادفوه.
Architectureالبنية

How it behaves, in one screenكيف يتصرّف، في شاشة واحدة

Three moving parts, and one of them is a file. You do not need any of this to use it — it is here because knowing the shape of what you are trusting is reasonable, and because the whole design follows from one idea: aggregate at ingest, and never store raw. Every analytics database does the opposite; inverting it is what makes the privacy claim structural rather than a promise.ثلاثة أجزاء متحرّكة، وأحدها ملف. لا تحتاج شيئاً من هذا لاستعماله — هو هنا لأن معرفة شكل ما تأتمنه أمر معقول، ولأن التصميم كله ينبع من فكرة واحدة: الجمع عند الإدخال، وألّا يُخزَّن الخام أبداً. كل قاعدة تحليلات تفعل العكس؛ وقلبُ ذلك هو ما يجعل ادّعاء الخصوصية بنيويّاً لا وعداً.

IngestالإدخالThe beacon posts a few hundred bytes and gets back 204 — no body, no useful headers. The path is normalised, the country resolved, counters incremented in memory, and the request forgotten. Each machine periodically writes its increments, never absolute values, so many machines can write the same day without coordinating.يرسل المنارة بضع مئات من البايتات ويتلقّى 204 — بلا جسم، ولا ترويسات ذات نفع. يُسوّى المسار، وتُحلّ الدولة، وتُزاد العدّادات في الذاكرة، ويُنسى الطلب. وتكتب كل آلة دوريّاً زياداتها، لا قيماً مطلقة، فتستطيع آلات كثيرة الكتابة لليوم نفسه دون تنسيق.
DashboardاللوحةOnce a night each site's whole history is compacted into a single compressed blob — a year for a busy site is around 50 KB, smaller than most logos. The dashboard fetches it once and does every filter, chart and comparison locally, which is why changing the date range is instant and why there is no database on the read path at all. Today's numbers come from a separate small request, labelled as such.مرّةً كل ليلة تُضغَط سجلّات كل موقع كاملةً في كتلة مضغوطة واحدة — سنةٌ لموقع مزدحم نحو ٥٠ كيلوبايت، أصغر من معظم الشعارات. تجلبها اللوحة مرّةً وتُجري كل ترشيح ومخطّط ومقارنة محلياً، ولذلك يكون تغيير المدى الزمني فوريّاً، ولا قاعدة بيانات على مسار القراءة البتّة. أما أرقام اليوم فتأتي من طلب صغير منفصل، مُعلَّمةً بذلك.
CountriesالدولResolved after the fact, by network range, through Geoloc. If Geoloc is unavailable the country shows as unknown and the pageview is still counted — a dependency being down must never cost you traffic.تُحلّ لاحقاً، بحسب نطاق الشبكة، عبر Geoloc. وإن تعذّر Geoloc ظهرت الدولة مجهولةً وظلّت المشاهدة معدودة — فتعطّل اعتمادية لا يجوز أن يكلّفك مروراً أبداً.
CardinalityالتعدّدEach site-day has a fixed budget of counters. Popular pages hold theirs; a flood of one-off URLs displaces only the smallest counters and lands in (other). Nothing anyone can send will exhaust memory or trigger an account action — and if your site legitimately has many URLs, you define patterns like /products/* to group them, and the dashboard tells you when you should.لكل يوم-موقع ميزانية ثابتة من العدّادات. تحتفظ الصفحات الشائعة بعدّاداتها؛ وفيضٌ من عناوين لمرّة واحدة يُزيح أصغر العدّادات فقط ويقع في (أخرى). ولا شيء يرسله أحد يستنفد الذاكرة أو يستدعي إجراءً على الحساب — وإن كان لموقعك فعلاً عناوين كثيرة، عرّفتَ أنماطاً مثل /products/* لتجميعها، واللوحة تُنبِّهك متى ينبغي ذلك.

How a pageview is servedكيف تُخدَم مشاهدة

  1. browser → analyticsالمتصفّح ← analytics
    The beacon posts a few hundred bytes — no cookie, no identifier, no body worth keeping.يرسل المنارة بضع مئات من البايتات — بلا كوكي، ولا مُعرِّف، ولا جسم يستحقّ الحفظ.
  2. in memoryفي الذاكرة
    The path is normalised and counters are incremented. The address is resolved to a /24 range for the country and released in the same breath.يُسوّى المسار وتُزاد العدّادات. ويُحلَّل العنوان إلى نطاق /24 لأجل الدولة ثم يُطلَق في اللحظة نفسها.
  3. analytics → browseranalytics ← المتصفّح
    A bare 204 comes back. The request is forgotten; what remains is counters, as totals — plus, if you sent an event name you never declared, that name, so the console can show it back to you.يعود 204 مجرّد. ويُنسى الطلب؛ ولا يبقى إلا العدّادات مجاميعَ — يُضاف إليها، إن أرسلتَ اسم حدث لم تعلِنه، ذلك الاسم، لتتمكّن لوحة التحكم من عرضه عليك.
Using itالاستخدام

Install, read, leaveالتثبيت، والقراءة، والمغادرة

Installالتثبيت

One script tag. That is the integration. Single-page apps need nothing extra — route changes are detected and counted as pageviews within the same visit.وسم سكربت واحد. هذا هو التكامل. والتطبيقات أحادية الصفحة لا تحتاج شيئاً إضافياً — تُكتشَف تغييرات المسار وتُعَدّ مشاهداتٍ ضمن الزيارة نفسها.

<script defer src="https://analytics.ali-web-services.com/a.js" data-site="s_9xK2"></script>

Count a conversionعِدّ عملية تحوّل

Pageviews say what was looked at; an event says what was done. Declare the names you care about in the console — signup, purchase — then call one when it happens. Same script, no extra request on load.المشاهدات تقول ما الذي نُظِر إليه، والحدث يقول ما الذي فُعِل. أعلِن في لوحة التحكم الأسماء التي تهمّك — signup أو purchase — ثمّ استدعِ الاسم عند وقوعه. النص نفسه، ولا طلب إضافي عند التحميل.

// Declare the name in the console first. An undeclared name is dropped.
aliweb('signup')
A name, and nothing else. There is no properties argument, deliberately — that is the parameter that ends up carrying an email address or a cart's contents, and this product's claim is that no record of an individual exists at any point. A signature that cannot express a property is what stops one arriving by accident.اسم، ولا شيء سواه. لا يوجد وسيط للخصائص، وذلك عن قصد — فهو الوسيط الذي ينتهي به الأمر إلى حمل بريد إلكتروني أو محتويات سلة، ودعوى هذا المنتج أنّه لا وجود لسجلّ فرد في أيّ لحظة. وتوقيع لا يمكنه التعبير عن خاصيّة هو ما يمنع وصولها بالخطأ.

Declaring is what makes the count exact. Every other list on your dashboard is a top twenty with the rest in (other) — fine for a rarely-visited page, useless for a conversion, because a goal is a number you act on. Since you registered the names, there is no tail to fall into. An event fires on its own: it adds no pageview, and it needs no page load.الإعلان هو ما يجعل العدّ دقيقاً. فكلّ قائمة أخرى في لوحتك هي أعلى عشرين وما تبقّى في (other) — وهذا مقبول لصفحة نادرة الزيارة، عديم النفع لعملية تحوّل، لأنّ الهدف رقم تتصرّف بناءً عليه. وما دمت قد سجّلت الأسماء، فلا ذيل تسقط فيه. والحدث يقع وحده: لا يضيف مشاهدة، ولا يحتاج إلى تحميل صفحة.

An undeclared name is counted nowhere, and the beacon never says so. No error, no (other) row, no failed request — it answers 204 for a name you never registered exactly as it does for one you did. So nothing on your side can tell you: a mistyped purchse looks identical to a script that never loaded, an origin that was refused, or a call that never ran. The console is where the difference shows — names that arrived without a declaration are listed on the Events card, so a typo reads as a typo instead of as silence.الاسم غير المعلَن لا يُحتسب في أيّ مكان، والخدمة لا تُنبّهك إلى ذلك. لا خطأ، ولا صفّ (other)، ولا طلب فاشل — بل تردّ بـ204 على اسم لم تسجّله تماماً كما تردّ على اسم سجّلته. فلا شيء لديك يستطيع إخبارك: purchse المكتوب خطأً يبدو مطابقاً لنصٍّ لم يُحمَّل قطّ، أو أصلٍ مرفوض، أو استدعاءٍ لم يقع. وفي لوحة التحكم يظهر الفرق — إذ تُدرَج الأسماء التي وصلت بلا إعلان في بطاقة الأحداث، فيُقرأ الخطأ الإملائي خطأً إملائياً لا صمتاً.

The declaration lives on the site's Setup panel in the console, under Events; fifty names per site is the ceiling. Two states are worth looking for there: a name you declared that sits at zero has never arrived, and a name listed as unrecognised has arrived but matches nothing you declared. Keeping the names in a single place in your own code, as one constant or one type, is what stops the second one happening in the first place.يقع الإعلان في لوحة الإعداد الخاصّة بالموقع في لوحة التحكم، تحت الأحداث؛ والحدّ الأقصى خمسون اسماً للموقع الواحد. وهناك حالتان جديرتان بالبحث عنهما: اسم أعلنته ويقف على صفر لم يصل قطّ، واسم مُدرَج كغير معروف وصل لكنّه لا يطابق شيئاً أعلنته. وحفظ الأسماء في موضع واحد في شيفرتك، ثابتاً واحداً أو نوعاً واحداً، هو ما يمنع وقوع الثانية من الأساس.

Readالقراءة

Sign in with a passkey through Auth, pick a range, and the chart, the totals and the five tables update as fast as you can click — it is all already in the page.سجّل الدخول بمفتاح مرور عبر Auth، واختر فترة، فتتحدّث المخطّط والمجاميع والجداول الخمسة بأسرع ما تنقر — فكلّه في الصفحة أصلاً.

Leaveالمغادرة

Settings → Delete account. Collection stops immediately and everything is gone in about ten minutes, with no email to anybody.الإعدادات ← حذف الحساب. يتوقّف الجمع فوراً ويزول كل شيء خلال نحو عشر دقائق، بلا بريد إلى أحد.

Limitsالحدود

Known limitationsحدود معروفة

Stated here rather than discovered later.مذكورة هنا بدل أن تُكتشَف لاحقاً.

  • Anyone can send a beacon claiming to be your site. We check the Origin header against your registered domains and rate-limit, which stops accidents and casual mischief but not a determined party — a beacon carries no identifier and cannot prove who sent it. Every cookieless product has this hole, including the ones that do not mention it. So these are traffic figures, not audited numbers, and should not be used where someone has a financial incentive to inflate them.يستطيع أيّ أحد أن يرسل منارةً يدّعي فيها أنه موقعك. نفحص ترويسة Origin مقابل نطاقاتك المسجَّلة ونحدّ المعدّل، فيُوقَف الخطأ والعبث العابر لا الطرف المُصمِّم — فالمنارة لا تحمل مُعرِّفاً ولا تستطيع إثبات مَن أرسلها. كل منتج بلا كوكيز فيه هذه الثغرة، ومنها ما لا يذكرها. فهذه أرقام مرور، لا أرقام مُدقَّقة، ولا ينبغي استعمالها حيث لأحدٍ حافزٌ مالي لتضخيمها.
  • Bot filtering is never finished. Known crawlers and automation are dropped by user agent; new ones appear constantly, and every one we miss inflates your numbers slightly.ترشيح الروبوتات لا ينتهي أبداً. تُسقَط الزواحف والأتمتة المعروفة بحسب وكيل المستخدم؛ وتظهر جديدةٌ باستمرار، وكلُّ واحدة تفوتنا تضخّم أرقامك قليلاً.
  • No per-page history beyond a month. By design — see the retention table.لا تاريخ لكل صفحة بعد شهر. بالتصميم — انظر جدول الاحتفاظ.
  • Visits are page loads. A refresh counts again.الزيارات تحميلاتُ صفحات. والتحديث يُعَدّ من جديد.
  • No compliance claim appears on this page. The design supports a strong one, but a legal conclusion is not ours to state — so we describe exactly what the service does and leave the determination to people qualified to make it.لا يظهر على هذه الصفحة أي ادّعاء امتثال. التصميم يسند ادّعاءً قويّاً، لكن الاستنتاج القانوني ليس لنا أن نقرّره — فنصف تماماً ما تفعله الخدمة، ونترك الحكم لأهله المؤهّلين له.
Why hereلماذا هنا

Built in Saudi Arabiaصُنع في المملكة العربية السعودية

Analytics is built in Riyadh, for the Kingdom, and offered to anyone else who wants it. That is a statement about where the attention goes.‏Analytics مصنوع في الرياض، من أجل المملكة، ومعروض لكل من أراده سواها. وهذا قولٌ عن حيث تتّجه العناية.

It does not yet run inside the Kingdom, and we make no data-residency claim until the workloads actually move — it is the single easiest claim for a customer to check, and one we would rather earn than assert.ولا يعمل بعدُ داخل المملكة، ولا ندّعي أي إقامة للبيانات إلى أن تنتقل الأحمال فعلاً — فهي أسهل ادّعاء يتحقّق منه العميل، ونحن نُفضّل أن نكسبه على أن نزعمه.