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 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.هذا هو التعريف كله. يقول السكربت «هذه وثيقة جديدة» عند التحميل، و«هذا تغيير مسار» حين يتنقّل تطبيق أحادي الصفحة دون إعادة تحميل؛ فعَدُّ الأول يُعطي الزيارات، وعَدُّ كليهما يُعطي مشاهدات الصفحات. ولا يُحتفَظ بشيء بين طلب وآخر، فلا شيء يُعرَّف.
The data model, in fullنموذج البيانات، كاملاً
What is storedما يُخزَّن
| Fieldالحقل | Exampleمثال | Notesملاحظات |
|---|---|---|
| Siteالموقع | s_9xK2 | Yoursموقعك |
| Dayاليوم | 2026-07-30 | Bucketed in your timezone, not UTCمُجمَّع بمنطقتك الزمنية أنت، لا بتوقيت UTC |
| Pathالمسار | /blog/post | Query string and fragment removed, lowercasedتُزال سلسلة الاستعلام والجزء، ويُحوَّل إلى أحرف صغيرة |
| Referrer hostمضيف الإحالة | news.ycombinator.com | Host only — never the full URLالمضيف فقط — لا العنوان الكامل أبداً |
| Campaignالحملة | newsletter · email · july | From utm_source, utm_medium, utm_campaignمن utm_source وutm_medium وutm_campaign |
| Eventالحدث | signup | A name you declare and send. Counted exactly; nothing is attached to itاسم تعلنه أنت وترسله. يُحتسب بدقة، ولا يُرفق به أي شيء |
| Unrecognised eventحدث غير معروف | purchse | A 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الدولة | SA | Two-letter code, via Geolocرمز من حرفين، عبر Geoloc |
| Pageviews, visitsالمشاهدات، الزيارات | 1483, 1102 | Countersعدّادات |
| Time of dayوقت اليوم | 14:00, 14:23 | Counters by hour, and by minute for the “last 15 minutes” figureعدّادات بالساعة، وبالدقيقة لرقم «آخر ١٥ دقيقة» |
| Browserالمتصفّح | Chrome 126 | Family and major version. Counted on its own — never joined to any other rowالعائلة والإصدار الرئيسي. يُعَدّ وحده — ولا يُربَط أبداً بأي صفٍّ آخر |
| Operating systemنظام التشغيل | Android 14 | Family and major version, where the browser reports one honestly. Counted on its ownالعائلة والإصدار الرئيسي، حيث يُصرّح به المتصفّح بصدق. يُعَدّ وحده |
| Deviceالجهاز | mobile | One 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 anETag, 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الدول فقط |
Deleting your accountحذف حسابك
Self-service, from the console, with no email to anybody.خدمة ذاتية، من لوحة التحكم، بلا بريد إلى أحد.
- You confirm. Collection for the site stops immediately.تؤكّد. يتوقّف الجمع للموقع فوراً.
- 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.تمرّ نحو عشر دقائق. ليست مهلة تراجع — فالخدمة تعمل على عدّة آلات، كلٌّ تحمل دقائق من العدّادات في الذاكرة، والانتظار هو ما يضمن ألّا تُعيد كتابةٌ متأخرة ما حُذف للتوّ.
- 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 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 تصف عملاً بعينه، لترى أين ذهب الطلب البطيء أو الصفحة البطيئة.
- 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-tracesto 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.ولا تغيّر شيئاً في العدّ. فلا يتحوّل مقطع إلى رقم في لوحتك، ولا يُشتقّ عدّ من مقطع.
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/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.ولا يتحوّل أيٌّ منهما إلى رقم في لوحة حركتك. فهما مخزنان منفصلان بساعتهما الخاصّة، ولا يُشتقّ من أيٍّ منهما مشاهدة أو زيارة أو حدث.
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>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-errorsto the script tag — never by default, for the same reason traces are opt-in.data-releaseis 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.stackits 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.هل التقطته شيفرتك أم بلغ القمّة. |
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كيف تُخدَم مشاهدة
- browser → analyticsالمتصفّح ← analytics
The beacon posts a few hundred bytes — no cookie, no identifier, no body worth keeping.يرسل المنارة بضع مئات من البايتات — بلا كوكي، ولا مُعرِّف، ولا جسم يستحقّ الحفظ. - 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 لأجل الدولة ثم يُطلَق في اللحظة نفسها. - analytics → browseranalytics ← المتصفّح
A bare204comes 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مجرّد. ويُنسى الطلب؛ ولا يبقى إلا العدّادات مجاميعَ — يُضاف إليها، إن أرسلتَ اسم حدث لم تعلِنه، ذلك الاسم، لتتمكّن لوحة التحكم من عرضه عليك.
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')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) — وهذا مقبول لصفحة نادرة الزيارة، عديم النفع لعملية تحوّل، لأنّ الهدف رقم تتصرّف بناءً عليه. وما دمت قد سجّلت الأسماء، فلا ذيل تسقط فيه. والحدث يقع وحده: لا يضيف مشاهدة، ولا يحتاج إلى تحميل صفحة.
(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.الإعدادات ← حذف الحساب. يتوقّف الجمع فوراً ويزول كل شيء خلال نحو عشر دقائق، بلا بريد إلى أحد.
Known limitationsحدود معروفة
Stated here rather than discovered later.مذكورة هنا بدل أن تُكتشَف لاحقاً.
- Anyone can send a beacon claiming to be your site. We check the
Originheader 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.لا يظهر على هذه الصفحة أي ادّعاء امتثال. التصميم يسند ادّعاءً قويّاً، لكن الاستنتاج القانوني ليس لنا أن نقرّره — فنصف تماماً ما تفعله الخدمة، ونترك الحكم لأهله المؤهّلين له.
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.ولا يعمل بعدُ داخل المملكة، ولا ندّعي أي إقامة للبيانات إلى أن تنتقل الأحمال فعلاً — فهي أسهل ادّعاء يتحقّق منه العميل، ونحن نُفضّل أن نكسبه على أن نزعمه.