{"id":13148,"date":"2026-10-08T12:09:01","date_gmt":"2026-10-08T10:09:01","guid":{"rendered":"https:\/\/voctos.net\/arabic-site-search-normalization\/"},"modified":"2026-10-08T12:18:39","modified_gmt":"2026-10-08T10:18:39","slug":"arabic-site-search-normalization","status":"publish","type":"post","link":"https:\/\/voctos.net\/ar\/arabic-site-search-normalization\/","title":{"rendered":"\u062a\u0648\u062d\u064a\u062f \u0627\u0644\u0625\u0645\u0644\u0627\u0621 \u0641\u064a \u0627\u0644\u0628\u062d\u062b \u0627\u0644\u0639\u0631\u0628\u064a \u062f\u0627\u062e\u0644 \u0627\u0644\u0645\u0648\u0627\u0642\u0639: \u0627\u062e\u062a\u0628\u0631\u0646\u0627 20 \u0645\u062a\u062c\u0631\u064b\u0627 \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u064b\u0627 \u0639\u0631\u0628\u064a\u064b\u0627"},"content":{"rendered":"<p>Arabic site search still breaks on simple spelling differences. On 8 October 2026 we ran four spelling pairs through the on-site search of 20 online stores in Saudi Arabia, the UAE and Egypt. Only 4 of 20 returned the same products for every pair, and the taa marbuta versus haa pair split results on 10 of the 20.<\/p>\n<blockquote>\n<p><strong>Key takeaways<\/strong><\/p>\n<ul>\n<li>We searched 20 storefronts (12 Saudi, 3 UAE, 5 Egyptian) on 8 October 2026 with four spelling pairs. 4 of 20 returned the same products for every pair we tested: the three Amazon storefronts and a Saudi pharmacy chain.<\/li>\n<li>Taa marbuta versus haa was the weakest pair: the same results on 10 of 20 stores, a different ranking on 3 and different products on 7.<\/li>\n<li>Arabic-Indic digits returned zero products on 3 stores, and 5 of the 19 stores we could test on digits lost or changed results.<\/li>\n<li>All 4 Salla stores matched digits and all 4 split at least one letter pair. Both Zid stores we could test on digits returned nothing for Arabic-Indic numbers.<\/li>\n<li>Elasticsearch&#8217;s built-in arabic analyzer already chains decimal_digit and arabic_normalization, which together cover all four pairs.<\/li>\n<\/ul>\n<\/blockquote>\n<div style=\"display:flex;flex-wrap:wrap;gap:14px;margin:32px 0;\">\n<div style=\"flex:1 1 210px;border:1px solid #E5E7EB;border-radius:16px;padding:18px 18px 16px;background:#FCFCFE;\">\n<div style=\"font-family:Unbounded, system-ui, sans-serif;font-size:32px;line-height:1.05;font-weight:700;color:#7616F4;\">4 of 20<\/div>\n<div style=\"font-family:Unbounded, system-ui, sans-serif;font-size:13px;line-height:1.5;color:#0D172D;margin-top:10px;font-weight:600;\">Storefronts that returned the same products for every spelling pair we tested<\/div>\n<div style=\"font-family:Unbounded, system-ui, sans-serif;font-size:11px;line-height:1.4;color:#55617A;margin-top:7px;\">VOCTOS search test, 8 Oct 2026<\/div>\n<\/div>\n<div style=\"flex:1 1 210px;border:1px solid #E5E7EB;border-radius:16px;padding:18px 18px 16px;background:#FCFCFE;\">\n<div style=\"font-family:Unbounded, system-ui, sans-serif;font-size:32px;line-height:1.05;font-weight:700;color:#9BB725;\">10 of 20<\/div>\n<div style=\"font-family:Unbounded, system-ui, sans-serif;font-size:13px;line-height:1.5;color:#0D172D;margin-top:10px;font-weight:600;\">Stores that returned the same results for the taa marbuta and haa spellings<\/div>\n<div style=\"font-family:Unbounded, system-ui, sans-serif;font-size:11px;line-height:1.4;color:#55617A;margin-top:7px;\">VOCTOS search test, 8 Oct 2026<\/div>\n<\/div>\n<div style=\"flex:1 1 210px;border:1px solid #E5E7EB;border-radius:16px;padding:18px 18px 16px;background:#FCFCFE;\">\n<div style=\"font-family:Unbounded, system-ui, sans-serif;font-size:32px;line-height:1.05;font-weight:700;color:#0D172D;\">3 stores<\/div>\n<div style=\"font-family:Unbounded, system-ui, sans-serif;font-size:13px;line-height:1.5;color:#0D172D;margin-top:10px;font-weight:600;\">Returned zero products when the number was typed in Arabic-Indic digits<\/div>\n<div style=\"font-family:Unbounded, system-ui, sans-serif;font-size:11px;line-height:1.4;color:#55617A;margin-top:7px;\">VOCTOS search test, 8 Oct 2026<\/div>\n<\/div>\n<\/div>\n<h2>Results across 20 Arab storefronts<\/h2>\n<p>Most pairs worked on most stores, yet 16 of 20 stores failed at least one pair. Across 74 paired searches, 51 (69%) returned the same products for both spellings. Three returned the same matches in a different order, and 20 returned different products or none. Taa marbuta was the weakest pair and alef madda the strongest.<\/p>\n<p>Each pair is one product word typed two ways. We picked words that exist in each catalog, so a coffee store got coffee words and a pharmacy got skincare words. The table counts results as &#8220;first spelling vs variant&#8221;.<\/p>\n<table style=\"width:100%;border-collapse:collapse;font-size:14px\">\n<thead>\n<tr style=\"background:#0a2e1a;color:#fff\">\n<th style=\"padding:13px 16px;text-align:left;font-weight:600\">Store (country, sector, platform)<\/th>\n<th style=\"padding:13px 16px;text-align:left;font-weight:600\">Hamza on alef<\/th>\n<th style=\"padding:13px 16px;text-align:left;font-weight:600\">Taa marbuta vs haa<\/th>\n<th style=\"padding:13px 16px;text-align:left;font-weight:600\">Alef madda<\/th>\n<th style=\"padding:13px 16px;text-align:left;font-weight:600\">Arabic-Indic digits<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Amazon.sa (Saudi marketplace)<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Amazon.ae (UAE marketplace)<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Amazon.eg (Egyptian marketplace)<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Regional marketplace, Saudi storefront<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Different (50 vs 74)<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Regional marketplace, UAE storefront<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Different (3 of top 10 shared)<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Regional marketplace, Egyptian storefront<\/td>\n<td style=\"padding:12px 16px\">Different (78 vs 50)<\/td>\n<td style=\"padding:12px 16px\">Ranking differs<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Egyptian electronics retailer, Magento<\/td>\n<td style=\"padding:12px 16px\">Different (7 vs 42)<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Zero (45 vs 0)<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Saudi electronics and books retailer, hosted search API<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Ranking differs<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Saudi electronics retailer, hosted autosuggest<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Different (0 of 6 shared)<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Saudi coffee store, Salla<\/td>\n<td style=\"padding:12px 16px\">Different (23 vs 21)<\/td>\n<td style=\"padding:12px 16px\">Ranking differs<\/td>\n<td style=\"padding:12px 16px\">Different (16 vs 7)<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Saudi honey store, Salla<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Different (4 vs 2)<\/td>\n<td style=\"padding:12px 16px\">Not tested<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Saudi dates store, Salla<\/td>\n<td style=\"padding:12px 16px\">Different (11 vs 4)<\/td>\n<td style=\"padding:12px 16px\">Different (127 vs 26)<\/td>\n<td style=\"padding:12px 16px\">Not tested<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Saudi oud and perfume store, Salla<\/td>\n<td style=\"padding:12px 16px\">Different (5 vs 1)<\/td>\n<td style=\"padding:12px 16px\">Different (5 vs 4)<\/td>\n<td style=\"padding:12px 16px\">Not tested<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Saudi coffee roaster, Zid<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Different (44 vs 42)<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Zero (6 vs 0)<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Saudi dates store, Zid<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Not tested<\/td>\n<td style=\"padding:12px 16px\">Zero (1 vs 0)<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Saudi nut butter store, Zid<\/td>\n<td style=\"padding:12px 16px\">Different (4 vs 5)<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Not tested<\/td>\n<td style=\"padding:12px 16px\">Not tested<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Egyptian marketplace<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Different (4 of top 10 shared)<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Egyptian electronics and appliance retailer, custom front end<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Different (1,171 vs 172)<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">UAE electronics retailer, WordPress front end<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Different (number ignored)<\/td>\n<\/tr>\n<tr style=\"background:#fff;border-bottom:1px solid #e5e7eb\">\n<td style=\"padding:12px 16px;font-weight:600;color:#0a2e1a\">Saudi pharmacy chain<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<td style=\"padding:12px 16px\">Same<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#8220;Not tested&#8221; means the catalog had no product word with that feature, so a pair would have compared zero with zero. Five food and perfume stores had no word with alef madda, and one store had no numbers in its product names.<\/p>\n<figure style=\"margin:34px 0;padding:22px 24px;border:1px solid #E5E7EB;border-radius:18px;background:#FCFCFE;overflow-x:auto;-webkit-overflow-scrolling:touch;\"><svg viewBox=\"0 0 860 290\" role=\"img\" aria-label=\"Bar chart: of 20 Arab storefronts, 14 of 20 returned the same results for the hamza pair, 10 of 20 for taa marbuta plus 3 with the same matches in a different order, 13 of 15 tested for alef madda, and 14 of 19 tested for Arabic-Indic digits.\" style=\"width:100%;min-width:640px;height:auto;display:block;font-family:Unbounded, system-ui, sans-serif\"><title>Stores returning the same results for both spellings<\/title><text x=\"0\" y=\"22\" font-size=\"15\" font-weight=\"700\" fill=\"#0D172D\">Stores returning the same results for both spellings<\/text><text x=\"0\" y=\"44\" font-size=\"11.5\" fill=\"#55617A\">Purple = same results. Lime = same matches, different order. Grey = stores tested.<\/text><text x=\"0\" y=\"90\" font-size=\"12.5\" fill=\"#0D172D\">Hamza on alef<\/text><rect x=\"210\" y=\"75\" width=\"400\" height=\"22\" rx=\"6\" fill=\"#F1F2F6\"><\/rect><rect x=\"210\" y=\"75\" width=\"280\" height=\"22\" rx=\"6\" fill=\"#7616F4\"><\/rect><text x=\"624\" y=\"90\" font-size=\"12.5\" font-weight=\"600\" fill=\"#0D172D\">14 of 20<\/text><text x=\"0\" y=\"135\" font-size=\"12.5\" fill=\"#0D172D\">Taa marbuta vs haa<\/text><rect x=\"210\" y=\"120\" width=\"400\" height=\"22\" rx=\"6\" fill=\"#F1F2F6\"><\/rect><rect x=\"210\" y=\"120\" width=\"200\" height=\"22\" rx=\"6\" fill=\"#7616F4\"><\/rect><rect x=\"410\" y=\"120\" width=\"60\" height=\"22\" rx=\"0\" fill=\"#9BB725\"><\/rect><text x=\"624\" y=\"135\" font-size=\"12.5\" font-weight=\"600\" fill=\"#0D172D\">10 of 20 (+3)<\/text><text x=\"0\" y=\"180\" font-size=\"12.5\" fill=\"#0D172D\">Alef madda<\/text><rect x=\"210\" y=\"165\" width=\"300\" height=\"22\" rx=\"6\" fill=\"#F1F2F6\"><\/rect><rect x=\"210\" y=\"165\" width=\"260\" height=\"22\" rx=\"6\" fill=\"#7616F4\"><\/rect><text x=\"624\" y=\"180\" font-size=\"12.5\" font-weight=\"600\" fill=\"#0D172D\">13 of 15<\/text><text x=\"0\" y=\"225\" font-size=\"12.5\" fill=\"#0D172D\">Arabic-Indic digits<\/text><rect x=\"210\" y=\"210\" width=\"380\" height=\"22\" rx=\"6\" fill=\"#F1F2F6\"><\/rect><rect x=\"210\" y=\"210\" width=\"280\" height=\"22\" rx=\"6\" fill=\"#7616F4\"><\/rect><text x=\"624\" y=\"225\" font-size=\"12.5\" font-weight=\"600\" fill=\"#0D172D\">14 of 19<\/text><text x=\"0\" y=\"274\" font-size=\"11.5\" fill=\"#55617A\">Source: VOCTOS test of 20 storefronts in Saudi Arabia, the UAE and Egypt, 8 Oct 2026.<\/text><\/svg><\/figure>\n<h2>Why do four spellings of one word split Arabic search results?<\/h2>\n<p>Each variant is a different Unicode character, and a search engine treats two characters as equal only when its analyzer maps them to one form. We found both forms inside the stores themselves. Four stores in our sample spelled their own products with the variant form, so a shopper who types the textbook spelling can miss real stock.<\/p>\n<p>The coffee store&#8217;s own menu spells coffee, <em>qahwa<\/em>, with a final haa. The honey store writes <em>habba<\/em> (piece) with haa, the Salla dates store writes <em>abyad<\/em> (white) with no hamza, and the perfume store writes <em>a&#8217;wad<\/em> (incense sticks) with no hamza. Here is what each pair changes at the code point level:<\/p>\n<ul>\n<li><strong>Hamza on alef:<\/strong> alef with hamza above (U+0623) or below (U+0625) against bare alef (U+0627).<\/li>\n<li><strong>Alef madda:<\/strong> U+0622 against bare alef U+0627, as in one Arabic spelling of <em>iPhone<\/em>.<\/li>\n<li><strong>Taa marbuta vs haa:<\/strong> U+0629 against U+0647 at the end of a word, as in <em>sa&#8217;a<\/em> (watch).<\/li>\n<li><strong>Digits:<\/strong> Arabic-Indic digits U+0660 to U+0669 against 0 to 9. The W3C <a href=\"https:\/\/www.w3.org\/TR\/alreq\/\" target=\"_blank\" rel=\"noopener\">Arabic Layout Requirements<\/a> list Arabic-Indic digits as the ones used in Egypt and Saudi Arabia, and Extended Arabic-Indic digits (U+06F0 to U+06F9) for Iran and Afghanistan.<\/li>\n<\/ul>\n<p>Lucene&#8217;s <a href=\"https:\/\/lucene.apache.org\/core\/9_12_0\/analysis\/common\/org\/apache\/lucene\/analysis\/ar\/ArabicNormalizer.html\" target=\"_blank\" rel=\"noopener\">ArabicNormalizer<\/a> covers the first three: it turns the hamza and madda alef forms into bare alef, taa marbuta into haa and alef maksura into yaa, and removes the short-vowel marks and tatweel. Digits need a separate filter.<\/p>\n<h2>Which stores and platforms lost results?<\/h2>\n<p>The failures clustered by platform. The three Amazon storefronts and one Saudi pharmacy chain matched every pair. Salla stores matched every digit query but split at least one letter pair in all 4 stores. Zid stores matched most letter pairs and returned nothing for Arabic-Indic digits in both stores we could test.<\/p>\n<p>The widest single gap came from an Egyptian electronics retailer on Magento. Typing the word for devices, <em>ajhiza<\/em>, with hamza returned 7 product cards; without hamza it returned 42, and none of the 7 appeared in the 42. The same store returned 45 cards for an iPhone 15 query in Western digits and none for the identical query in Arabic-Indic digits.<\/p>\n<p>Three stores returned zero products when the shopper typed the same number in Arabic-Indic digits. Two more changed the results. An Egyptian appliance retailer dropped from 1,171 results to 172. A UAE electronics retailer ignored the number and showed iPhone 18 cases for an iPhone 15 query.<\/p>\n<p>The subtlest case was a Saudi retailer on a hosted search API. Both watch spellings returned exactly 1,396 results. Matching was normalized, yet none of the first 40 products overlapped. The API response showed pinned products attached to the taa marbuta spelling only, so the merchandising rule fired for one spelling and not the other.<\/p>\n<figure style=\"margin:36px 0;padding:22px 26px 22px 24px;border-left:5px solid #9BB725;background:#F6F8EE;border-radius:0 16px 16px 0;\">\n<p style=\"margin:0;font-family:Unbounded, system-ui, sans-serif;font-size:18px;line-height:1.6;font-weight:600;color:#0D172D;\">Three stores returned zero products when the shopper typed the same number in Arabic-Indic digits.<\/p>\n<\/figure>\n<figure style=\"margin:34px 0;padding:22px 24px;border:1px solid #E5E7EB;border-radius:18px;background:#FCFCFE;overflow-x:auto;-webkit-overflow-scrolling:touch;\"><svg viewBox=\"0 0 860 520\" role=\"img\" aria-label=\"Paired bar chart of five wide gaps: Egyptian Magento retailer hamza 7 vs 42; Saudi Salla dates store taa marbuta 127 vs haa 26; Egyptian custom retailer Western digits 1,171 vs Arabic-Indic 172; Saudi Salla coffee store madda 16 vs plain alef 7; Egyptian Magento retailer Western digits 45 vs Arabic-Indic 0.\" style=\"width:100%;min-width:640px;height:auto;display:block;font-family:Unbounded, system-ui, sans-serif\"><title>Five of the widest gaps between two spellings of one query<\/title><text x=\"0\" y=\"22\" font-size=\"15\" font-weight=\"700\" fill=\"#0D172D\">Five of the widest gaps between two spellings of one query<\/text><text x=\"0\" y=\"44\" font-size=\"11.5\" fill=\"#55617A\">Bar length indexed to the larger count in each pair. Numbers are the actual results.<\/text><text x=\"0\" y=\"80\" font-size=\"12.5\" font-weight=\"600\" fill=\"#0D172D\">Egyptian electronics retailer (Magento), hamza<\/text><text x=\"0\" y=\"103\" font-size=\"11.5\" fill=\"#55617A\">With hamza<\/text><rect x=\"150\" y=\"90\" width=\"400\" height=\"18\" rx=\"5\" fill=\"#F1F2F6\"><\/rect><rect x=\"150\" y=\"90\" width=\"67\" height=\"18\" rx=\"5\" fill=\"#7616F4\"><\/rect><text x=\"562\" y=\"104\" font-size=\"12\" font-weight=\"600\" fill=\"#0D172D\">7<\/text><text x=\"0\" y=\"127\" font-size=\"11.5\" fill=\"#55617A\">Plain alef<\/text><rect x=\"150\" y=\"114\" width=\"400\" height=\"18\" rx=\"5\" fill=\"#9BB725\"><\/rect><text x=\"562\" y=\"128\" font-size=\"12\" font-weight=\"600\" fill=\"#0D172D\">42<\/text><text x=\"0\" y=\"168\" font-size=\"12.5\" font-weight=\"600\" fill=\"#0D172D\">Saudi dates store (Salla), taa marbuta<\/text><text x=\"0\" y=\"191\" font-size=\"11.5\" fill=\"#55617A\">Taa marbuta<\/text><rect x=\"150\" y=\"178\" width=\"400\" height=\"18\" rx=\"5\" fill=\"#7616F4\"><\/rect><text x=\"562\" y=\"192\" font-size=\"12\" font-weight=\"600\" fill=\"#0D172D\">127<\/text><text x=\"0\" y=\"215\" font-size=\"11.5\" fill=\"#55617A\">Haa<\/text><rect x=\"150\" y=\"202\" width=\"400\" height=\"18\" rx=\"5\" fill=\"#F1F2F6\"><\/rect><rect x=\"150\" y=\"202\" width=\"82\" height=\"18\" rx=\"5\" fill=\"#9BB725\"><\/rect><text x=\"562\" y=\"216\" font-size=\"12\" font-weight=\"600\" fill=\"#0D172D\">26<\/text><text x=\"0\" y=\"256\" font-size=\"12.5\" font-weight=\"600\" fill=\"#0D172D\">Egyptian appliance retailer (custom), digits<\/text><text x=\"0\" y=\"279\" font-size=\"11.5\" fill=\"#55617A\">Western<\/text><rect x=\"150\" y=\"266\" width=\"400\" height=\"18\" rx=\"5\" fill=\"#7616F4\"><\/rect><text x=\"562\" y=\"280\" font-size=\"12\" font-weight=\"600\" fill=\"#0D172D\">1,171<\/text><text x=\"0\" y=\"303\" font-size=\"11.5\" fill=\"#55617A\">Arabic-Indic<\/text><rect x=\"150\" y=\"290\" width=\"400\" height=\"18\" rx=\"5\" fill=\"#F1F2F6\"><\/rect><rect x=\"150\" y=\"290\" width=\"59\" height=\"18\" rx=\"5\" fill=\"#9BB725\"><\/rect><text x=\"562\" y=\"304\" font-size=\"12\" font-weight=\"600\" fill=\"#0D172D\">172<\/text><text x=\"0\" y=\"344\" font-size=\"12.5\" font-weight=\"600\" fill=\"#0D172D\">Saudi coffee store (Salla), alef madda<\/text><text x=\"0\" y=\"367\" font-size=\"11.5\" fill=\"#55617A\">With madda<\/text><rect x=\"150\" y=\"354\" width=\"400\" height=\"18\" rx=\"5\" fill=\"#7616F4\"><\/rect><text x=\"562\" y=\"368\" font-size=\"12\" font-weight=\"600\" fill=\"#0D172D\">16<\/text><text x=\"0\" y=\"391\" font-size=\"11.5\" fill=\"#55617A\">Plain alef<\/text><rect x=\"150\" y=\"378\" width=\"400\" height=\"18\" rx=\"5\" fill=\"#F1F2F6\"><\/rect><rect x=\"150\" y=\"378\" width=\"175\" height=\"18\" rx=\"5\" fill=\"#9BB725\"><\/rect><text x=\"562\" y=\"392\" font-size=\"12\" font-weight=\"600\" fill=\"#0D172D\">7<\/text><text x=\"0\" y=\"432\" font-size=\"12.5\" font-weight=\"600\" fill=\"#0D172D\">Egyptian electronics retailer (Magento), digits<\/text><text x=\"0\" y=\"455\" font-size=\"11.5\" fill=\"#55617A\">Western<\/text><rect x=\"150\" y=\"442\" width=\"400\" height=\"18\" rx=\"5\" fill=\"#7616F4\"><\/rect><text x=\"562\" y=\"456\" font-size=\"12\" font-weight=\"600\" fill=\"#0D172D\">45<\/text><text x=\"0\" y=\"479\" font-size=\"11.5\" fill=\"#55617A\">Arabic-Indic<\/text><rect x=\"150\" y=\"466\" width=\"400\" height=\"18\" rx=\"5\" fill=\"#F1F2F6\"><\/rect><rect x=\"150\" y=\"466\" width=\"4\" height=\"18\" rx=\"2\" fill=\"#9BB725\"><\/rect><text x=\"562\" y=\"480\" font-size=\"12\" font-weight=\"600\" fill=\"#0D172D\">0<\/text><text x=\"0\" y=\"508\" font-size=\"11.5\" fill=\"#55617A\">Source: VOCTOS test, 8 Oct 2026. Total results or page-1 cards, as each store reports them.<\/text><\/svg><\/figure>\n<h2>How do you normalize Arabic in Elasticsearch or OpenSearch?<\/h2>\n<p>Run one analyzer at index time and query time, and make sure it contains arabic_normalization and decimal_digit. The built-in arabic analyzer in Elasticsearch already chains lowercase, decimal_digit, stop words, arabic_normalization and a stemmer, so a field mapped with it collapses all four of the pairs we tested.<\/p>\n<p>Elastic&#8217;s <a href=\"https:\/\/www.elastic.co\/docs\/reference\/text-analysis\/analysis-lang-analyzer\" target=\"_blank\" rel=\"noopener\">language analyzer reference<\/a> shows that chain as a rebuilt custom analyzer. The <a href=\"https:\/\/www.elastic.co\/docs\/reference\/text-analysis\/analysis-decimal-digit-tokenfilter\" target=\"_blank\" rel=\"noopener\">decimal_digit filter<\/a> converts every digit in the Unicode Decimal_Number category to 0 to 9. For product names we prefer a lighter chain without the stemmer. Add a stemmed subfield later if recall testing asks for it:<\/p>\n<pre><code>PUT \/products\n{\n  \"settings\": {\n    \"analysis\": {\n      \"analyzer\": {\n        \"ar_product\": {\n          \"tokenizer\": \"standard\",\n          \"filter\": [\"lowercase\", \"decimal_digit\", \"arabic_normalization\"]\n        }\n      }\n    }\n  },\n  \"mappings\": {\n    \"properties\": {\n      \"name\": { \"type\": \"text\", \"analyzer\": \"ar_product\" }\n    }\n  }\n}\n\nGET \/products\/_analyze\n{\n  \"analyzer\": \"ar_product\",\n  \"text\": \"\\u0623\\u062C\\u0647\\u0632\\u0629 \\u0661\\u0665\"\n}\n\/\/ expected tokens: \"\\u0627\\u062C\\u0647\\u0632\\u0647\" and \"15\"<\/code><\/pre>\n<p>JSON accepts \\u escapes, so you can paste test strings into _analyze without an Arabic keyboard. The <a href=\"https:\/\/www.elastic.co\/docs\/reference\/elasticsearch\/plugins\/analysis-icu-folding\" target=\"_blank\" rel=\"noopener\">icu_folding filter<\/a> applies Unicode-wide folding rules based on UTR#30. Run your own catalog terms through _analyze before you swap it in. OpenSearch documents a built-in <a href=\"https:\/\/docs.opensearch.org\/latest\/analyzers\/language-analyzers\/arabic\/\" target=\"_blank\" rel=\"noopener\">arabic analyzer<\/a> as well; check its filter chain the same way.<\/p>\n<p>If you would rather have a developer run these four pairs against your own catalog and fix the analyzer, <a href=\"https:\/\/www.voctos.com\/web-development\/\" target=\"_blank\" rel=\"noopener\">get my store&#8217;s Arabic search checked<\/a>.<\/p>\n<h2>Algolia settings and MySQL collations<\/h2>\n<p>Algolia ignores four common Arabic diacritics by default and treats the Arabic and Persian forms of kaf and yaa as equal. Its normalization guide lists no rule for hamza, taa marbuta or Arabic-Indic digits. Add those yourself with customNormalization. In MySQL, test your collation with WEIGHT_STRING() before trusting it, and keep a normalized column for search.<\/p>\n<p>Algolia&#8217;s <a href=\"https:\/\/www.algolia.com\/doc\/guides\/managing-results\/optimize-search-results\/handling-natural-languages-nlp\/in-depth\/normalization\/\" target=\"_blank\" rel=\"noopener\">normalization guide<\/a> says normalization runs at indexing and query time and cannot be turned off. The <a href=\"https:\/\/www.algolia.com\/doc\/api-reference\/api-parameters\/customNormalization\/\" target=\"_blank\" rel=\"noopener\">customNormalization<\/a> setting maps one input character to at most two output characters, and it does not apply to decomposed sequences built with combining marks:<\/p>\n<pre><code>{\n  \"customNormalization\": {\n    \"default\": {\n      \"\\u0623\": \"\\u0627\", \"\\u0625\": \"\\u0627\", \"\\u0622\": \"\\u0627\",\n      \"\\u0629\": \"\\u0647\",\n      \"\\u0660\": \"0\", \"\\u0661\": \"1\", \"\\u0662\": \"2\", \"\\u0663\": \"3\", \"\\u0664\": \"4\",\n      \"\\u0665\": \"5\", \"\\u0666\": \"6\", \"\\u0667\": \"7\", \"\\u0668\": \"8\", \"\\u0669\": \"9\"\n    }\n  }\n}<\/code><\/pre>\n<p>MySQL&#8217;s <a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.4\/en\/charset-unicode-sets.html\" target=\"_blank\" rel=\"noopener\">Unicode collation documentation<\/a> describes utf8mb4_0900_ai_ci as accent-insensitive and case-insensitive, built on UCA 9.0.0. Its list of language-specific collations includes Persian and no Arabic tailoring. Check what your collation does with the hamza forms:<\/p>\n<pre><code>SELECT\n  HEX(WEIGHT_STRING(_utf8mb4 0xD8A3 COLLATE utf8mb4_0900_ai_ci)) AS alef_hamza_above,\n  HEX(WEIGHT_STRING(_utf8mb4 0xD8A7 COLLATE utf8mb4_0900_ai_ci)) AS bare_alef;\n-- different weights = LIKE and = treat the two spellings as different words<\/code><\/pre>\n<p>For a LIKE-based search we would not rely on the collation at all. Store a normalized copy of the name in its own indexed column, built by the function in the next section, and query that column.<\/p>\n<h2>A normalization function in JavaScript and PHP<\/h2>\n<p>When search runs on a database query or a small in-house index, normalize in application code. Write a normalized copy of each product name when the product is saved, and pass every incoming query through the same function before it reaches the index. The mapping below mirrors Lucene&#8217;s ArabicNormalizer and adds both Arabic-Indic digit ranges.<\/p>\n<pre><code>\/\/ JavaScript: run on product text at save time AND on every search query\nconst AR_MAP = {\n  '\\u0622': '\\u0627', \/\/ alef with madda above -&gt; alef\n  '\\u0623': '\\u0627', \/\/ alef with hamza above -&gt; alef\n  '\\u0625': '\\u0627', \/\/ alef with hamza below -&gt; alef\n  '\\u0629': '\\u0647', \/\/ taa marbuta -&gt; haa\n  '\\u0649': '\\u064A', \/\/ alef maksura -&gt; yaa\n};\n\nexport function normalizeArabic(input) {\n  return input\n    .normalize('NFC')\n    .replace(\/[\\u064B-\\u0652\\u0640]\/g, '') \/\/ short vowels, shadda, sukun, tatweel\n    .replace(\/[\\u0622\\u0623\\u0625\\u0629\\u0649]\/g, (ch) =&gt; AR_MAP[ch])\n    .replace(\/[\\u0660-\\u0669]\/g, (d) =&gt; String(d.charCodeAt(0) - 0x0660))\n    .replace(\/[\\u06F0-\\u06F9]\/g, (d) =&gt; String(d.charCodeAt(0) - 0x06F0))\n    .toLowerCase()\n    .trim();\n}<\/code><\/pre>\n<pre><code>\/\/ PHP 7.4+ (arrow functions): same mapping, using \\u{...} string escapes and \/u regexes\nfunction normalize_arabic(string $s): string {\n    $s = preg_replace('\/[\\x{064B}-\\x{0652}\\x{0640}]\/u', '', $s);\n    $s = strtr($s, [\n        \"\\u{0622}\" =&gt; \"\\u{0627}\", \"\\u{0623}\" =&gt; \"\\u{0627}\", \"\\u{0625}\" =&gt; \"\\u{0627}\",\n        \"\\u{0629}\" =&gt; \"\\u{0647}\", \"\\u{0649}\" =&gt; \"\\u{064A}\",\n    ]);\n    $s = preg_replace_callback('\/[\\x{0660}-\\x{0669}]\/u',\n        fn ($m) =&gt; (string) (mb_ord($m[0], 'UTF-8') - 0x0660), $s);\n    $s = preg_replace_callback('\/[\\x{06F0}-\\x{06F9}]\/u',\n        fn ($m) =&gt; (string) (mb_ord($m[0], 'UTF-8') - 0x06F0), $s);\n    return mb_strtolower(trim($s), 'UTF-8');\n}<\/code><\/pre>\n<p>We ran the JavaScript version against the electronics pairs from our test, and each pair produced identical output. <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/String\/normalize\" target=\"_blank\" rel=\"noopener\">String.prototype.normalize<\/a> runs first so composed and decomposed sequences compare equal, and the PHP <a href=\"https:\/\/www.php.net\/manual\/en\/language.types.string.php\" target=\"_blank\" rel=\"noopener\">\\u{&#8230;} escape<\/a> needs double-quoted strings.<\/p>\n<h2>What can Salla and Zid store owners change?<\/h2>\n<p>Not the matching engine. Neither platform exposes analyzer settings to merchants in the documentation we read, so the levers are product text, theme code, search apps and testing. In our sample Salla matched digits in all 4 stores and split letter pairs, while Zid matched most letter pairs and failed Arabic-Indic digits in both stores we could test.<\/p>\n<p>What owners and theme developers can change:<\/p>\n<ul>\n<li><strong>Product names:<\/strong> put the spelling your customers type in the product name and the variant in the description. Four stores in our sample used variant spellings in their own catalogs, so start by searching your catalog for both forms.<\/li>\n<li><strong>Tags:<\/strong> Salla&#8217;s Merchant API has <a href=\"https:\/\/docs.salla.dev\/841793f0.md\" target=\"_blank\" rel=\"noopener\">Product Tags endpoints<\/a>. The docs do not say whether storefront search reads tags, so tag one product with a variant and search for it first.<\/li>\n<li><strong>Theme code on Salla:<\/strong> the Twilight SDK exposes <a href=\"https:\/\/docs.salla.dev\/twilight-sdk\/product-search-products.md\" target=\"_blank\" rel=\"noopener\">salla.product.search<\/a>, which the Search web component uses. A theme can clean the query before it is sent, but that only helps when the catalog text is written the same way.<\/li>\n<li><strong>Theme code on Zid:<\/strong> the live search box on the Zid stores we tested called a same-origin products API with the raw query. Converting Arabic-Indic digits to Western digits in the query before that call would have turned both zero-result cases into matches, because those catalogs wrote numbers in Western digits.<\/li>\n<li><strong>Search apps:<\/strong> third-party search apps for Salla and Zid advertise Arabic-aware matching. Test the four pairs on a trial first.<\/li>\n<\/ul>\n<p>What they cannot change: the platform&#8217;s tokenizer, normalization rules or default ranking. Our <a href=\"https:\/\/voctos.net\/salla-zid-store-seo-audit\/\">Salla and Zid store SEO audit<\/a> covers the crawlable side of the same stores.<\/p>\n<h2>Our read<\/h2>\n<p>Treat Arabic normalization as a correctness bug. A zero-result page for a product you stock ends the search, and no ranking change rescues a product the engine never matched. Fix digits first because they cause the zero-result failures, then hamza and taa marbuta, then key every merchandising rule to the normalized query.<\/p>\n<p>Digits are the cheapest fix. The Amazon storefronts show the whole job is solvable across three Arab markets at once: 12 of 12 pair tests matched. The hosted-search case shows the trap on the other side. Matching was normalized, but the pinned products were keyed to one spelling, so shoppers who typed the haa spelling saw a different first page.<\/p>\n<p>Normalize once, in one function, and run it on both sides of the search. Over-normalizing has a cost: mapping taa marbuta to haa merges words that differ only in that last letter. For product search we accept that trade, because missing stock costs more than a wider result set. Dictionaries need stricter rules. Keep normalization out of URLs and display text; it belongs in the index only. Our guide to <a href=\"https:\/\/voctos.net\/arabic-url-slugs-seo\/\">Arabic URL slugs<\/a> covers the URL side.<\/p>\n<figure style=\"margin:36px 0;padding:22px 26px 22px 24px;border-left:5px solid #9BB725;background:#F6F8EE;border-radius:0 16px 16px 0;\">\n<p style=\"margin:0;font-family:Unbounded, system-ui, sans-serif;font-size:18px;line-height:1.6;font-weight:600;color:#0D172D;\">Normalize once, in one function, and run it on both sides of the search.<\/p>\n<\/figure>\n<h2>How we checked<\/h2>\n<p>We searched 20 storefronts on Thursday 8 October 2026, between about 12:00 and 12:50 Cairo time. We used desktop Chrome on a Cairo connection, signed out, and added nothing to a cart. Each store got one run of at least eight queries plus a same-query control, so run-to-run noise was measured but not repeated on another day.<\/p>\n<ul>\n<li>Sample: 12 Saudi, 3 UAE and 5 Egyptian storefronts, including 4 Salla and 3 Zid stores identified from their page source. A Kuwaiti retailer blocked us with an access-denied page and is not counted. Amazon and the regional marketplace count once per country storefront.<\/li>\n<li>Reading results: the store&#8217;s own search URL or search endpoint, called from the store&#8217;s own origin, or the results page loaded after typing in the search box.<\/li>\n<li>Scoring: &#8220;Same&#8221; means counts within 1% and at least 8 of the first spelling&#8217;s top 10 products found on the variant&#8217;s first page. Sponsored listings were excluded on Amazon.<\/li>\n<li>Limits: one point in time; page-1 counts where a store shows no total; Salla counts capped at 150; one Saudi electronics retailer measured on its six-product dropdown because its search box opens no results page; no field data on how often shoppers type each spelling.<\/li>\n<\/ul>\n<h2>FAQ<\/h2>\n<h3>Why does my store search show nothing for a product we stock?<\/h3>\n<p>Check spelling variants first: two valid spellings of one word can reach different products. In our test of 20 Arab stores on 8 October 2026, 3 returned zero products for a number in Arabic-Indic digits. One Egyptian store returned 7 products instead of 42 when the word carried a hamza. Test four pairs on your search box.<\/p>\n<h3>Does Arabic normalization make search results less precise?<\/h3>\n<p>It widens them. Mapping hamza and madda forms to bare alef and taa marbuta to haa merges words that differ only in those letters, so result sets grow. For product search we accept that trade, because a product that never appears in results cannot be bought. Dictionaries and religious-text search need stricter rules.<\/p>\n<h3>Can I fix Arabic search on Salla or Zid without a developer?<\/h3>\n<p>Partly. You cannot change the platform&#8217;s matching rules, but you can write product names in the spelling customers type, add the variant to descriptions, and test a search app on trial. In our test Salla handled digits in all 4 stores, while both Zid stores we tested on digits failed Arabic-Indic numbers.<\/p>\n<h3>Do Arabic-Indic digits matter if our catalog uses Western numbers?<\/h3>\n<p>Yes. The mismatch starts in the query, so a clean catalog does not prevent it. The W3C Arabic Layout Requirements list Arabic-Indic digits as used in Egypt and Saudi Arabia. In our test 5 of 19 stores lost or changed results when a shopper typed the same number in Arabic-Indic digits, including 3 that showed nothing.<\/p>\n<h3>How do I test my own store&#8217;s Arabic search?<\/h3>\n<p>Pick four product words from your catalog: one with hamza on alef, one ending in taa marbuta, one with alef madda and one containing a number. Search each word both ways, count the results and compare the first ten products. Any gap means your index and query are normalized differently.<\/p>\n<p>A better test than &#8220;does our engine support Arabic&#8221; is simple: do two spellings of the same product word reach the same products? If your stack is Elasticsearch, OpenSearch, Algolia or your own code, add the normalization above to the index and the query, then rerun the four pairs. If you are on Salla or Zid, fix the catalog spelling first and test digits before anything else. Slow results pages are a separate fix, covered in our <a href=\"https:\/\/voctos.net\/core-web-vitals-arab-websites\/\">Core Web Vitals study of Arab websites<\/a>. If you want your product pages found in Google as well as in your own search box, <a href=\"https:\/\/www.voctos.com\/seo\/\" target=\"_blank\" rel=\"noopener\">help me get my Arabic product pages ranking<\/a>.<\/p>\n<p><script type=\"application\/ld+json\">\n{\n \"@context\": \"https:\/\/schema.org\",\n \"@graph\": [\n  {\n   \"@type\": \"BlogPosting\",\n   \"@id\": \"https:\/\/voctos.net\/arabic-site-search-normalization\/#article\",\n   \"headline\": \"Arabic Site Search Normalization: 20 Arab Online Stores Tested\",\n   \"description\": \"We searched 20 Arab online stores with four Arabic spelling pairs. Only 4 returned the same products each time. Test data plus Elasticsearch and JS fixes.\",\n   \"datePublished\": \"2026-10-08\",\n   \"dateModified\": \"2026-10-08\",\n   \"inLanguage\": \"en\",\n   \"author\": {\n    \"@type\": \"Person\",\n    \"name\": \"Reem Sameh\",\n    \"jobTitle\": \"Senior Full-Stack Web Developer\",\n    \"url\": \"https:\/\/voctos.net\/team\/reem-sameh\/\",\n    \"worksFor\": {\n     \"@type\": \"Organization\",\n     \"name\": \"VOCTOS\",\n     \"url\": \"https:\/\/www.voctos.com\/\"\n    }\n   },\n   \"publisher\": {\n    \"@type\": \"Organization\",\n    \"name\": \"VOCTOS\",\n    \"url\": \"https:\/\/www.voctos.com\/\",\n    \"logo\": {\n     \"@type\": \"ImageObject\",\n     \"url\": \"https:\/\/voctos.net\/wp-content\/themes\/voctos-blog\/assets\/img\/logo.png\"\n    }\n   },\n   \"mainEntityOfPage\": {\n    \"@type\": \"WebPage\",\n    \"@id\": \"https:\/\/voctos.net\/arabic-site-search-normalization\/\"\n   }\n  },\n  {\n   \"@type\": \"Dataset\",\n   \"name\": \"VOCTOS Arabic on-site search spelling test, October 2026\",\n   \"description\": \"Result counts and top-10 overlap for four Arabic spelling pairs (hamza on alef, taa marbuta vs haa, alef madda, Western vs Arabic-Indic digits) searched on 20 online storefronts in Saudi Arabia, the UAE and Egypt on 8 October 2026.\",\n   \"creator\": {\n    \"@type\": \"Organization\",\n    \"name\": \"VOCTOS\",\n    \"url\": \"https:\/\/www.voctos.com\/\"\n   },\n   \"temporalCoverage\": \"2026-10-08\",\n   \"spatialCoverage\": [\n    \"Saudi Arabia\",\n    \"United Arab Emirates\",\n    \"Egypt\"\n   ],\n   \"variableMeasured\": [\n    \"Search result count per spelling\",\n    \"Top-10 product overlap between spellings\"\n   ],\n   \"isAccessibleForFree\": true\n  },\n  {\n   \"@type\": \"FAQPage\",\n   \"mainEntity\": [\n    {\n     \"@type\": \"Question\",\n     \"name\": \"Why does my store search show nothing for a product we stock?\",\n     \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Check spelling variants first: two valid spellings of one word can reach different products. In our test of 20 Arab stores on 8 October 2026, 3 returned zero products for a number in Arabic-Indic digits. One Egyptian store returned 7 products instead of 42 when the word carried a hamza. Test four pairs on your search box.\"\n     }\n    },\n    {\n     \"@type\": \"Question\",\n     \"name\": \"Does Arabic normalization make search results less precise?\",\n     \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"It widens them. Mapping hamza and madda forms to bare alef and taa marbuta to haa merges words that differ only in those letters, so result sets grow. For product search we accept that trade, because a product that never appears in results cannot be bought. Dictionaries and religious-text search need stricter rules.\"\n     }\n    },\n    {\n     \"@type\": \"Question\",\n     \"name\": \"Can I fix Arabic search on Salla or Zid without a developer?\",\n     \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Partly. You cannot change the platform's matching rules, but you can write product names in the spelling customers type, add the variant to descriptions, and test a search app on trial. In our test Salla handled digits in all 4 stores, while both Zid stores we tested on digits failed Arabic-Indic numbers.\"\n     }\n    },\n    {\n     \"@type\": \"Question\",\n     \"name\": \"Do Arabic-Indic digits matter if our catalog uses Western numbers?\",\n     \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Yes. The mismatch starts in the query, so a clean catalog does not prevent it. The W3C Arabic Layout Requirements list Arabic-Indic digits as used in Egypt and Saudi Arabia. In our test 5 of 19 stores lost or changed results when a shopper typed the same number in Arabic-Indic digits, including 3 that showed nothing.\"\n     }\n    },\n    {\n     \"@type\": \"Question\",\n     \"name\": \"How do I test my own store's Arabic search?\",\n     \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Pick four product words from your catalog: one with hamza on alef, one ending in taa marbuta, one with alef madda and one containing a number. Search each word both ways, count the results and compare the first ten products. Any gap means your index and query are normalized differently.\"\n     }\n    }\n   ]\n  }\n ]\n}\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0628\u062d\u062b\u0646\u0627 \u0641\u064a 20 \u0645\u062a\u062c\u0631\u064b\u0627 \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u064b\u0627 \u0639\u0631\u0628\u064a\u064b\u0627 \u0628\u0623\u0631\u0628\u0639\u0629 \u0623\u0632\u0648\u0627\u062c \u0645\u0646 \u0627\u0644\u0635\u064a\u063a \u0627\u0644\u0625\u0645\u0644\u0627\u0626\u064a\u0629 \u0627\u0644\u0639\u0631\u0628\u064a\u0629. 4 \u0645\u062a\u0627\u062c\u0631 \u0641\u0642\u0637 \u0623\u0639\u0627\u062f\u062a \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0646\u0641\u0633\u0647\u0627 \u0641\u064a \u0643\u0644 \u0645\u0631\u0629\u060c \u06483 \u0644\u0645 \u062a\u064f\u0638\u0647\u0631 \u0623\u064a \u0646\u062a\u064a\u062c\u0629 \u0639\u0646\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u0631\u0642\u0627\u0645 \u0627\u0644\u0647\u0646\u062f\u064a\u0629. \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0627\u062e\u062a\u0628\u0627\u0631 \u0645\u0639 \u0627\u0644\u062d\u0644\u0648\u0644.<\/p>","protected":false},"author":2,"featured_media":13150,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"post_team_member":1296,"vb_event":"","vb_takeaways":"","vb_sources":"","vb_figure":"","vb_figure_label":"","vb_sector":"","vb_sample":"","vb_period":"","vb_engines":"","vb_method":"","vb_verified":"","footnotes":""},"categories":[55,53,1],"tags":[],"class_list":["post-13148","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-marketplace-ecommerce-seo","category-research-data","category-technical-seo"],"acf":[],"_links":{"self":[{"href":"https:\/\/voctos.net\/ar\/wp-json\/wp\/v2\/posts\/13148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/voctos.net\/ar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/voctos.net\/ar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/voctos.net\/ar\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/voctos.net\/ar\/wp-json\/wp\/v2\/comments?post=13148"}],"version-history":[{"count":1,"href":"https:\/\/voctos.net\/ar\/wp-json\/wp\/v2\/posts\/13148\/revisions"}],"predecessor-version":[{"id":13151,"href":"https:\/\/voctos.net\/ar\/wp-json\/wp\/v2\/posts\/13148\/revisions\/13151"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/voctos.net\/ar\/wp-json\/wp\/v2\/media\/13150"}],"wp:attachment":[{"href":"https:\/\/voctos.net\/ar\/wp-json\/wp\/v2\/media?parent=13148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/voctos.net\/ar\/wp-json\/wp\/v2\/categories?post=13148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/voctos.net\/ar\/wp-json\/wp\/v2\/tags?post=13148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}