पहलू खोज. सही रास्ता ढूँढना: पहलूबद्ध नेविगेशन एसईओ को कैसे प्रभावित करता है (अनुवाद)। पहलूबद्ध नेविगेशन में सुधार कैसे करें

💖क्या आपको यह पसंद है?लिंक को अपने दोस्तों के साथ साझा करें

आधुनिक लोग खरीदारी पर कम से कम समय बिताने की कोशिश कर रहे हैं। धीमे उत्पाद कैटलॉग ग्राहकों को दूर ले जाते हैं, स्टोर ग्राहकों और अपने मुनाफे का कुछ हिस्सा खो देता है। अपने ऑनलाइन स्टोर को फ़ेसट तकनीक से और अधिक आकर्षक बनाएं - फ़ेसट - अर्थात। पूर्वनिर्धारित. खोजना। पहलूबद्ध अनुक्रमणिका बनाएं और उत्पादों की खोज और संपूर्ण कैटलॉग के काम में काफी तेजी लाएं।

नोट: पहलूगत खोज तंत्र सूचना ब्लॉक मॉड्यूल के संस्करण 15.0.1 से उपलब्ध है और घटक के साथ एकीकृत है। प्रोग्राम कोड, एक विज़ुअल शेल में डिज़ाइन किया गया है, जो सार्वजनिक भाग में डेटा प्रदर्शित करने के लिए एक मॉड्यूल का एक विशिष्ट कार्य करता है। हम कोड के इस ब्लॉक को सीधे कोई कोड लिखे बिना वेबसाइट पेजों में डाल सकते हैं। स्मार्ट फ़िल्टर घटक एक सूचना ब्लॉक से चयन के लिए एक फ़िल्टर तैयार करता है और फ़िल्टरिंग तत्वों के लिए एक फ़िल्टर फॉर्म प्रदर्शित करता है। कैटलॉग तत्वों को प्रदर्शित करने के लिए घटक को घटक से पहले कनेक्ट किया जाना चाहिए, अन्यथा तत्वों की सूची फ़िल्टर नहीं की जाएगी। घटक मानक है, मॉड्यूल वितरण में शामिल है और इसमें तीन टेम्पलेट शामिल हैं: .default, Visual_horizontal और Visual_vertical। (अंतिम दो टेम्पलेट समर्थित नहीं हैं, वे संगतता बनाए रखने के लिए बने रहेंगे।)

विज़ुअल एडिटर में, घटक पथ के साथ स्थित होता है सामग्री > कैटलॉग > स्मार्ट फ़िल्टर.

घटक सूचना ब्लॉक मॉड्यूल से संबंधित है।

पहलू खोज के बारे में और जानें

आइए एक उदाहरण देखें:

हम ऑनलाइन स्टोर पर जाते हैं और फ़िल्टर में चयन करते हैं कि हमें लाल टी-शर्ट चाहिए:

  • पहलूबद्ध खोज के बिना, फ़िल्टर उत्पाद "टी-शर्ट" को रंग गुण "लाल" से मिलाने के लिए उत्पादों की पूरी सूची के माध्यम से पुनरावृत्त करना शुरू कर देगा, जिसमें बड़ी संख्या में उत्पाद होने पर बहुत समय लगेगा;
  • यदि आप एक पहलू खोज सेट करते हैं, तो उत्पादों के तैयार खोज सेट एक निश्चित संपत्ति मूल्य (पहलू सूचकांक) के लिए बनाए जाते हैं, यानी। संभावित अनुरोधों के लिए विकल्प उदाहरण के लिए, एक लाल टी-शर्ट, सभी काले सूती उत्पाद, आकार XS में कपड़े, आदि। स्मार्ट फ़िल्टर में पहले से गणना की जाती है और परिणाम तुरंत प्रदर्शित होता है। इस प्रकार की उत्पाद खोज बहुत तेज़ है.

आइए कुछ सरल चरणों में पहलूबद्ध अनुक्रमणिकाएँ बनाएँ:

क्या पहलू अनुक्रमणिका को पुनः बनाने की आवश्यकता है?

फेसेटेड इंडेक्स स्वचालित रूप से दोबारा बनाए जाते हैं या आपको किए गए कार्यों के आधार पर उन्हें मैन्युअल रूप से दोबारा बनाने की आवश्यकता होती है:

खुद ब खुद नए जोड़े गए या मौजूदा उत्पादों को संपादित किया गया।
नई संपत्तियां न बनाएं.
मैन्युअल रूप से सिस्टम आपको पृष्ठों के शीर्ष पर एक संदेश का उपयोग करके इसके बारे में संकेत देगा
प्रशासनिक अनुभाग.
कैटलॉग के नए या संपादित अनुभाग जोड़े गए।
स्मार्ट फ़िल्टर से कोई नया जोड़ते समय या किसी प्रॉपर्टी को हटाते समय।
माल उतारते समय, उदाहरण के लिए, 1C से, यदि माल नई संपत्तियाँ बनाता है।

पहलूबद्ध खोज उत्पाद सूची के प्रदर्शन में सुधार करती है। इसका उपयोग करने के लिए आपको चाहिए:

  • उत्पाद सूची के लिए पहलूबद्ध अनुक्रमणिका बनाएं;
  • अनुक्रमणिका को मैन्युअल रूप से पुनः बनाने की आवश्यकता के बारे में सूचनाओं पर नज़र रखें।
  • अंतर्निहित पहलू खोज उत्पाद में निर्मित

    ऑनलाइन स्टोर में निर्मित पहलू खोज - आंतरिक खोज - कई मामलों में तेजी से काम करती है और सिस्टम को लोड नहीं करती है।

    • उत्पाद में निर्मित
    • बहुत तेज
    • साइट लोड नहीं होती
    • इन्फोब्लॉक एपीआई का मुख्य भाग है
    • वेबसाइट को पुनः डिज़ाइन करने की आवश्यकता नहीं है
    • स्वचालित रूप से पुन: अनुक्रमित
    क्यों इतनी तेज?

    पैरामीटर के किसी भी संयोजन के लिए क्लाइंट को तुरंत पूर्व-तैयार खोज परिणाम प्रस्तुत किए जाते हैं - पहलू। सिस्टम किसी उत्पाद के लिए पहलुओं की पहले से गणना करता है - फ़िल्टर में इन गुणों के सभी संभावित प्रतिच्छेदन। ये तैयार खोज सेट फिर ग्राहकों को जारी किए जाते हैं।

    साइट लोड क्यों नहीं होती?

    जिस समय ग्राहक को परिणाम जारी किया जाता है, उस समय कोई गणना नहीं होती, क्योंकि परिणाम पहले से ही तैयार होता है। जब किसी नए उत्पाद को बिक्री कैटलॉग में जोड़ा जाता है तो उसका एक पहलू तुरंत बन जाता है। नए उत्पादों और नई संपत्तियों के आधार पर खोज स्वचालित रूप से पुन: अनुक्रमित होती है।

    ग्राहकों के लिए लाभ

    पहलूगत खोज के लाभ आपका ग्राहक फ़िल्टर सेटिंग्स के साथ आसानी से खेलते हुए उत्पाद को बहुत तेज़ी से ढूंढता है। ग्राहक इंतजार नहीं करता और तुरंत परिणाम प्राप्त करता है। खोज गति कैटलॉग में आइटमों की संख्या पर निर्भर नहीं करती है।


    स्मार्ट फ़िल्टर 2.0

    ग्राहक को उत्पाद तुरंत मिल जाता है

    आपका ग्राहक खोज क्वेरी को लगातार सीमित करके उत्पाद को बहुत तेज़ी से ढूंढता है। और हर कदम पर, उसे तुरंत परिणाम प्राप्त होते हैं - अनुरोध पर उत्पादों की एक सूची। उसे अपने अनुरोध पर कार्रवाई होने तक इंतजार नहीं करना पड़ेगा। क्योंकि सिस्टम ने हर चीज़ की गणना पहले ही कर ली थी संभावित विकल्प, और बस रिक्त स्थान जारी करता है। धीरे-धीरे, ऑनलाइन स्टोर परिणामों के रूप में कम और कम उत्पाद प्रदर्शित करता है। ये उत्पाद खरीदार के अनुरोध के और भी करीब आ रहे हैं।

    अन्तरक्रियाशीलता और बहुआयामीता

    खरीदार के लिए उत्पाद चुनना एक खेल की तरह है। क्लाइंट पैरामीटर (कीमत, वजन) खींचता है, गुण बदलता है (रंग, आकार), अतिरिक्त शर्तें (ब्रांड, सामग्री, स्वाद, आदि) सेट करता है - और सिस्टम तुरंत परिणामों को पुनर्व्यवस्थित करता है। इस मामले में, जितने चाहें उतने अनुकूलन योग्य पैरामीटर हो सकते हैं - उनकी संख्या परिणाम उत्पन्न करने की गति को प्रभावित नहीं करती है।

    सुविधा और मित्रता

    पहलूगत नेविगेशन के साथ, एक अनुभवहीन उपयोगकर्ता भी आसानी से स्टोर में उत्पाद का चयन कर सकता है। खोज टूल में हेरफेर करना बहुत सुविधाजनक है. इसके अलावा, सिस्टम खरीदार को उन सभी मापदंडों के बारे में बताता है जिनके द्वारा वह उत्पाद चुन सकता है। स्टोर, जैसा कि था, ग्राहक को उत्पाद के मुख्य गुणों को प्रदर्शित करता है।

    ग्राहक अनुरोध के संसाधित होने की प्रतीक्षा नहीं करता है!
    उदाहरण के लिए, आपका ग्राहक एक कैमरा खरीदता है। प्रारंभ में, वह स्मार्ट फ़िल्टर में केवल 3 पैरामीटर इंगित करता है: मूल्य, ब्रांड, आकार। इसके पहलू में 3 चौराहे शामिल हैं, बहुत सारे खोज परिणाम हैं, लेकिन ग्राहक उन्हें तुरंत प्राप्त करता है। ग्राहक वजन निर्धारित करता है - उसे एक हल्के गैजेट की आवश्यकता होती है। सिस्टम बिना देर किए तुरंत उसे सामान की एक छोटी सूची दे देता है। क्लाइंट स्क्रीन का आकार सेट करता है, फिर आवश्यक कार्यक्षमता निर्दिष्ट करता है। उसके सामने मनचाहा सामान है.


    खोज गति

    खोज गति मायने रखती है खोज गति की गई खरीदारी की संख्या को प्रभावित करती है

    आपकी वेबसाइट पर उत्पाद ढूंढने में परेशानी होने से अधिक ग्राहक को कोई चीज़ परेशान नहीं करती। यदि ग्राहक बहुत देर तक खोज करता है तो वह अन्य दुकानों की ओर चला जाएगा। भले ही आपके स्टोर में शामिल हो बड़ा विकल्पउत्पाद और उन्हें फ़िल्टर करने के लिए कई उपकरण। क्लाइंट को अनुरोध से परिणाम प्राप्त नहीं हो सकते हैं.


    वीडियो ट्यूटोरियल: क्यों पहलूबद्ध खोज एक स्मार्ट फ़िल्टर को महत्वपूर्ण रूप से गति देती है
    "पहलू" का उपयोग करने से स्टोर के भीतर खोज की गति परिमाण के क्रम से तेज हो जाती है। इस मामले में, गति निर्देशिका में तत्वों की संख्या पर निर्भर नहीं करती है।

    खोज इतनी धीमी क्यों है?
    किसी स्टोरफ्रंट पर किसी उत्पाद की खोज करने में सामान्य पेज लोडिंग समय से काफी अधिक समय लग सकता है। विशेषकर यदि स्टोर में बड़ी संख्या में उत्पाद हों और इन उत्पादों के गुण हों। प्रश्न खोजनाकई मायनों में यह बहुत सारे डेटाबेस कॉल बनाता है और साइट को महत्वपूर्ण रूप से लोड करता है। यदि बहुत सारे ग्राहक और अनुरोध हैं, तो खोज काफी धीमी हो जाती है।

    काम की गति प्रभावशाली है! 500 हजार वस्तुओं वाले कैटलॉग की तीन श्रेणियों पर उत्पाद के संस्करण 15.0 के परीक्षण परिणामों से पता चला कि पिछले संस्करणों की तुलना में:
    • स्मार्ट फ़िल्टर घटक - 15 गुना तेज़!
    • कैटलॉग घटक – 5 गुना तेज़!
    खोज खुफिया निरंतर बनी रहती है!
    बिना किसी "पहलू" के भी तेज़! उत्पाद कैटलॉग घटकों को गति देने के लिए लगातार काम कर रहा है। "साइट स्पीड" सेवा संस्करण दर संस्करण गति में उल्लेखनीय वृद्धि दर्शाती है!

    पुनर्निर्माण

    अनुक्रमण और खोज परिणामों का निरंतर पुनर्निर्माण किया जाता है। सामग्री अनुक्रमण एल्गोरिथ्म पर फिर से काम किया जा रहा है और उसमें तेजी लाई जा रही है। खोज परिणामों की प्रस्तुति की गुणवत्ता में सुधार हुआ है - विशेष रूप से, "शोर" कम हो गया है। डेवलपर्स खोज परिणामों में वर्तमान क्लाइंट के लिए वैयक्तिकृत डेटा प्रदर्शित करने की योजना बना रहे हैं।

    डेवलपर्स के लिए: एपीआई पारदर्शिता


    पिछला देखें

    "पहलू" एपीआई के लिए पारदर्शी है उत्पाद में निर्मित "पहलू" एपीआई के लिए पारदर्शी है। यह इन्फोब्लॉक एपीआई का मुख्य भाग है। इसलिए, इसका उपयोग करने के लिए डेवलपर्स को अतिरिक्त प्रयास की आवश्यकता नहीं होती है। साइटों को पुनः डिज़ाइन करने की भी कोई आवश्यकता नहीं है।
    • CIBlockElement::GetList विधि को तेज़ करना
    • स्मार्ट फिल्टर के साथ पूर्ण एकीकरण
    GetList अब तेजी से काम करता है क्योंकि यह स्वचालित रूप से कार्य करने के लिए एक "पहलू" जोड़ता है। D7 पर एक अलग एपीआई भी है।

    स्मार्ट फिल्टर के साथ पूर्ण एकीकरण

    अब, उत्पाद गुणों के लिए प्रशासनिक भाग में सेटिंग करते समय, आप न केवल गतिविधि का संकेत दे सकते हैं - स्मार्ट फ़िल्टर में भाग लेना है या नहीं। किसी प्रॉपर्टी को स्मार्ट फ़िल्टर में पास करके, आप तुरंत चुन सकते हैं कि उन्हें कैसे प्रदर्शित किया जाए। ग्राहकों को संपत्ति किस रूप में दिखाई जानी चाहिए: बटन, आकार, स्लाइडर, ड्रॉप-डाउन सूचियाँ, रंग चयन वाली सूचियाँ, आदि।



    स्मार्ट फ़िल्टर में संपत्ति दिखाएँ

    अनुकूलित किया जा सकता है!

    स्मार्ट फ़िल्टर अब और अधिक सुंदर दिखता है. डेवलपर्स इसके स्वरूप को आसानी से अनुकूलित और आगे अनुकूलित कर सकते हैं।

    आज के पाठ में हम जावास्क्रिप्ट का उपयोग करके पहलू खोज की नकल को फिर से बनाने का प्रयास करेंगे। मैं मान रहा हूं कि यदि आप इस ट्यूटोरियल को पढ़ रहे हैं तो आप पहले से ही जानते हैं कि पहलूगत खोज क्या है, अन्यथा इसे गूगल पर खोजें या अमेज़ॅन या मेरे डेमो को देखें।

    सबसे पहले हमें लाइब्रेरी github.com/eikes/facetedsearch की आवश्यकता है। इसे डाउनलोड करें औरfacetedsearch.js फ़ाइल को हमारे प्रोजेक्ट से कनेक्ट करें। हमें jQuery और अंडरस्कोर लाइब्रेरी की भी आवश्यकता होगी।

    अस्वीकरण: मैं समझता हूं कि जेक्यू अब केक नहीं है, लेकिन मैं इसे परिचित वाक्यात्मक चीनी के रूप में उपयोग करता हूं, आप इसे अपने से अधिक परिचित पुस्तकालयों के लिए या वेनिला जेएस में फिर से लिख सकते हैं।

    तो, सबसे पहले, आइए कनेक्टेड निर्भरताओं के साथ एक सरल मार्कअप बनाएं:

    दस्तावेज़ // यहां हम पहलू फ़िल्टर प्रदर्शित करेंगे // और यहां हमारे तत्व होंगे

    अब हमें अपने एप्लिकेशन की सेटिंग्स का वर्णन करने और सरणी तत्वों को प्रदर्शित करने के लिए एक टेम्पलेट बनाने की आवश्यकता है जिसे हम पहलुओं का उपयोग करके सॉर्ट करेंगे:

    $(फ़ंक्शन())( var item_template = // टेम्पलेट का वर्णन करें "" + " " वर्ग = "img-उत्तरदायी">" + ", " + "

    " + "" + ", " + ", " + "

    " + "

    " + ""; सेटिंग्स = (आइटम: उदाहरण_आइटम, पहलू: ( // पहलू श्रेणियां निर्दिष्ट करें "श्रेणी": "कौन सी श्रेणी", "महाद्वीप": "कौन सा महाद्वीप", "भाषा": "प्रोग्रामिंग भाषा"), परिणाम चयनकर्ता: "#परिणाम", // DOM तत्व जहां हम परिणाम प्रदर्शित करते हैं पहलू चयनकर्ता: "#facets", // पहलुओं के लिए DOM तत्व परिणाम टेम्पलेट: आइटम_टेम्पलेट, पेजिनेशन गणना: 8, // प्रति पृष्ठ तत्वों की संख्या orderByOptions: ("पहला नाम": " प्रथम नाम ", "अंतिम नाम": "अंतिम नाम", "श्रेणी": "श्रेणी", "रैंडम": "रैंडम"), पहलूसॉर्टऑप्शन: ("महाद्वीप": ["उत्तरी अमेरिका", "दक्षिण अमेरिका"]) ) $. फेसटेलाइज़(सेटिंग्स);

    खैर, वास्तव में JS में हमारी पहलूगत खोज में प्रदर्शित करने के लिए तत्वों के साथ स्वयं एक JSON सरणी बनाएं:

    वर आइटम = [( "प्रथम नाम": "मैरी", "अंतिम नाम": "स्मिथ", "इमेजयूआरएल": "http://lorem Pixel.com/150/150/cats/2", "विवरण": "सेड ईए आमेट। स्टेट वोलुप्टुआ। नोनुमी मैग्ना ताकीमाता", "श्रेणी": "माउस", "भाषा": ["स्मॉलटॉक", "एक्सएसएलटी"], "महाद्वीप": "अफ्रीका" ​), ("प्रथम नाम": "पेट्रीसिया" ", "अंतिम नाम": "जॉनसन", "imageURL": "http://lorem Pixel.com/150/150/cats/3", "विवरण": "उट ताकीमाता सिट एलिक्वीम लेबोर एलिक्वियम सिट सिट लोरेम अमेट ।" , "श्रेणी": "शेर", "महाद्वीप": "उत्तरी अमेरिका", ... ];

    मैं इस सरणी को एक अलग जेएस फ़ाइल में रखूंगा जो उदाहरण के लिए, डेटाबेस से गतिशील रूप से उत्पन्न होगी।

    बस इतना ही, हमें जावास्क्रिप्ट में एक पहलूपूर्ण खोज मिलती है और हम इसे अनुकूलित कर सकते हैं। इसके बाद, मैं लाइब्रेरी का अनुवादित दस्तावेज़ उपलब्ध कराता हूँ, जहाँ आप अपनी ज़रूरत के ट्रिगर देख सकते हैं।

    दस्तावेज़ीकरण सुविधाएँ

    दो फ़ंक्शन jQuery नेमस्पेस में निर्यात किए जाते हैं।

    फेसटेलाइज़ का उपयोग दी गई सेटिंग्स के साथ एक फेसेटेड खोज आरंभ करने के लिए किया जाता है।

    यदि आप पहलू लुकअप स्थिति को बाहरी रूप से बदलना चाहते हैं तो FacetUpdate का उपयोग किया जा सकता है।

    ऑब्जेक्ट सेटिंग्स

    आइटम: आइटमों की एक श्रृंखला जिसे प्रक्रिया में फ़िल्टर और सॉर्ट किया जाएगा।

    पहलू: एक ऑब्जेक्ट जिसकी कुंजियाँ तत्व कुंजियों और मानों से मेल खाती हैं, उस पहलू के लिए हेडर है। आइटम को इन कुंजियों के लिए उनके मूल्य के आधार पर फ़िल्टर किया जाएगा।

    orderByOptions: पहलुओं के समान, इन कुंजी-मूल्य जोड़े को छोड़कर केवल सॉर्टिंग के लिए उपयोग किया जाता है। जब RANDOM कुंजी सक्षम होती है, तो परिणामों को यादृच्छिक किया जा सकता है।

    पहलू चयनकर्ता: यह एक चयनकर्ता है जिसका उपयोग DOM नोड खोजने के लिए किया जाता है जिससे पहलू फ़िल्टर का चयन किया जाता है।

    परिणाम चयनकर्ता: यह एक चयनकर्ता है जिसका उपयोग DOM नोड को खोजने के लिए किया जाता है जहां परिणाम प्रदर्शित होते हैं।

    परिणाम टेम्पलेट: एक स्ट्रिंग जिसका उपयोग अंडरस्कोर टेम्पलेट इंजन द्वारा आइटम सरणी से प्रत्येक तत्व को प्रस्तुत करने के लिए किया जाता है। प्रत्येक तत्व में निम्नलिखित विशेषताएँ जोड़ी जाती हैं, जिनका उपयोग टेम्पलेट में भी किया जा सकता है: बैचआइटमएनआर, बैचआइटमकाउंट, और टोटलआइटमकाउंट।

    स्थिति: यह ऑब्जेक्ट वर्तमान फ़िल्टर, प्रकार: currentResult और अन्य को संग्रहीत करता है। आप उन्हें प्रीसेट करने के लिए ऑर्डरबी स्ट्रिंग या फ़िल्टर ऑब्जेक्ट प्रदान कर सकते हैं।

    EnablePagination: पेजिनेशन और "अधिक लोड करें" बटन को सक्षम करने के लिए बूलियन, डिफ़ॉल्ट रूप से सत्य है।

    पेजिनेशनकाउंट: यदि पेजिनेटर सक्षम है, तो प्रति पेज तत्वों की संख्या निर्धारित करता है, डिफ़ॉल्ट 50 है।

    FacetSortOption: पहलू तत्वों के क्रम को बदलने के लिए इस फ़ंक्शन का उपयोग करें। एक ऑब्जेक्ट लेता है जिसकी कुंजियाँ पहलू नामों और मानों के अनुरूप पहलू मानों की एक सरणी में होती हैं, जिन्हें उस क्रम में व्यवस्थित किया जा सकता है जैसा आप चाहते हैं। यह उदाहरण महाद्वीपों को एक अलग क्रम में क्रमबद्ध करेगा, सरणी में शामिल नहीं की गई वस्तुओं को वर्णमाला क्रम में जोड़ देगा:

    FacetSortOption: ("महाद्वीप": ["उत्तरी अमेरिका", "दक्षिण अमेरिका"])

    कई और टेम्प्लेट उपलब्ध हैं, कृपया सभी उपलब्ध टेम्प्लेट विकल्पों को देखने के लिएfacetedsearch.js स्रोत कोड देखें।

    आयोजन

    आप कुछ घटनाओं से जुड़ सकते हैं जिन्हें कुछ क्रियाएं होने पर सूचनाएं भेजनी चाहिए। ऐसा करने के लिए, हम jquery इवेंट सिस्टम का उपयोग करते हैं:

    Facetuicreated: आप इस फ़ंक्शन को इससे बाइंड कर सकते हैं डोम तत्वसेटिंग्स.facetSelector जिसे यूआई बनाए जाने पर सूचित किया जाना चाहिए।

    facetedsearchresultupdate: अद्यतन परिणामों की सूचना पाने के लिए आप इस फ़ंक्शन को सेटिंग्स.परिणाम चयनकर्ता DOM तत्व से जोड़ सकते हैं।

    Facetedsearchfacetclick: यह ईवेंट तब सक्रिय होता है जब किसी पहलू पर क्लिक किया जाता है और सेटिंग्स.facetSelector तत्व पर सक्रिय किया जाता है। जो पहलू आईडी को तर्क के रूप में प्राप्त करता है।

    Facetedsearchorderby: जब सॉर्टिंग तत्व सेटिंग्स.facetSelector तत्व पर क्लिक किया जाता है तो यह ईवेंट सक्रिय हो जाता है। यह आईडी ऑर्डर को एक तर्क के रूप में लेता है।

    $(settings.resultSelector).bind('facetedsearchresultupdate', function())( // कुछ करो, शायद ));

    हमने LINQ से PHP के पोर्ट, PINQ की स्थापना और बुनियादी सिंटैक्स पर एक त्वरित नज़र डाली। इस लेख में, हम देखेंगे कि MySQL में पहलू खोज सुविधा का अनुकरण करने के लिए PINQ का उपयोग कैसे करें।

    इस लेख में हम पहलू खोज के सभी पहलुओं को शामिल नहीं करेंगे। इच्छुक लोग इंटरनेट पर उपयुक्त जानकारी खोज सकते हैं।

    एक विशिष्ट पहलू खोज इस तरह काम करती है:

    • उपयोगकर्ता खोजने के लिए एक कीवर्ड या कई कीवर्ड दर्ज करता है। उदाहरण के लिए, "राउटर" उन उत्पादों की खोज करने के लिए है जिनमें "राउटर" शब्द विवरण, कीवर्ड, श्रेणी नाम, टैग आदि में दिखाई देता है।
    • साइट इन मानदंडों से मेल खाने वाले उत्पादों की एक सूची लौटाती है।
    • साइट आपके खोज शब्दों को अनुकूलित करने के लिए कई लिंक प्रदान करती है। उदाहरण के लिए, यह आपको विशिष्ट राउटर निर्माताओं को निर्दिष्ट करने, या मूल्य सीमा, या अन्य सुविधाएँ निर्धारित करने की अनुमति दे सकता है।
    • उपयोगकर्ता रुचि के डेटा सेट को प्राप्त करने के लिए अतिरिक्त खोज मानदंड निर्दिष्ट करना जारी रख सकता है।

    फेसेटेड सर्च काफी लोकप्रिय और एक शक्तिशाली टूल है जिसे लगभग किसी भी ई-कॉमर्स वेबसाइट पर देखा जा सकता है।

    दुर्भाग्यवश, पहलूबद्ध खोज MySQL में निर्मित नहीं है। तो अगर हम अभी भी MySQL का उपयोग करते हैं, लेकिन उपयोगकर्ता को यह अवसर देना चाहते हैं तो हमें क्या करना चाहिए?

    PINQ के साथ, जिसका दृष्टिकोण समान, शक्तिशाली और सरल है, हम वैसा ही व्यवहार प्राप्त कर सकते हैं जैसे कि हम अन्य डेटाबेस इंजनों का उपयोग कर रहे थे।

    पहले भाग से डेमो का विस्तार करना

    ध्यान दें: इस भाग और पहले भाग के सभी कोड रिपॉजिटरी में पाए जा सकते हैं।

    इस लेख में, हम पहलू खोज के रूप में एक महत्वपूर्ण सुधार के साथ भाग 1 से डेमो का विस्तार करेंगे।

    आइए Index.php जोड़कर शुरुआत करें निम्नलिखित पंक्तियाँ:

    $app->get("demo2", function() उपयोग ($app) (ग्लोबल $demo; $test2 = newpinqDemo\Demo($app); return $test2->test2($app, $demo->test1 ($ऐप)); $app->get("demo2/facet/(key)/(value)", function ($key, $value) उपयोग ($app) (ग्लोबल $demo; $test3 = newpinqDemo\Demo($app); वापसी $test3->test3($app, $demo->test1($app), $key, $value ));

    पहला मार्ग हमें खोज से मेल खाने वाली सभी प्रविष्टियों को देखने के लिए एक पृष्ठ पर ले जाता है कीवर्ड. उदाहरण को सरल बनाए रखने के लिए, हम Book_book तालिका से सभी पुस्तकों का चयन करते हैं। यह परिणामी डेटा सेट और खोज मानदंड निर्दिष्ट करने के लिए लिंक का एक सेट भी प्रदर्शित करेगा।

    वास्तविक अनुप्रयोगों में, ऐसे लिंक पर क्लिक करने के बाद, सभी पहलू फ़िल्टर परिणामी डेटा सेट के सीमा मानों में समायोजित हो जाएंगे। इस प्रकार उपयोगकर्ता क्रमिक रूप से नई खोज शर्तें जोड़ने में सक्षम होगा, उदाहरण के लिए, पहले एक निर्माता का चयन करें, फिर एक मूल्य सीमा निर्दिष्ट करें, आदि।

    लेकिन इस उदाहरण में हम इस व्यवहार को लागू नहीं करेंगे - सभी फ़िल्टर मूल डेटा सेट के सीमा मूल्यों को प्रतिबिंबित करेंगे। यह हमारे डेमो में सुधार के लिए पहली सीमा और पहला उम्मीदवार है।

    जैसा कि आप ऊपर दिए गए कोड में देख सकते हैं, वास्तविक फ़ंक्शंस एक अन्य फ़ाइल में स्थित हैं जिसे PinqDemo.php कहा जाता है। आइए संबंधित कोड पर एक नज़र डालें जो पहलूबद्ध खोज सुविधा प्रदान करता है।

    पहलू वर्ग

    पहला कदम एक ऐसा वर्ग बनाना है जो एक पहलू का प्रतिनिधित्व करता हो। सामान्य तौर पर, एक पहलू में कई गुण होने चाहिए:

    • यह जिस डेटा पर काम करता है ($डेटा)
    • वह कुंजी जिसके द्वारा समूहीकरण किया जाता है ($कुंजी)
    • कुंजी प्रकार ($प्रकार). निम्नलिखित में से एक हो सकता है:
      • सटीक मिलान के लिए पूर्ण स्ट्रिंग निर्दिष्ट करें
      • पैटर्न के आधार पर खोजने के लिए स्ट्रिंग का भाग (आमतौर पर प्रारंभिक वाला) निर्दिष्ट करें
      • श्रेणी के आधार पर समूहीकरण के लिए मानों की श्रेणी इंगित करें
    • यदि कुंजी प्रकार मानों की एक श्रेणी है, तो आपको श्रेणी की निचली और ऊपरी सीमा निर्धारित करने के लिए एक मान चरण को परिभाषित करने की आवश्यकता है; या यदि प्रकार एक स्ट्रिंग का हिस्सा है, तो आपको यह निर्दिष्ट करना होगा कि समूहीकरण के लिए कितने पहले अक्षरों का उपयोग किया जाएगा ($रेंज)

    समूहीकरण पहलू का सबसे महत्वपूर्ण हिस्सा है। किसी पहलू द्वारा लौटाई जा सकने वाली सभी एकत्रित जानकारी समूहीकरण मानदंड पर निर्भर करती है। आमतौर पर सबसे अधिक उपयोग किए जाने वाले खोज मानदंड "पूर्ण स्ट्रिंग", "स्ट्रिंग का हिस्सा" या "मूल्य सीमा" हैं।

    नेमस्पेस क्लासफ़ेसेट (Pinq\ITraversable, Pinq\Traversable का उपयोग करें; क्लास फ़ैसेट (सार्वजनिक $डेटा; // मूल डेटा सेट सार्वजनिक $कुंजी; // फ़ील्ड जिसके द्वारा सार्वजनिक $प्रकार को समूहीकृत किया जाए; // F: संपूर्ण पंक्ति; S: प्रारंभ स्ट्रिंग्स ; आर: रेंज; सार्वजनिक $रेंज; // केवल तभी भूमिका निभाता है जब $प्रकार != एफ... सार्वजनिक फ़ंक्शन getFacet() ( $फ़िल्टर = ""; यदि ($यह->प्रकार == "एफ") / संपूर्ण पंक्ति (...) अन्यथा ($यह->प्रकार == "एस") // पंक्ति की शुरुआत (...) अन्यथा ($यह->प्रकार == "आर") // मानों की श्रेणी ​​( $ फ़िल्टर = $यह->डेटा ->groupBy(फ़ंक्शन($पंक्ति) ( रिटर्न फ़्लोर($पंक्ति[$यह->कुंजी] / $यह->श्रेणी) * $यह->श्रेणी; )) -> चयन करें (फ़ंक्शन (आईट्रैवर्सबल $डेटा) ( वापसी ["कुंजी" => $डेटा->अंतिम()[$यह->कुंजी], "गिनती" => $डेटा->गिनती()]; )); फ़िल्टर ) ) )

    इस वर्ग का मुख्य कार्य मूल डेटासेट और पहलू गुणों के आधार पर फ़िल्टर किए गए डेटासेट को वापस करना है। कोड से यह स्पष्ट है कि विभिन्न प्रकार केखातों का उपयोग किया जाता है विभिन्न तरीकेडेटा समूहीकरण. उपरोक्त कोड में, हमने दिखाया कि यदि हम डेटा को $range में निर्दिष्ट वृद्धि में मानों की एक श्रृंखला के आधार पर समूहित करते हैं तो कोड कैसा दिख सकता है।

    पहलुओं को सेट करना और स्रोत डेटा प्रदर्शित करना

    सार्वजनिक फ़ंक्शन टेस्ट2($ऐप, $डेटा) ( $facet = $this->getFacet($data); रिटर्न $app["twig"]->render("demo2.html.twig", array("facet" = > $facet, "data" => $data)); निजी फ़ंक्शन getFacet($originalData) ( $facet = array(); $data = \Pinq\Traversable::from($originalData); // 3 निर्माण उदाहरण भिन्न पहलू ऑब्जेक्ट, और पहलुओं को वापस करें $filter1 = new \classFacet\Facet($data, "author", "F"); $filter2 = new \classFacet\Facet($data, "title", "S", 6) ; $filter3 = new \classFacet\Facet($data, "price", "R", 10); $facet[$filter1->key] = $filter1->getFacet() ] = $filter2->getFacet( ); $facet[$filter3->key] = $filter3->getFacet(); वापसी $facet;

    GetFacet() विधि में हम निम्नलिखित कार्य करते हैं:

    • आगे की प्रक्रिया के लिए मूल डेटा को Pinq\Traversable ऑब्जेक्ट में बदलें
    • हम तीन पहलू बनाते हैं। 'लेखक' पहलू लेखक क्षेत्र के अनुसार समूहित होगा, और पूरी पंक्ति के अनुसार समूहीकरण लागू करेगा; पहलू 'शीर्षक' - पंक्ति के भाग द्वारा समूहीकरण के साथ शीर्षक फ़ील्ड द्वारा (पहले 6 वर्णों द्वारा); पहलू 'कीमत' - सीमा के आधार पर समूहीकरण के साथ मूल्य क्षेत्र द्वारा (10 की वृद्धि में)
    • अंत में, हम पहलुओं को निकालते हैं और उन्हें test2 फ़ंक्शन पर लौटाते हैं ताकि उन्हें प्रदर्शन के लिए टेम्पलेट में आउटपुट किया जा सके
    पहलुओं और फ़िल्टर किए गए डेटा का आउटपुट

    अधिकांश मामलों में, फ़िल्टर एक पंक्ति के रूप में प्रदर्शित होंगे, और आपको फ़िल्टर किए गए परिणाम देखने के लिए प्रेरित करेंगे।

    हमने पहलूबद्ध खोज परिणाम और फ़िल्टर लिंक प्रदर्शित करने के लिए पहले से ही एक मार्ग ("डेमो2/पहलू/(कुंजी)/(मूल्य)") बना लिया है।

    मार्ग दो पैरामीटर लेता है, जो फ़िल्टर की गई कुंजी और उस कुंजी के मान पर निर्भर करता है। इस मार्ग से जुड़ा test3 फ़ंक्शन नीचे दिखाया गया है:

    सार्वजनिक फ़ंक्शन टेस्ट3($ऐप, $ओरिजिनलडेटा, $की, $वैल्यू) ($डेटा = \पिंक\ट्रैवर्सेबल::फ्रॉम($ओरिजिनलडेटा); $facet = $this->getFacet($data); $filter = शून्य; यदि ($कुंजी == "लेखक") ( $फ़िल्टर = $डेटा ->जहां(फ़ंक्शन($पंक्ति) उपयोग ($मान) ( ​​वापसी $पंक्ति["लेखक"] == $मूल्य; )) ->orderByAscending( function($row) उपयोग ($key) ( return $row["price"]; )) ) elseif ($key == "price") ( ... ) else //$key== शीर्षक ( .. . ) वापसी $app["twig"]->render("demo2.html.twig", array("facet" => $facet, "data" => $filter) )

    मूल रूप से, कुंजी के आधार पर, हम पारित मूल्य के अनुसार फ़िल्टरिंग (कहां कथन में एक अज्ञात फ़ंक्शन) लागू करते हैं और फ़िल्टर किए गए डेटा का निम्नलिखित सेट प्राप्त करते हैं। हम डेटा फ़िल्टरिंग का क्रम भी निर्धारित कर सकते हैं।

    अंत में, हम टेम्पलेट में कच्चा डेटा (फ़िल्टर के साथ) प्रदर्शित करते हैं। यह मार्ग उसी पैटर्न का उपयोग करता है जिसका उपयोग हमने "डेमो2" में किया था।

    खोज पट्टी

      (के के लिए %, पहलू में वी %)
    • ((k|कैपिटलाइज़))
      • (वीवी में वीवी के लिए %)
      • ((vv.गिनती))((vv.key))
      • (%endfor%)
      (%endfor%)

    हमें यह याद रखने की आवश्यकता है कि हमारे एप्लिकेशन द्वारा उत्पन्न पहलू नेस्टेड सरणियाँ हैं। पहले स्तर पर, यह सभी पहलुओं की एक श्रृंखला है, और, हमारे मामले में, उनमें से तीन हैं (क्रमशः लेखक, शीर्षक, मूल्य के लिए)।

    प्रत्येक पहलू में एक कुंजी-मूल्य सरणी होती है, इसलिए हम सामान्य तरीकों का उपयोग करके इसे पुनरावृत्त कर सकते हैं।

    ध्यान दें कि हम अपने लिंक के लिए यूआरएल कैसे बनाते हैं। हम रूट ("डेमो2/फेसेट/(की)/(वैल्यू)") के पैरामीटर के रूप में बाहरी लूप कुंजी (के) और आंतरिक लूप कुंजी (vv.key) दोनों का उपयोग करते हैं। टेम्प्लेट में प्रदर्शन के लिए सरणियों का आकार (vv.count) का उपयोग किया जाता है।

    पहली छवि मूल डेटा सेट दिखाती है, और दूसरी छवि $0 से $10 तक मूल्य सीमा के अनुसार फ़िल्टर की जाती है, और लेखक द्वारा क्रमबद्ध की जाती है।

    बढ़िया, हम अपने एप्लिकेशन में पहलूबद्ध खोज का अनुकरण करने में सक्षम थे!

    इस लेख को समाप्त करने से पहले, हमें अपने उदाहरण पर अंतिम नज़र डालने और यह निर्धारित करने की आवश्यकता है कि क्या सुधार किया जा सकता है और हमारी क्या सीमाएँ हैं।

    संभावित सुधार

    सामान्य तौर पर, यह एक बहुत ही बुनियादी उदाहरण है. हम बस वहां से गुजरे बुनियादी वाक्यविन्यासऔर अवधारणाओं और उन्हें एक कामकाजी उदाहरण के रूप में कार्यान्वित किया। जैसा कि पहले कहा गया है, हमारे पास ऐसे कई क्षेत्र हैं जिनमें अधिक लचीलेपन के लिए सुधार किया जा सकता है।

    हमें "ओवरले" खोज मानदंड लागू करने की आवश्यकता है, क्योंकि वर्तमान उदाहरण हमें केवल मूल डेटा सेट पर खोज फ़िल्टरिंग लागू करने की क्षमता तक सीमित करता है, हम पहले से फ़िल्टर किए गए परिणाम पर पहलू खोज लागू नहीं कर सकते हैं; यह सबसे बड़ा सुधार है जिसकी मैं कल्पना कर सकता हूं।

    प्रतिबंध

    इस आलेख में कार्यान्वित पहलू खोज की गंभीर सीमाएँ हैं (जो अन्य पहलू खोज कार्यान्वयनों पर भी लागू हो सकती हैं):

    हम हर बार MySQL से डेटा लाते हैं

    यह एप्लिकेशन सिलेक्स फ्रेमवर्क का उपयोग करता है। सिलेक्स, सिम्फनी, लारवेल जैसे किसी भी एकल प्रवेश बिंदु ढांचे की तरह, इसकी इंडेक्स.php (या ऐप.php) फ़ाइल को हर बार रूट पार्स किए जाने और नियंत्रक फ़ंक्शन निष्पादित होने पर कॉल किया जाता है।

    यदि आप हमारे Index.php में कोड को देखते हैं, तो आप देखेंगे कि कोड की निम्नलिखित पंक्ति:

    $डेमो = नया पिनकडेमो\डेमो($ऐप);

    हर बार एप्लिकेशन पेज प्रस्तुत किए जाने पर कॉल किया जाता है, जिसका अर्थ है कि कोड की निम्नलिखित पंक्तियां हर बार निष्पादित होती हैं:

    क्लास डेमो (निजी $किताबें = ""; सार्वजनिक फ़ंक्शन __construct($app) ($sql = "आईडी द्वारा बुक_बुक ऑर्डर से * चुनें"; $this->books = $app["db"]->fetchAll($sql ; )

    क्या यह बेहतर होगा यदि हम किसी ढाँचे का उपयोग न करें? खैर, इस तथ्य के बावजूद कि फ्रेमवर्क के बिना एप्लिकेशन विकसित करना एक अच्छा विचार नहीं है, मैं कह सकता हूं कि हमें समान समस्याओं का सामना करना पड़ेगा: डेटा (और स्थिति) अलग-अलग के बीच सहेजे नहीं जाते हैं HTTP अनुरोध. यह HTTP की एक मूलभूत विशेषता है. कैशिंग तंत्र का उपयोग करके इससे बचा जा सकता है।

    हमने कुछ बचा लिया एसक्यूएल प्रश्नपहलुओं का उपयोग करना। डेटा को पुनः प्राप्त करने के लिए एक चुनिंदा क्वेरी और संबंधित व्हेयर क्लॉज के साथ प्रश्नों के आधार पर तीन समूह पास करने के बजाय, हमने केवल एक व्हेयर क्वेरी चलाई, और एकत्रित जानकारी प्राप्त करने के लिए पिनक्यू का उपयोग किया।

    निष्कर्ष

    इस भाग में, हमने पुस्तकों के संग्रह को पहलू खोज करने की क्षमता लागू की। जैसा कि मैंने कहा, यह केवल एक छोटा सा उदाहरण है, जिसमें सुधार की गुंजाइश है और जिसकी कई सीमाएँ हैं।

    इस लेख में (वेबमास्टर स्तर - उन्नत) हम विभिन्न तरीकों से तथाकथित प्रतिच्छेदन के बारे में बात करेंगे। "मुखरित" नेविगेशन. सामग्री को आत्मसात करने को सरल बनाने के लिए, मैं विकिपीडिया लेख "पहलू वर्गीकरण" और प्रकाशनों को पढ़ने की सलाह देता हूँ अंग्रेजी भाषा(लेकिन चित्रों के साथ!) "अपनी वेबसाइटों के लिए बेहतर पहलू वाला नेविगेशन डिज़ाइन करें।"

    रंग के आधार पर फ़िल्टरिंग के साथ पहलूबद्ध नेविगेशन या मूल्य सीमाआपके आगंतुकों के लिए उपयोगी हो सकता है, लेकिन खोज में यह अक्सर हानिकारक होता है क्योंकि यह डुप्लिकेट सामग्री के साथ पतों के कई संयोजन बनाता है। डुप्लिकेट के कारण खोज इंजनसामग्री अपडेट के लिए साइट को शीघ्रता से स्कैन करने में सक्षम नहीं होगा, जिसके परिणामस्वरूप अनुक्रमण प्रभावित होता है। इस समस्या को कम करने और वेबमास्टरों को व्यापक नेविगेशन खोज को अनुकूल बनाने में मदद करने के लिए, हम यह करना चाहेंगे:

    उपयोगकर्ताओं और Google खोज के लिए आदर्श

    उत्पादों/लेख पृष्ठों का स्पष्ट पथ:

    श्रेणी पृष्ठ के लिए यूआरएल प्रतिनिधित्व:
    http://www.example.com/category.php?category=gummy-candies

    उत्पाद विशिष्ट यूआरएल प्रतिनिधित्व:
    http://www.example.com/product.php?item=sweedish-fish

    पहलूबद्ध नेविगेशन के कारण अवांछित डुप्लिकेट

    एक ही पेज विभिन्न वेब पतों से पहुंच योग्य है:

    विहित पृष्ठ



    यूआरएल: example.com/product.php? आइटम=स्वीडिश-मछली

    डुप्लिकेट पेज



    यूआरएल:example.com/product.php? आइटम=स्वीडिश-मछली&श्रेणी=गमी-कैंडीज़&कीमत=5-10


    श्रेणी=चिपचिपा-कैंडी&स्वाद=खट्टा&कीमत=5-10

    त्रुटियाँ:

    • Google के लिए यह व्यर्थ है क्योंकि उपयोगकर्ता शायद ही कभी [मुरब्बा की कीमत $9:55] खोजते हैं।
    • वेब क्रॉलर्स के लिए इसका कोई मतलब नहीं है, जो मूल श्रेणी के पृष्ठों (या तो "जम्मी" या "सॉर गमी") से वही आइटम ("फ्रूट सलाद") पाएंगे।
    • साइट स्वामी के लिए एक नकारात्मक बिंदु, क्योंकि अनुक्रमण अनुरोध एक ही श्रेणी के कई संस्करणों के साथ कमजोर हो जाते हैं।
    • साइट स्वामी के लिए एक नकारात्मक बिंदु, क्योंकि यह बेकार है और उस पर अतिरिक्त बोझ है बैंडविड्थसाइट
    खाली पन्ने:


    यूआरएल: example.com/category.php? श्रेणी=चिपचिपा-कैंडी&स्वाद=खट्टा&कीमत=10 से अधिक

    त्रुटियाँ:

    • खोज इंजन के लिए कोड गलत तरीके से लौटाया गया है (इस मामले में, पृष्ठ को 404 कोड लौटाना चाहिए)
    • उपयोगकर्ताओं के लिए रिक्त पृष्ठ


    पहलूगत नेविगेशन के लिए सबसे खराब समाधान (खोज अनुकूल नहीं)।

    उदाहरण संख्या 1: गैर-मानक पैरामीटर का उपयोग URL के भाग के रूप में किया जाता है: इसके बजाय अल्पविराम और कोष्ठक कुंजी=मूल्य&:

    • example.com/श्रेणी? [ श्रेणी: गमी-कैंडी ] [ सॉर्ट: कीमत-कम-से-उच्च ] [ सिड:789 ]
    • example.com/category?category , गमी-कैंडी , सॉर्ट , लोटूहाई , सिड , 789
    कैसे करें:
    example.com/category?category=gummy-candy&sort=low-to-high&sid=789

    उदाहरण #2: मानों की सूची में पैरामीटर के बजाय निर्देशिकाओं या फ़ाइल पथों का उपयोग करना जो पृष्ठ की सामग्री को नहीं बदलते हैं:
    example.com/c123 /s789/ उत्पाद?स्वीडिश-मछली
    (जहाँ /c123/ श्रेणी, /s789/ सत्र आईडी, जो पृष्ठ सामग्री को नहीं बदलता है)

    अच्छा निर्णय:

    • example.com /gummy-candy/ product?item=sweedish-fish&sid=789 (निर्देशिका, /gummy-candy/, पृष्ठ की सामग्री को सार्थक तरीके से बदल देती है)
    सर्वोत्तम निर्णय:
    • example.com/product?item=sweedish-fish&category=gummy-candy&sid=789 (URL पैरामीटर खोज इंजनों को प्रभावी ढंग से क्रॉल करने का तरीका निर्धारित करने के लिए अधिक लचीलापन देते हैं)
    क्रॉलर्स के लिए उपयोगी मानों (जैसे "गम-कैंडी") को बेकार मानों (जैसे "सेशनआईडी") से अलग करना मुश्किल होता है, जब ये मान सीधे लिंक पथों में रखे जाते हैं। दूसरी ओर, यूआरएल पैरामीटर खोज इंजनों को शीघ्रता से परीक्षण करने और यह निर्धारित करने के लिए लचीलापन प्रदान करते हैं कि किसी दिए गए मान के लिए सभी विकल्पों तक क्रॉलर पहुंच की आवश्यकता नहीं होती है।

    सामान्य मान जो पृष्ठ की सामग्री को नहीं बदलते हैं और उन्हें यूआरएल पैरामीटर के रूप में सूचीबद्ध किया जाना चाहिए उनमें शामिल हैं:

    • सत्र आईडी
    • आईडी ट्रैकिंग
    • रेफरर आईडी
    • मुहर
    उदाहरण #3: उपयोगकर्ता-जनित मानों (संभवतः अनंत) को यूआरएल पैरामीटर में परिवर्तित करना जो क्रॉल करने योग्य और अनुक्रमित करने योग्य हैं, लेकिन खोज के लिए बेकार हैं।
    क्रॉल किए गए और अनुक्रमित URL में साइट उपयोगकर्ताओं द्वारा उत्पन्न मामूली डेटा (जैसे देशांतर/अक्षांश या "दिन पहले") का उपयोग करना:
    • example.com/find-a-doctor? त्रिज्या=15&अक्षांश=40.7565068&देशांतर=-73.9668408
    • example.com/article?category=health&days-ago=7
    कैसे करें:
    • example.com/find-a-doctor?city=san-francisco&neighborhood=soma
    • example.com/articles?category=health&date=january-10-2014
    उपयोगकर्ता को क्रॉल करने योग्य यूआरएल बनाने के लिए मूल्य उत्पन्न करने की अनुमति देने के बजाय (जिसके परिणामस्वरूप आगंतुकों के लिए बहुत कम मूल्य के साथ अनंत संभावनाएं होती हैं), सबसे लोकप्रिय मूल्यों के लिए एक पृष्ठ श्रेणी प्रकाशित करना बेहतर है, इसके अलावा आप शामिल कर सकते हैं अतिरिक्त जानकारीताकि पृष्ठ नियमित खोज परिणाम पृष्ठ से अधिक मूल्य प्रदान करे। वैकल्पिक रूप से, आप उपयोगकर्ता-जनित मानों को एक अलग निर्देशिका में रखने पर विचार कर सकते हैं, और फिर उस निर्देशिका से क्रॉलिंग को रोकने के लिए robots.txt का उपयोग कर सकते हैं।
    • example.com/filtering/ find-a-doctor?radius=15&lastitution=40.7565068&longitude=-73.9668408
    • example.com/filtering/articles?category=health&days-ago=7
    और robots.txt में:
    उपयोगकर्ता एजेंट: *
    अस्वीकृत: /फ़िल्टरिंग/

    उदाहरण संख्या 4. बिना तर्क के यूआरएल पैरामीटर जोड़ना।

    • example.com/gummy-candy/lollipops/gummy-candy/gummy-candy/product?sweedish-fish
    • example.com/product?cat=gummy-candy&cat=lollipops&cat=gummy-candy &cat=gummy-candy&item=स्वीडिश-मछली
    अच्छा निर्णय:
    • example.com /gummy-candy/ product?item=स्वीडिश-मछली
    सर्वोत्तम निर्णय:
    • example.com/product?item=sweedish-fish&category=gummy-candy
    बाहरी यूआरएल पैरामीटर केवल दोहराव को बढ़ाते हैं, जिससे साइट को कम कुशलता से क्रॉल और अनुक्रमित किया जा सकता है। इसलिए, नए यूआरएल बनाने से पहले अनावश्यक यूआरएल पैरामीटर से छुटकारा पाना और समय-समय पर जंक लिंक को साफ करना आवश्यक है। यदि किसी उपयोगकर्ता सत्र के लिए कई मापदंडों की आवश्यकता होती है, तो आप लगातार cat=gummy-candy&cat=lollipops&cat=gummy-candy&... जैसे मान जोड़ने के बजाय कुकीज़ में जानकारी छिपा सकते हैं।

    उदाहरण #5: शून्य परिणाम होने पर और अधिक परिशोधन (फ़िल्टरिंग) का सुझाव दें।

    बुरी तरह:
    जब परिष्कृत करने के लिए शून्य आइटम हों तो उपयोगकर्ताओं को फ़िल्टर चुनने की अनुमति दें।


    शून्य परिणाम वाले पृष्ठ पर स्पष्टीकरण (उदाहरण के लिए, कीमत=10 से अधिक), जो उपयोगकर्ताओं को निराश करता है और खोज इंजनों के लिए अनावश्यक अनुरोधों का कारण बनता है।

    कैसे करें:
    लिंक तभी बनाएं जब उपयोगकर्ता के चयन के लिए तत्व मौजूद हों। यदि परिणाम शून्य है, तो लिंक को "ग्रे" (अर्थात, क्लिक करने योग्य नहीं) के रूप में चिह्नित किया जाता है। प्रयोज्यता को और बेहतर बनाने के लिए, प्रत्येक फ़िल्टर के आगे उपलब्ध वस्तुओं की संख्या का एक संकेतक शामिल करने पर विचार करें।


    शून्य परिणाम वाले पृष्ठ को प्रदर्शित करने की अनुमति नहीं है (उदाहरण के लिए, मूल्य=10 से अधिक), साथ ही उपयोगकर्ताओं को अनावश्यक क्लिक करने से प्रतिबंधित किया जाता है, और खोज इंजनों को इस उपयोगी पृष्ठ को क्रॉल करने से प्रतिबंधित किया जाता है।

    घटना को रोकना जरूरी है अनावश्यक पतेऔर केवल उत्पाद उपलब्ध होने पर ही यूआरएल बनाकर विज़िटर के लिए जगह कम करें। इससे उपयोगकर्ताओं को आपकी साइट पर लगे रहने में मदद मिलेगी (कोई उत्पाद नहीं मिलने पर बैक बटन पर कम क्लिक) और खोज इंजनों को ज्ञात संभावित यूआरएल की संख्या कम हो जाएगी। इसके अतिरिक्त, यदि कोई पृष्ठ न केवल "अस्थायी रूप से स्टॉक से बाहर" है, बल्कि उसमें कभी भी प्रासंगिक जानकारी होने की संभावना नहीं है, तो आप उसे 404 प्रतिक्रिया कोड देने पर विचार कर सकते हैं। अपने 404 पेज पर, आप नेविगेशन में अधिक विकल्पों वाले उपयोगकर्ताओं के लिए एक उपयोगी संदेश या एक खोज बॉक्स डिज़ाइन कर सकते हैं ताकि उपयोगकर्ता संबंधित उत्पाद पा सकें।

    नई साइटों के लिए जिनके वेबमास्टर पहलू नेविगेशन को लागू करने पर विचार कर रहे हैं, अद्वितीय सामग्री पृष्ठों के क्रॉलिंग (आपकी साइट पर Google को ज्ञात पतों का सेट) को अनुकूलित करने और डुप्लिकेट पृष्ठों को खोज इंजन इंडेक्स में आने से रोकने के लिए कई विकल्प हैं (अनुक्रमण का समेकन) संकेत)।

    निर्धारित करें कि प्रत्येक व्यक्तिगत सामग्री पृष्ठ को क्रॉल करने के लिए खोज इंजनों के लिए कौन से यूआरएल पैरामीटर आवश्यक हैं (अर्थात, यह निर्धारित करें कि प्रत्येक आइटम के लिए कम से कम एक क्लिक पथ बनाने के लिए कौन से पैरामीटर आवश्यक हैं)। आवश्यक मापदंडों में आइटम-आईडी, श्रेणी-आईडी, पृष्ठ आदि शामिल हो सकते हैं।

    निर्धारित करें कि कौन से पैरामीटर आगंतुकों के लिए उनके प्रश्नों के लिए उपयोगी होंगे, और कौन से पैरामीटर क्रॉलिंग और अनुक्रमण में दोहराव का कारण बन सकते हैं। कन्फेक्शनरी उदाहरण (मुरब्बा) में, यूआरएल पैरामीटर "स्वाद" स्वाद = खट्टा उदाहरण में प्रश्नों वाले उपयोगकर्ताओं के लिए मूल्यवान हो सकता है। हालाँकि, Category=gummy-candies&taste=sour&price=over-10 के अनावश्यक दोहराव के लिए "कीमत" पैरामीटर पर विचार करना तर्कसंगत है। अन्य सामान्य उदाहरण:

    • खोज इंजन के लिए मूल्यवान पैरामीटर: आइटम-आईडी, श्रेणी-आईडी, नाम, ब्रांड...
    • अनावश्यक पैरामीटर: सत्र-आईडी, मूल्य-सीमा...
    आइए अनावश्यक पैरामीटर वाले यूआरएल के लिए कई कॉन्फ़िगरेशन विकल्पों में से एक को लागू करने पर गौर करें। बस यह सुनिश्चित करें कि खोज इंजन क्रॉलर को क्रॉल करने या उपयोगकर्ता को प्रत्येक व्यक्तिगत उत्पाद ढूंढने के लिए "अनावश्यक" यूआरएल पैरामीटर वास्तव में आवश्यक नहीं हैं!

    विकल्प 1: और आंतरिक लिंक

    सभी अनावश्यक यूआरएल को के साथ चिह्नित करें। इससे खोज रोबोट की श्रम लागत कम हो जाएगी और क्रॉलिंग आवृत्ति में कमी को रोका जा सकेगा। आपको robots.txt के माध्यम से विश्व स्तर पर स्कैनिंग का प्रबंधन करने की आवश्यकता है (अनुवादक का नोट: लेख " " देखें)।
    खोज अनुक्रमणिका के पृष्ठों को उन पृष्ठों से अलग करने के लिए rel='canonical' विशेषता का उपयोग करें जिनकी वहां आवश्यकता नहीं है (उदाहरण के लिए, पृष्ठ मूल्य = 5-10 पर आप rel='canonical' विशेषता जोड़ सकते हैं, जो सभी की श्रेणी को दर्शाता है। खट्टा मुरब्बा example.com/category. php?category=gummy-candies&taste=sour& page=all )।

    विकल्प 2: robots.txt और अस्वीकृत करें

    अनावश्यक पैरामीटर वाले यूआरएल को /फ़िल्टरिंग/ निर्देशिका में शामिल किया गया है, जिसे robots.txt में बंद कर दिया जाएगा (अस्वीकृत)। यह सभी खोज इंजनों को साइट के केवल "सही" इन-लिंक (सामग्री) को क्रॉल करने की अनुमति देगा, लेकिन अवांछित यूआरएल को क्रॉल करने से तुरंत रोक देगा। उदाहरण के लिए (example.com/category.php?category=gummy-candies), यदि मूल्यवान पैरामीटर आइटम, श्रेणी और स्वाद थे, और सत्र आईडी और कीमत अनावश्यक थे, तो स्वाद के लिए यूआरएल इस तरह होगा:
    example.com/category.php?category=gummy-candies&taste=sour, लेकिन सभी अनावश्यक पैरामीटर, जैसे कीमत, को पूर्वनिर्धारित निर्देशिका में URL में शामिल किया जाएगा - /filtering/:
    example.com/filtering/category.php?category=gummy-candies&price=5-10,
    जिसे बाद में robots.txt के माध्यम से प्रतिबंधित कर दिया जाएगा:
    उपयोगकर्ता एजेंट: *
    अस्वीकृत: /फ़िल्टरिंग/

    विकल्प 3: अलग मेज़बान

    सुनिश्चित करें कि सर्वोत्तम समाधान, ऊपर सूचीबद्ध (उदाहरण के लिए, अनावश्यक पतों के लिए) अभी भी लागू होते हैं। अन्यथा, खोज इंजन पहले ही सूचकांक में एक बड़ा लिंक समूह बना चुके हैं। इस प्रकार, आपके कार्य का उद्देश्य Googlebot द्वारा क्रॉल किए गए अनावश्यक पृष्ठों की और वृद्धि को कम करना और अनुक्रमण संकेतों को समेकित करना होगा।

    मानक एन्कोडिंग और कुंजी=मान प्रारूप वाले पैरामीटर का उपयोग करें।

    सुनिश्चित करें कि वे मान जो पृष्ठ सामग्री को नहीं बदलते हैं, जैसे सत्र आईडी, निर्देशिकाओं के बजाय कुंजी = मान के रूप में लागू किए जाते हैं।

    जब फ़िल्टर करने के लिए कोई तत्व न हो तो क्लिक की अनुमति न दें या यूआरएल उत्पन्न न करें।

    यूआरएल पैरामीटर मैपिंग में तर्क जोड़ें: लगातार मान जोड़ने के बजाय अनावश्यक पैरामीटर हटाएं (उदाहरण के लिए इस तरह लिंक जनरेशन से बचें: example.com/product?cat=gummy-candy&cat=lollipops &cat=gummy-candy&item=swedish-fish )।

    यूआरएल में मूल्यवान पैरामीटरों को पहले सूचीबद्ध करके संग्रहीत करें (चूंकि यूआरएल खोज परिणामों में दिखाई देते हैं) और कम प्रासंगिक पैरामीटरों को अंत में (उदाहरण के लिए, सत्र आईडी)।
    इस लिंक संरचना से बचें: example.com/category.php?session-id=123&tracking-id=456 &category=gummy-candies&taste=sour
    यदि आपको इस बात की स्पष्ट समझ है कि आपकी साइट पर लिंक कैसे काम करते हैं, तो वेबमास्टर टूल्स में यूआरएल पैरामीटर कॉन्फ़िगर करें।

    सुनिश्चित करें कि कब जावास्क्रिप्ट का उपयोग करनायूआरएल को अपडेट किए बिना गतिशील सामग्री प्रबंधन (सॉर्ट/फ़िल्टर/छुपाएं) के लिए, आपकी साइट पर वास्तविक वेब पते हैं जिनका खोज मूल्य है, जैसे मुख्य श्रेणियां और उत्पाद पृष्ठ, जो क्रॉल करने योग्य और अनुक्रमित करने योग्य हैं। केवल प्रयोग न करने का प्रयास करें होम पेज(यानी एक यूआरएल) आपकी पूरी साइट के लिए, और नेविगेशन के साथ सामग्री को गतिशील रूप से बदलने के लिए जावास्क्रिप्ट का उपयोग करना - यह, दुर्भाग्य से, उपयोगकर्ताओं को खोजों में केवल एक यूआरएल देगा। साथ ही, जांचें कि डायनामिक फ़िल्टरिंग पर कोई प्रदर्शन प्रभाव तो नहीं पड़ रहा है सबसे ख़राब पक्ष, क्योंकि यह उपयोगकर्ता को साइट के साथ काम करने से रोकेगा।

    अनुक्रमणिका में सुधार करें विभिन्न पृष्ठपृष्ठ के विशेषाधिकार प्राप्त संस्करण के लिए rel='canonical' विशेषता निर्दिष्ट करके एक सामग्री। rel='canonical' विशेषता का उपयोग एक या अधिक डोमेन में किया जा सकता है।

    पृष्ठांकित सामग्री की अनुक्रमणिका को अनुकूलित करें (उदाहरण के लिए, "गमी कैंडीज़" श्रेणी से पृष्ठ = 1 और पृष्ठ = 2) या तो:

    • "व्यू-ऑल" पैरामीटर के साथ कैनोनिकल श्रेणी को दर्शाने वाले पृष्ठों की एक श्रृंखला में एक rel = "कैनोनिकल" विशेषता जोड़ें (उदाहरण के लिए, पेज = 1, पेज = 2, और पेज = 3 "गमी कैंडीज" श्रेणी से। rel=”canonical” on Category=gummy-candies&page=all ), यह सुनिश्चित करते हुए कि पेज उपयोगकर्ताओं के लिए प्रासंगिक है और जल्दी से लोड होता है।
    • अलग-अलग पृष्ठों के बीच संबंध को इंगित करने के लिए पेजिनेशन मार्कअप rel='next' और rel='prev' का उपयोग करें (लेख देखें 'rel='next' और rel='prev'' के साथ पेजिनेशन)।
    अपने साइटमैप में केवल कैनोनिकल लिंक शामिल करें।

    मित्रों को बताओ