جستجوی وجهی یافتن مسیر درست: چگونه ناوبری وجهی بر SEO (ترجمه) تأثیر می گذارد

صفحه اصلی / ویندوز 7

در این مقاله (سطح وب مستر - پیشرفته) در مورد به اصطلاح متقاطع به روش های مختلف صحبت خواهیم کرد. ناوبری "وجهی". برای ساده‌سازی همسان‌سازی مطالب، توصیه می‌کنم مقاله ویکی‌پدیا «طبقه‌بندی جنبه‌ها» و انتشارات مربوط به انگلیسی(اما با تصاویر!) "ناوبری وجهی بهتری را برای وب سایت های خود طراحی کنید."

پیمایش وجهی که بر اساس رنگ یا محدوده قیمت فیلتر می‌شود، می‌تواند برای بازدیدکنندگان شما مفید باشد، اما اغلب به نتایج جستجو آسیب می‌زند زیرا ترکیب‌های URL متعدد با محتوای تکراری ایجاد می‌کند. به دلیل موارد تکراری، موتورهای جستجو نمی توانند به سرعت سایت را برای به روز رسانی محتوا اسکن کنند، که بر این اساس بر نمایه سازی تأثیر می گذارد. برای به حداقل رساندن این مشکل و کمک به وب‌مسترها که جستجوی پیمایش وجهی را راحت کنند، می‌خواهیم:

ایده آل برای کاربران و جستجو در گوگل

پاک کردن مسیر به صفحات محصولات/مقاله:

نمایش URL برای صفحه دسته:
http://www.example.com/category.php?category=gummy-candies

نمایش URL خاص محصول:
http://www.example.com/product.php?item=swedish-fish

موارد تکراری ناخواسته ناشی از ناوبری وجهی

همان صفحه از آدرس های مختلف وب قابل دسترسی است:

صفحه متعارف



URL: example.com/product.php؟ آیتم = ماهی سوئدی

صفحه تکراری



URL:example.com/product.php؟ مورد=ماهی سوئدی&رده=آب نبات صمغی&قیمت=5-10


دسته=آب نبات صمغی&طعم=ترش&قیمت=5-10

خطاها:

  • برای گوگل بی فایده است زیرا کاربران به ندرت [مارمالاد با قیمت 9:55 دلار] را جستجو می کنند.
  • بی معنی برای ربات های جستجوگر، که همان مورد ("سالاد میوه") را از صفحات دسته بندی والدین (یا "Jummy" یا "Sour Gummy") شناسایی می کند.
  • یک نکته منفی برای صاحب سایت، زیرا درخواست های نمایه سازی با نسخه های متعددی از همان دسته کاهش می یابد.
  • یک نکته منفی برای صاحب سایت به دلیل بی فایده بودن و بار اضافی بر روی پهنای باند سایت
صفحات خالی:


URL: example.com/category.php؟ دسته=آب نبات صمغی&طعم=ترش&قیمت=بیش از 10

خطاها:

  • کد برای موتورهای جستجو(در این صورت، صفحه باید کد 404 را برگرداند)
  • صفحه خالی برای کاربران


بدترین راه حل ها (غیر جستجوی دوستانه) برای ناوبری وجهی

مثال شماره 1: به عنوان بخشی از URL استفاده نمی شود پارامترهای استاندارد: در عوض کاما و پرانتز کلید=مقدار&:

  • example.com/category؟ [ دسته:آب نبات صمغی ][ مرتب سازی:قیمت-پایین-به-بالا ][ sid:789 ]
  • example.com/category?category , gummy-candy , sort , lowtohigh , sid , 789
چگونه:
example.com/category؟ دسته=آب نبات صمغی&مرتب=کم به بالا&sid=789

مثال شماره 2: استفاده از دایرکتوری ها یا مسیرهای فایل به جای پارامترهایی در لیست مقادیری که محتوای صفحه را تغییر نمی دهند:
example.com/c123 /s789/ product?swedish-fish
(که در آن دسته /c123/، /s789/ شناسه جلسه، که محتوای صفحه را تغییر نمی دهد)

راه حل خوب:

  • example.com /gummy-candy/ product?item=swedish-fish&sid=789(دایرکتوری، /gummy-candy/، محتویات صفحه را به شیوه ای معنی دار تغییر می دهد)
بهترین راه حل:
  • example.com/product?item=swedish-fish& دسته=آدامس شیرینی&sid=789 (پارامترهای URL انعطاف پذیری بیشتری را برای موتورهای جستجو برای تعیین نحوه خزیدن موثر فراهم می کند)
زمانی که این مقادیر مستقیماً در مسیرهای پیوند قرار می‌گیرند، برای خزنده‌ها دشوار است که مقادیر مفید (مانند "gummy-candy") را از موارد بی‌فایده (مانند "SESSIONID") تشخیص دهند. از سوی دیگر، پارامترهای URL انعطاف‌پذیری را برای موتورهای جستجو فراهم می‌کنند تا به سرعت آزمایش کنند و تعیین کنند که چه زمانی یک مقدار معین به دسترسی خزنده به همه گزینه‌ها نیاز ندارد.

مقادیر رایجی که محتوای صفحه را تغییر نمی دهند و باید به عنوان پارامترهای URL فهرست شوند عبارتند از:

  • شناسه جلسه
  • ردیابی شناسه
  • شناسه های ارجاع دهنده
  • مهر زمانی
مثال شماره 3: مقادیر تولید شده توسط کاربر (احتمالا بی نهایت) را به پارامترهای URL که قابل خزیدن و نمایه سازی هستند، اما برای جستجو بی فایده هستند، تبدیل کنید.
استفاده از داده های جزئی تولید شده توسط کاربران سایت (مانند طول جغرافیایی/طول جغرافیایی یا "روزهای پیش") در آدرس های خزیده شده و نمایه شده:
  • example.com/find-a-doctor? شعاع=15& عرض جغرافیایی=40.7565068&طول جغرافیایی=-73.9668408
  • example.com/article?category=health&روز پیش = 7
چگونه:
  • example.com/find-a-doctor? شهر=سانفرانسیسکو&محله=سوما
  • example.com/articles?category=health& date=January-10-2014
به جای اجازه دادن به کاربر برای ایجاد مقادیر برای ایجاد URL های قابل خزیدن (که منجر به امکانات بی پایان با ارزش بسیار کمی برای بازدیدکنندگان می شود)، بهتر است یک دسته بندی صفحه برای محبوب ترین مقادیر منتشر کنید، علاوه بر این می توانید آن را نیز درج کنید. اطلاعات اضافیبه طوری که صفحه ارزش بیشتری نسبت به یک صفحه نتایج جستجوی معمولی ارائه می دهد. از طرف دیگر، می توانید مقادیر تولید شده توسط کاربر را در یک فهرست جداگانه قرار دهید و سپس از robots.txt برای جلوگیری از خزیدن از آن دایرکتوری استفاده کنید.
  • example.com /فیلتر کردن/ find-a-doctor?radius=15&latitude=40.7565068&longitude=-73.9668408
  • example.com /فیلتر کردن/مقالات?رده=سلامت&روزهای پیش=7
و در robots.txt:
عامل کاربر: *
غیر مجاز: /فیلتر کردن/

مثال شماره 4. اضافه کردن پارامترهای URL بدون منطق

  • example.com /آب نبات/آب نبات/آب نبات صمغی/آب نبات/محصول؟ماهی سوئدی
  • example.com/product? گربه = آب نبات صمغی و گربه = آب نبات چوبی و گربه = آب نبات صمغی&گربه=آب نبات صمغی&آیتم=ماهی سوئدی
راه حل خوب:
  • example.com /gummy-candy/ product?item=swedish-fish
بهترین راه حل:
  • example.com/product? آیتم=ماهی سوئدی&رده=آب نبات صمغی
پارامترهای URL اضافی فقط تکراری شدن را افزایش می دهند و باعث می شوند سایت با کارایی کمتری خزیده شود و ایندکس شود. بنابراین، لازم است قبل از ایجاد URL های جدید، از شر پارامترهای URL غیر ضروری خلاص شوید و به طور دوره ای پیوندهای ناخواسته را پاک کنید. اگر پارامترهای زیادی برای یک جلسه کاربر مورد نیاز است، می‌توانید اطلاعات را در کوکی‌ها پنهان کنید تا اینکه دائماً مقادیری مانند اضافه کنید. گربه=آب نبات صمغی&گربه=آب نبات چوبی&گربه=آب نبات صمغی& ...

مثال شماره 5: در صورت وجود نتایج پوچ، اصلاحات بیشتر (فیلتر کردن) را پیشنهاد دهید.

بد:
به کاربران اجازه دهید فیلترها را زمانی که موارد خالی برای اصلاح وجود دارد انتخاب کنند.


شفاف سازی صفحه ای با نتایج صفر (مثلاً قیمت=بیش از 10)، که کاربران را ناامید می کند و باعث درخواست های غیر ضروری برای موتورهای جستجو می شود.

چگونه:
تنها زمانی پیوند ایجاد کنید که عناصری برای انتخاب کاربر وجود داشته باشد. اگر نتیجه صفر باشد، پیوند "خاکستری" علامت گذاری می شود (یعنی غیرقابل کلیک). برای بهبود بیشتر قابلیت استفاده، یک نشانگر از تعداد موارد موجود در کنار هر فیلتر قرار دهید.


نمایش صفحه ای با نتایج صفر (مثلاً قیمت=بیش از 10) مجاز نیست، به علاوه کاربران را از کلیک های غیر ضروری منع می کند و موتورهای جستجو این را نمی خزند. صفحه مفید.

لازم است با ایجاد URL تنها در زمانی که محصولات در دسترس هستند، از ظاهر آدرس های غیر ضروری جلوگیری کرد و فضا را برای بازدیدکننده به حداقل رساند. این کمک می کند تا کاربران در سایت شما درگیر شوند (کلیک کمتری بر روی دکمه برگشت زمانی که هیچ محصولی پیدا نشد) و تعداد URL های احتمالی شناخته شده برای موتورهای جستجو را کاهش می دهد. بعلاوه، اگر صفحه ای نه فقط "به طور موقت موجود نیست" بلکه بعید است که حاوی اطلاعات مرتبط باشد، ممکن است بخواهید به آن کد پاسخ 404 بدهید. در صفحه 404 می توانید ایجاد کنید پیام مفیدبرای کاربرانی که گزینه های بیشتری در کادر ناوبری یا جستجو دارند تا کاربران بتوانند محصولات مرتبط را پیدا کنند.

برای سایت‌های جدیدی که مدیران وب‌سایت‌ها در نظر دارند ناوبری وجهی را پیاده‌سازی کنند، گزینه‌های متعددی برای بهینه‌سازی خزیدن (مجموعه آدرس‌های موجود در سایت شما که برای گوگل شناخته شده است) صفحات محتوای منحصربه‌فرد و کاهش صفحات تکراری در فهرست موتورهای جستجو وجود دارد (ادغام سیگنال های نمایه سازی).

تعیین کنید که چه پارامترهای URL برای موتورهای جستجو برای خزیدن هر صفحه محتوای مجزا مورد نیاز است (یعنی تعیین کنید چه پارامترهایی برای ایجاد حداقل یک مسیر کلیک برای هر مورد لازم است). پارامترهای مورد نیاز ممکن است شامل شناسه مورد، شناسه دسته، صفحه و غیره باشد.

تعیین کنید که کدام پارامتر برای بازدیدکنندگان با پرس و جوهایشان مفید خواهد بود و کدامیک احتمالاً باعث تکرار در خزیدن و نمایه سازی می شوند. در مثال شیرینی‌پزی (مارمالاد)، پارامتر URL "طعم" می‌تواند برای کاربرانی که پرس و جوهایی در مثال دارند ارزشمند باشد. مزه = ترش . با این حال، منطقی است که پارامتر "قیمت" را برای ایجاد تکرارهای غیر ضروری در نظر بگیریم دسته=آب نبات صمغی&طعم=ترش& قیمت = بالای 10 . نمونه های رایج دیگر:

  • پارامترهای ارزشمند برای موتورهای جستجو: item-id , category-id , name , brand ...
  • پارامترهای غیر ضروری: session-id، price-range ...
بیایید به پیاده سازی یکی از چندین گزینه پیکربندی برای URL هایی که حاوی پارامترهای غیر ضروری هستند نگاه کنیم. فقط مطمئن شوید که پارامترهای URL "غیر ضروری" در واقع برای خزیدن خزنده های موتورهای جستجو یا برای یافتن هر محصول جداگانه توسط کاربر لازم نیست!

گزینه 1: و پیوندهای داخلی

همه URL های غیر ضروری را با علامت علامت گذاری کنید. این کار هزینه های نیروی کار ربات جستجوگر را کاهش می دهد و از کاهش فرکانس خزیدن جلوگیری می کند. شما باید اسکن را به صورت جهانی از طریق robots.txt مدیریت کنید (یادداشت مترجم: مقاله " " را ببینید).
از ویژگی rel="canonical" برای جدا کردن صفحات فهرست جستجو از صفحاتی که در آنجا مورد نیاز نیستند استفاده کنید (مثلاً در صفحه قیمت = 5-10 می توانید ویژگی rel="canonical" را اضافه کنید، که نشان دهنده دسته بندی تمام مارمالادهای ترش است example.com/category.php?category=آب نبات ها&طعم=ترش& صفحه = همه ).

گزینه 2: Robots.txt و Disallow

URL هایی با پارامترهای غیر ضروری در فهرست /filtering/ گنجانده شده است که در robots.txt بسته می شود (عدم اجازه). این به همه موتورهای جستجو اجازه می‌دهد فقط پیوندهای «درست» (محتوای) سایت را بخزند، اما خزیدن URLهای ناخواسته را به یکباره مسدود می‌کند. به عنوان مثال ( example.com/category.php?category=gummy-candies)، اگر پارامترهای ارزشمند مورد، دسته و طعم بود و شناسه جلسه و قیمت اضافی بود، URL برای طعم به این صورت خواهد بود:
example.com/category.php?category=gummy-candies& مزه = ترش, اما تمام پارامترهای غیر ضروری، مانند قیمت، در URL در یک فهرست از پیش تعریف شده - /filtering/ گنجانده می شود:
example.com /فیلتر کردن/ category.php?category=آب نبات های صمغی&price=5-10,
که سپس از طریق robots.txt ممنوع خواهد شد:
عامل کاربر: *
غیر مجاز: /filtering/

گزینه 3: میزبان های جداگانه

مطمئن شوید بهترین راه حل ها، فهرست شده در بالا (به عنوان مثال، برای آدرس های غیر ضروری) همچنان اعمال می شود. در در غیر این صورتموتورهای جستجو در حال حاضر یک توده لینک بزرگ در ایندکس تشکیل داده اند. بنابراین، هدف شما کاهش رشد بیشتر صفحات غیرضروری خزیده شده توسط Googlebot و تثبیت سیگنال های نمایه سازی خواهد بود.

از پارامترهایی با کدگذاری استاندارد و فرمت کلید=مقدار استفاده کنید.

اطمینان حاصل کنید که مقادیری که محتوای صفحه را تغییر نمی‌دهند، مانند شناسه‌های جلسه، به‌جای دایرکتوری‌ها به‌عنوان کلید=مقدار پیاده‌سازی شوند.

وقتی هیچ عنصری برای فیلتر کردن وجود ندارد، اجازه کلیک یا ایجاد URL را ندهید.

منطق را به نگاشت پارامترهای URL اضافه کنید: به جای افزودن مداوم مقادیر، پارامترهای غیر ضروری را حذف کنید (به عنوان مثال، از تولید پیوند مانند این اجتناب کنید: example.com/product?cat=gummy-candy&cat=lollipops &cat=gummy-candy&item=swedish-fish).

پارامترهای با ارزش را در URL ها با فهرست کردن آنها در ابتدا ذخیره کنید (از آنجایی که URL ها در نتایج جستجو قابل مشاهده هستند) و پارامترهای کمتر مرتبط (مثلاً شناسه جلسه).
از این ساختار پیوند اجتناب کنید: example.com/category.php؟ session-id=123&tracking-id=456&category=آب نبات صمغی&طعم=ترش
اگر درک روشنی از نحوه کار لینک ها در سایت خود دارید، پارامترهای URL را در Webmaster Tools پیکربندی کنید.

مطمئن شوید که هنگام استفاده از جاوا اسکریپت برای دستکاری پویا محتوا (مرتب‌سازی/فیلتر/پنهان کردن) بدون به‌روزرسانی URL، آدرس‌های وب واقعی در سایت شما وجود دارد که دارای ارزش جستجو هستند، مانند دسته‌بندی اصلی و صفحات محصول، که قابل خزیدن و فهرست‌بندی هستند. سعی کنید فقط استفاده نکنید صفحه اصلی(یعنی یک URL) برای کل سایت شما، و استفاده از جاوا اسکریپت برای تغییر پویا محتوا با پیمایش - این متأسفانه به کاربران تنها یک URL در جستجوها می دهد. علاوه بر این، بررسی کنید که عملکرد بر عملکرد فیلتر پویا تأثیر منفی نداشته باشد، زیرا در توانایی کاربر برای کار با سایت اختلال ایجاد می کند.

با مشخص کردن ویژگی rel="canonical" در نسخه ممتاز صفحه، نمایه سازی صفحات مختلف از یک محتوا را بهبود بخشید. ویژگی rel="canonical" را می توان در یک یا چند دامنه استفاده کرد.

نمایه سازی محتوای صفحه بندی شده (مثلاً page=1 و page=2 از دسته «آب نبات صمغی») را با یکی از موارد زیر بهینه کنید:

  • یک ویژگی rel="canonical" به یک سری از صفحات اضافه کنید که دسته بندی متعارف را با پارامتر "view-all" نشان می دهد (برای مثال، page=1، page=2، و page=3 از دسته "آب نبات های صمغی" با با rel=”canonical” در دسته=آب نبات صمغی&صفحه=همه، اطمینان حاصل کنید که صفحه مربوط به کاربران است و به سرعت بارگذاری می شود.
  • از نشانه گذاری صفحه بندی rel="next" و rel="prev" برای نشان دادن رابطه بین صفحات جداگانه استفاده کنید (به "Paginaton with rel="next" و "rel="prev" " مراجعه کنید.
فقط لینک های متعارف را در نقشه سایت خود قرار دهید.

ما نگاهی گذرا به نصب و نحو اولیه PINQ، پورت LINQ به PHP انداختیم. در این مقاله، نحوه استفاده از PINQ برای شبیه سازی ویژگی جستجوی وجهی در MySQL را بررسی خواهیم کرد.

در این مقاله ما تمام جنبه های جستجوی وجهی را پوشش نمی دهیم. علاقه مندان می توانند اطلاعات مناسب را در اینترنت جستجو کنند.

یک جستجوی وجهی معمولی به این صورت عمل می کند:

  • کاربر یک کلمه کلیدی یا چند کلمه کلیدی را برای جستجو وارد می کند. به عنوان مثال، "روتر" برای جستجوی محصولاتی که در آن کلمه "روتر" در توضیحات، کلمات کلیدی، نام دسته، برچسب ها و غیره ظاهر می شود.
  • این سایت لیستی از محصولاتی را که با این معیارها مطابقت دارند برمی گرداند.
  • این سایت چندین لینک برای سفارشی کردن عبارات جستجوی شما ارائه می دهد. به عنوان مثال، ممکن است به شما امکان دهد سازنده های روتر خاصی را مشخص کنید، یا محدوده قیمت یا ویژگی های دیگر را تعیین کنید.
  • کاربر می تواند به تعیین معیارهای جستجوی اضافی برای به دست آوردن مجموعه داده های مورد علاقه ادامه دهد.

جستجوی وجهی بسیار محبوب است و است ابزار قدرتمند، تقریباً در هر وب سایت مرتبط با تجارت الکترونیک قابل مشاهده است.

متأسفانه جستجوی وجهی در MySQL تعبیه نشده است. بنابراین اگر همچنان از MySQL استفاده می کنیم، اما می خواهیم این فرصت را به کاربر بدهیم، چه باید بکنیم؟

با PINQ که رویکردی مشابه، قدرتمند و ساده دارد، می‌توانیم به همان رفتاری دست پیدا کنیم که انگار از موتورهای پایگاه داده دیگر استفاده می‌کنیم.

گسترش دمو از قسمت اول

نظر دهید: تمام کدهای این قسمت و قسمت اول را می توانید در مخزن پیدا کنید.

در این مقاله، نسخه ی نمایشی قسمت 1 را با پیشرفت قابل توجهی در قالب جستجوی وجهی گسترش خواهیم داد.

بیایید با index.php شروع کنیم و خطوط زیر را به آن اضافه کنیم:

$app->get("demo2"، تابع () استفاده از ($app) ($demo جهانی؛ $test2 = new pinqDemo\Demo($app)؛ بازگشت $test2->test2($app, $demo->test1 ($app))؛ $app->get("demo2/facet/(key)/(value)"، تابع ($key، $value) استفاده ($app) ($demo جهانی؛ $test3 = new pinqDemo\Demo($app); بازگشت $test3->test3($app، $demo->test1($app)، $key، $value ));

اولین مسیر ما را به صفحه ای می برد تا همه پست هایی که با جستجوی کلیدواژه مطابقت دارند را مشاهده کنیم. برای ساده نگه داشتن مثال، همه کتاب ها را از جدول book_book انتخاب می کنیم. همچنین مجموعه داده های حاصل و مجموعه ای از پیوندها را برای تعیین معیارهای جستجو نمایش می دهد.

در برنامه های واقعی، پس از کلیک بر روی چنین پیوندهایی، تمام فیلترهای جنبه با مقادیر مرزی مجموعه داده های حاصل تنظیم می شوند. بنابراین کاربر می تواند به صورت متوالی شرایط جستجوی جدیدی را اضافه کند، به عنوان مثال، ابتدا یک سازنده را انتخاب کند، سپس محدوده قیمت را مشخص کند و غیره.

اما در این مثال ما این رفتار را اجرا نمی کنیم - همه فیلترها مقادیر مرزی مجموعه داده اصلی را منعکس می کنند. این اولین محدودیت و اولین نامزد برای بهبود در نسخه ی نمایشی ما است.

همانطور که در کد بالا می بینید، توابع واقعی در فایل دیگری به نام pinqDemo.php قرار دارند. بیایید نگاهی به کد مربوطه ای بیندازیم که ویژگی جستجوی وجهی را فراهم می کند.

کلاس جنبه

اولین قدم ایجاد کلاسی است که یک جنبه را نشان دهد. به طور کلی، یک جنبه باید دارای چندین ویژگی باشد:

  • داده هایی که روی آن کار می کند ( داده $)
  • کلیدی که توسط آن گروه بندی انجام می شود ( کلید $)
  • نوع کلید ($type). می تواند یکی از موارد زیر باشد:
    • رشته کامل را برای مطابقت دقیق مشخص کنید
    • بخشی از رشته (معمولاً ابتدایی) را برای جستجو بر اساس الگو مشخص کنید
    • محدوده ای از مقادیر را برای گروه بندی بر اساس محدوده نشان می دهد
  • اگر نوع کلید محدوده ای از مقادیر است، باید یک مرحله مقدار برای تعیین مرزهای پایین و بالای محدوده تعریف کنید. یا اگر نوع بخشی از یک رشته است، باید مشخص کنید که چند حرف اول برای گروه بندی استفاده می شود ($range)

گروه بندی- حساس ترین بخش جنبه. تمام اطلاعات انبوهی که ممکن است یک جنبه بتواند برگرداند به معیارهای گروه بندی بستگی دارد. معمولاً بیشترین استفاده از معیارهای جستجو عبارتند از «رشته کامل»، «بخشی از رشته» یا «محدوده مقادیر».

فضای نام classFacet ( استفاده از Pinq\ITraversable، Pinq\Traversable؛ کلاس Facet ($data عمومی؛ // مجموعه داده اصلی کلید عمومی $؛ // فیلدی که براساس آن نوع عمومی $ گروه بندی می شود؛ // F: کل ردیف؛ S: رشته های شروع ; / کل خط (...) elseif ($this->type == "S") // شروع خط (...) elseif ($this->type == "R") // محدوده مقادیر ​​( $ filter = $this->data ->groupBy(function($row) ( return floor($row[$this->key] / $this->range) * $this->range; )) -> select(function (ITraversable $data) ( return ["key" => $data->last()[$this->key], "count" => $data->count()]; )); فیلتر ) )

عملکرد اصلی این کلاس برگرداندن یک مجموعه داده فیلتر شده بر اساس مجموعه داده اصلی و ویژگی های جنبه است. از کد مشخص است که برای انواع مختلفحساب ها استفاده می شود راه های مختلفگروه بندی داده ها در کد بالا، نشان دادیم که اگر داده ها را بر اساس محدوده ای از مقادیر در افزایش مشخص شده در گروه بندی کنیم، کد چگونه ممکن است به نظر برسد. محدوده $.

تنظیم جنبه ها و نمایش داده های منبع

عملکرد عمومی test2($app, $data) ($facet = $this->getFacet($data); return $app["twig"]->render("demo2.html.twig", array("facet" = > $facet, "data" => $data)); اشیاء را نمایان کنید و جنبه‌های $filter1 = new \classFacet\Facet($data, "author", "F") را برگردانید. $filter3 = new \classFacet($data, "price", "R", $filter1->key] = $filter1->getFacet(); $facet[$filter3->key] = $filter3->getFacet();

در متد getFacet() کارهای زیر را انجام می دهیم:

  • داده های اصلی را برای پردازش بیشتر به یک شیء Pinq\Traversable تبدیل کنید
  • ما سه جنبه ایجاد می کنیم. جنبه "نویسنده" بر اساس فیلد نویسنده گروه بندی می شود و گروه بندی بر اساس کل ردیف اجرا می شود. جنبه "عنوان" - با فیلد عنوان با گروه بندی بر اساس بخشی از خط (با 6 کاراکتر اول). جنبه "قیمت" - بر اساس فیلد قیمت با گروه بندی بر اساس محدوده (با افزایش 10)
  • در نهایت، جنبه ها را استخراج می کنیم و آنها را به تابع test2 برمی گردانیم تا بتوان برای نمایش به قالب خروجی داد.

خروجی جنبه ها و داده های فیلتر شده

در بیشتر موارد، فیلترها به صورت یک خط نمایش داده می شوند و شما را به مشاهده نتیجه فیلتر شده هدایت می کنند.

ما قبلاً یک مسیر ("demo2/facet/(key)/(value)") برای نمایش نتایج جستجو و فیلتر کردن لینک ها ایجاد کرده ایم.

مسیر بسته به کلید فیلتر شده و مقدار آن کلید، دو پارامتر دارد. تابع test3 که به این مسیر متصل است در زیر نشان داده شده است:

تابع عمومی test3 ($app، $originalData، $key، $value) ($data = \Pinq\Traversable::from($originalData)؛ $facet = $this->getFacet($data)؛ $filter = null; if ($key == "author") ($filter = $data ->where(function($row) use ($value) ($row["author"] == $value;)) ->orderByAscending( function($row) use ($key) ( return $row["price"]; )) ) elseif ($key == "price") ( ... ) else //$key== title ( .. . ) return $app["twig"]->render("demo2.html.twig", array("facet" => $facet, "data" => $filter) )

اساسا بسته به کلید، فیلترینگ (یک تابع ناشناس در عبارت Where) را با توجه به مقدار ارسال شده اعمال می کنیم و مجموعه داده های فیلتر شده زیر را دریافت می کنیم. همچنین می توانیم ترتیب فیلتر کردن داده ها را تعیین کنیم.

در نهایت داده های خام (به همراه فیلترها) را در قالب نمایش می دهیم. این مسیر از همان الگوی استفاده می کند که در "demo2" استفاده کردیم.

نوار جستجو

    (% برای k، v به صورت %)
  • ((k|با حروف بزرگ))
    • (% برای vv در v %)
    • ((vv.count))((vv.key))
    • (%endfor%)
    (%endfor%)

باید به خاطر داشته باشیم که جنبه های تولید شده توسط برنامه ما آرایه های تو در تو هستند. در سطح اول، این آرایه ای از همه جنبه ها است، و در مورد ما، سه مورد از آنها وجود دارد (به ترتیب برای نویسنده، عنوان، قیمت).

هر جنبه دارای یک آرایه کلید-مقدار است، بنابراین می‌توانیم با استفاده از روش‌های معمولی روی آن تکرار کنیم.

توجه داشته باشید که چگونه URL ها را برای پیوندهای خود می سازیم. ما هم از کلید حلقه بیرونی (k) و هم از کلیدهای حلقه داخلی (vv.key) به عنوان پارامترهای مسیر ("demo2/facet/(key)/(value)" استفاده می کنیم. اندازه آرایه ها (vv.count) برای نمایش در قالب استفاده می شود.

تصویر اول مجموعه داده های اصلی را نشان می دهد و تصویر دوم بر اساس محدوده قیمت از 0 تا 10 دلار فیلتر شده و بر اساس نویسنده مرتب شده است.

عالی، ما توانستیم جستجوی وجهی را در برنامه خود شبیه سازی کنیم!

قبل از پایان این مقاله، لازم است نگاهی نهایی به مثال خود بیندازیم و مشخص کنیم چه چیزی را می توان بهبود بخشید و چه محدودیت هایی داریم.

بهبودهای احتمالی

به طور کلی، این یک مثال بسیار اساسی است. ما فقط سینتکس و مفاهیم اولیه را بررسی کرده‌ایم و آنها را به عنوان یک مثال کاربردی پیاده‌سازی کرده‌ایم. همانطور که قبلاً گفته شد، ما چندین حوزه داریم که می توان آنها را برای انعطاف پذیری بیشتر بهبود بخشید.

ما باید معیارهای جستجوی "همپوشانی" را پیاده سازی کنیم، زیرا مثال فعلی ما را به توانایی اعمال فیلتر جستجو فقط در مجموعه داده های اصلی محدود می کند. این بزرگترین پیشرفتی است که می توانم تصور کنم.

محدودیت ها

جستجوی جنبه اجرا شده در این مقاله دارای محدودیت‌های جدی است (که ممکن است برای سایر پیاده‌سازی‌های جستجوی جنبه نیز اعمال شود):

ما هر بار داده ها را از MySQL واکشی می کنیم

این اپلیکیشن از فریم ورک Silex استفاده می کند. مانند هر فریمورک نقطه ورود واحدی مانند Silex، Symfony، Laravel، فایل index.php (یا app.php) آن هر بار که یک مسیر تجزیه می شود و توابع کنترلر اجرا می شوند فراخوانی می شود.

اگر به کد موجود در index.php ما نگاه کنید، متوجه خواهید شد که خط کد زیر است:

$demo = new pinqDemo\Demo($app);

هر بار که صفحه برنامه ارائه می شود فراخوانی می شود، به این معنی که هر بار خطوط کد زیر اجرا می شود:

نسخه نمایشی کلاس ($books خصوصی = ""؛ تابع عمومی __construct($app) ($sql = "انتخاب * از ترتیب book_book بر اساس شناسه"؛ $this->books = $app["db"]->fetchAll($sql ;)

اگر از فریم ورک استفاده نکنیم بهتر است؟ خوب، علیرغم این واقعیت که توسعه برنامه های کاربردی بدون چارچوب ایده خوبی نیست، می توانم بگویم که ما با مشکلات مشابهی روبرو خواهیم شد: داده ها (و وضعیت) بین درخواست های مختلف HTTP حفظ نمی شوند. این یک ویژگی اساسی HTTP است. با استفاده از مکانیسم های کش می توان از این امر جلوگیری کرد.

مقداری را نجات دادیم پرس و جوهای SQLبا استفاده از جنبه ها به جای ارسال یک پرس و جو انتخابی برای بازیابی داده ها، و سه گروه پرس و جو با عبارت های مربوط به کجا، ما فقط یک پرس و جو را اجرا کردیم و از PINQ برای دریافت اطلاعات جمع آوری شده استفاده کردیم.

نتیجه گیری

در این قسمت قابلیت جستجوی جنبه ای را در مجموعه ای از کتاب ها پیاده سازی کردیم. همانطور که گفتم، این فقط یک مثال کوچک است که هنوز جای پیشرفت دارد و تعدادی محدودیت دارد.

ناوبری وجهی یک مشکل برای همه سایت های تجارت الکترونیک است. تعداد بیش از حد صفحاتی که برای تغییرات مختلف یک عنصر استفاده می شوند، کارایی جستجو را تهدید می کند. این می تواند تأثیر منفی بر سئو و تجربه کاربر داشته باشد. کارشناسان وبلاگ سئو هکر توضیح دادند که ناوبری وجهی چیست و چگونه می توان آن را بهبود بخشید.

ناوبری وجهی: تعریف

این نوع پیمایش معمولاً در نوارهای کناری سایت‌های تجارت الکترونیک یافت می‌شود و حاوی فیلترها و جنبه‌هایی است - پارامترهایی که کاربر به دلخواه پیکربندی می‌کند. به مشتریان فروشگاه آنلاین اجازه می دهد تا محصول مورد نظر خود را با استفاده از ترکیبی از ویژگی ها جستجو کنند که محصولات را فیلتر می کند تا زمانی که کاربران آنچه را که نیاز دارند پیدا کنند.

وجوه و فیلترها با یکدیگر متفاوت هستند. تفاوت اینجاست:

  • وجوه مقوله های نمایه شده هستند. آنها به اصلاح فهرست محصولات کمک می کنند و به عنوان افزونه های دسته های اصلی عمل می کنند. جنبه ها به هر انتخابی که کاربر انجام می دهد معنای منحصر به فردی می بخشد. از آنجایی که وجوه ایندکس می‌شوند، باید سیگنال‌های مربوطه را به موتور جستجو ارسال کنند تا اطمینان حاصل شود که صفحه دارای تمام ویژگی‌های مهم است.

  • فیلترها برای مرتب‌سازی و اصلاح آیتم‌ها در فهرست‌ها استفاده می‌شوند. آنها برای کاربران ضروری هستند، اما نه برای موتورهای جستجو. فیلترها ایندکس نمی شوند زیرا محتوای صفحه را تغییر نمی دهند، بلکه فقط آن را به ترتیب دیگری مرتب می کنند. این باعث می شود چندین URL دارای محتوای تکراری باشند.

مشکلات احتمالی

هر ترکیب وجه ممکن URL منحصر به فرد خود را دارد. از منظر سئو می تواند مشکلاتی ایجاد کند. در اینجا موارد اصلی وجود دارد:

  • محتوای تکراری
  • اتلاف بودجه در اسکن
  • از بین بردن تفاوت لینک ها

همانطور که سایت شما رشد می کند، تعداد صفحات تکراری نیز افزایش می یابد. پیوندهای دریافتی ممکن است به صفحات تکراری مختلفی بروند. این امر ارزش لینک ها را کاهش می دهد و توانایی صفحات را برای رتبه بندی محدود می کند.

احتمال آدمخواری کلمات کلیدی نیز افزایش می یابد. چندین صفحه سعی می کنند برای کلمات کلیدی یکسان رتبه بندی کنند و در نتیجه رتبه های کمتر ثابت و پایین تری دارند. اگر هر کلمه کلیدی فقط یک صفحه را هدف قرار می داد، می توان از این مشکل جلوگیری کرد.

راه حل های ناوبری وجهی

هنگام انتخاب راه حلی برای پیمایش وجهی، هدف نهایی خود را در نظر بگیرید: افزایش تعداد صفحاتی که ایندکس می کنید یا کاهش تعداد صفحاتی که نمی خواهید ایندکس شوند. در اینجا چند راه حل وجود دارد که ممکن است برای شما مفید باشد:

AJAX

اگر از AJAX استفاده می کنید، وقتی کاربر روی یک وجه یا فیلتر کلیک می کند، یک URL جدید ایجاد نمی شود. از آنجایی که هیچ URL منحصر به فردی برای هر ترکیب وجه ممکن وجود نخواهد داشت، مشکل محتوای تکراری، آدم خواری کلمات کلیدی و هزینه های هدر رفته نمایه سازی به طور بالقوه حذف می شود.

AJAX فقط قبل از راه اندازی سایت تجارت الکترونیک می تواند موثر باشد. برای حل مشکلات منابع موجود استفاده نمی شود. این روش همچنین مستلزم هزینه های خاصی از جانب شما است.

تگ noindex

تگ noindex برای اینکه به ربات ها بگوید یک صفحه خاص را از فهرست حذف کنند استفاده می شود. به این ترتیب در نتایج جستجوی گوگل نمایش داده نمی شود. این به کاهش مقدار محتوای تکراری که در فهرست و نتایج جستجو ظاهر می شود کمک می کند.

این مشکل بودجه خزیدن را حل نمی کند زیرا ربات ها همچنان از صفحه شما بازدید می کنند. همچنین به توزیع ارزش پیوندها کمکی نمی کند.

ویژگی rel = متعارف

با این ویژگی، به گوگل می‌گویید که یک صفحه اصلی ترجیحی برای فهرست‌بندی و رتبه‌بندی دارید، و همه نسخه‌های دیگر محتوای آن صفحه فقط تکراری هستند که نیازی به ایندکس شدن ندارند.

سوفیا ابراگیمووا

بازاریاب محتوا

اگر بتوان به همان صفحه در سایت شما از چندین URL دسترسی پیدا کرد، روبات های جستجوگر هر URL را به عنوان یک صفحه جداگانه در نظر می گیرند. ربات ها تصمیم می گیرند که محتوای سایت شما منحصر به فرد نیست و این بر رتبه بندی تأثیر منفی می گذارد و موقعیت شما را در نتایج جستجو کاهش می دهد. برای جلوگیری از این امر، صفحه اصلی اصلی را با قرار دادن دنباله کاراکترهای زیر در بلوک HEAD مشخص کنید:

برای حل مشکل محتوای تکراری می توانید از صفحات canonical استفاده کنید و لینک اشتراک گذاری با صفحه اصلی شما ادغام می شود. اما این احتمال وجود دارد که ربات‌ها همچنان صفحات تکراری را بخزند، که این اتلاف بودجه خزیدن است.

Robots.txt

بستن برخی از صفحات از نمایه سازی به شما امکان می دهد به نتایج خوبی برسید. این یک راه ساده، سریع و قابل اعتماد است. تنظیم یک پارامتر سفارشی برای مشخص کردن همه راحت‌تر است ترکیبات ممکنجنبه ها و فیلترهایی که می خواهید مسدود کنید. آن را در انتهای هر URL که می‌خواهید مخفی کنید (http://full page address/robots.txt) اضافه کنید یا از متا تگ Robots در ناحیه HEAD کد صفحه استفاده کنید.

هنگام ایجاد تغییرات در URL، به خاطر داشته باشید که 3 تا 4 هفته طول می کشد تا ربات ها متوجه این تغییرات شده و به آنها پاسخ دهند.

در اینجا نیز مشکلات خاصی وجود دارد. ارزش پیوندها محدود خواهد بود و یک URL مسدود شده ممکن است به دلیل وجود پیوندهای خارجی ایندکس شود.

کنسول جستجوی گوگل

این یک راه عالی برای رفع موقت مشکلات شما در حالی است که روی ایجاد یک سیستم ناوبری بهتر و کاربرپسندتر کار می کنید. می توانید از کنسول استفاده کنید جستجوی گوگلبه موتور جستجو بگویید که چگونه سایت شما را بخزد.

  • وارد شوید حساب کاربریکنسول را انتخاب کنید و بخش "Crawl" را انتخاب کنید:

  • روی دکمه “URL Parameters” کلیک کنید:

  • تأثیری که هر یک از تنظیمات شما روی صفحه خواهد داشت و می‌خواهید Google با آن صفحات چگونه رفتار کند را مشخص کنید.

به یاد داشته باشید که این روش فقط محتوای تکراری را از خزنده های گوگل پنهان می کند. صفحات همچنان در بینگ و یاهو ظاهر خواهند شد.

نحوه بهبود ناوبری وجهی

بیایید به طور خلاصه تمام روش هایی را که به شما امکان ایجاد ناوبری وجهی صحیح را می دهد در نظر بگیریم:

  • با استفاده از AJAX
  • پیوندهای دسته‌ها را حذف یا پنهان کنید یا صفحاتی را که محتوایی ندارند را فیلتر کنید.
  • امکان فهرست‌بندی ترکیب‌های خاصی از جنبه‌ها که حجم بالایی از ترافیک جستجو دارند
  • تنظیم سلسله مراتب سایت از طریق خرده نان در دسته ها و زیر مجموعه ها.
  • ایجاد صفحات متعارف (اصلی) برای محتوای تکراری.
  • ویژگی های نمایه سازی را از صفحات مؤلفه در کل سری با استفاده از نشانه گذاری صفحه با rel="next" و rel="prev" ادغام کنید.

نتیجه گیری

هر کدام از راه حل های ذکر شده دارای مزایا و معایب خاص خود هستند. هیچ راه حل جهانی وجود ندارد، همه چیز به ویژگی های کسب و کار شما و مورد خاص بستگی دارد. ناوبری وجهی بهینه به سایت شما اجازه می دهد تا طیف وسیع تری از کلمات کلیدی را هدف قرار دهد. برای جلوگیری از خطر، مطمئن شوید که ناوبری نه تنها الزامات روبات های جستجوگر را برآورده می کند، بلکه تجربه کاربری خوبی را نیز ارائه می دهد.

فیلتر هوشمند یا جستجوی وجهی یک فیلتر بر اساس دسته بندی محصول است که در فروشگاه های اینترنتی بزرگ و همان Yandex.market قابل مشاهده است. این به شما کمک می کند محصولات را مرتباً مرتب کنید برای کاربر لازم استخواص، از بین بردن هر چیز غیر ضروری. این یک گزینه بسیار مناسب است که به شما امکان می دهد به سرعت محصول یا مواد مورد نظر را در سایت پیدا کنید.

و بنابراین اجازه دهید مستقیماً به نصب و پیکربندی ماژول های مورد نیاز خود بپردازیم

ابتدا باید ماژول های زیر را دانلود و نصب کنیم: Search API، Search API Database Search، Entity API و Views.

در صفحه ماژول ها را فعال می کنیم:

  • جستجوی API
  • جستجو نماها
  • جستجو در پایگاه داده
  • Entity API
  • بازدیدها
  • مشاهده رابط کاربری
  • Ctools

ایجاد سرور جستجو

برویم به پیکربندی > جستجو و فراداده >جستجوی API(/admin/config/search/search_api) و کلیک کنید سرور اضافه کنید.
سپس نام سرور را در لیست کشویی وارد کنید کلاس خدماتانتخاب کنید سرویس پایگاه دادهو ذخیره کنید.

ایجاد یک شاخص

برویم به پیکربندی > جستجو و ابرداده >جستجوی API(/admin/config/search/search_api)، کلیک کنید سرور اضافه کنید (افزودن نمایه).
نام ایندکس را در فیلد وارد کنید نوع مورد (نوع مورد)انتخاب کن مواد"، در میدان سرورانتخاب کنید سرور پایگاه داده، کلیک کنید ایجاد یک شاخص


در فرمی که باز می شود، کادرهایی که مرتب سازی توسط آنها انجام می شود را علامت بزنید و ذخیره کنید.
برای اینکه بتوانید بر اساس نام گره مرتب کنید، عنوان را روشن کنید و نوع مقابل آن را در لیست کشویی انتخاب کنید. رشته، نه متن کامل. شما نمی توانید بر اساس متن کامل مرتب کنید.

در فرم بعدی که باز می شود فیلترها(روی کار) همه چیز را به عنوان پیش فرض گذاشتم، به برگه بروید مشاهده کنید (وضعیت) و فشار دهید اکنون فهرست کنید (اکنون فهرست کنید).
پس از تکمیل ایندکس، یک صفحه جستجو ایجاد می کنیم.

ایجاد صفحه جستجو

برویم به Structure > Viewsو کلیک کنید یک نمای جدید اضافه کنید (افزودن نمای جدید).
در نمای جدید در لیست کشویی نمایش دهید (نمایش)فهرستی را که قبلا ایجاد کرده بودیم انتخاب کنید، فیلدهای باقیمانده (نام، عنوان و مسیر) را در صورت نیاز پر کنید.


بعد، کلیک کنید ذخیره و پیکربندی کنید(ادامه و ویرایش)نمای را طبق معمول تنظیم کنید. در معیارهای فیلتر، نمایش فقط مطالب منتشر شده و نوع گره مورد نظر را اضافه کردم و نمایش فیلدهای لازم را پیکربندی کردم (برای اینکه بتوانید بر اساس آنها فیلتر کنید باید این فیلدها را به فهرست اضافه کنید).

در این مرحله، ما کار را با تنظیم نمای انجام می دهیم.

A/search_api_ranges.module +++ b/search_api_ranges.module @@ -144,11 +144,8 @@ تابع search_api_ranges_minmax($variables, $order = "ASC") (// در غیر این صورت حداقل/حداکثر ما همیشه برابر با کاربر است input $filters = &$query->getFilter()->getFilters( foreach ($filters as $key => $filter) ( - - // بررسی آرایه: فیلترهای سبک قدیمی اشیایی هستند که می توانیم از آنها بگذریم. - if (is_array($filter)) ( - if ($filter == $variables["range_field"] || ($filter != $variables["range_field"] && $filter == "")) ( - $ current_filter = $filters[$key] + if(isset($filter->tags) && is_array($filter->tags))( + if(in_array("facet:".$variables["range_field"], $ filter->tags))( unset($filters[$key]); ))

وصله لغزنده رابط کاربری JQuery: تنظیم تغییر مسیر

در نسخه 7x-1.5 ماژول، با این واقعیت مواجه شدم که اگر ویجت اسلایدر در صفحه ای غیر از صفحه جستجو قرار داشت، پس از تغییر محدوده قیمت، جهت به صفحه فعلی هدایت می شود و نه به جستجو. صفحه
خطا در تابع نهفته است search_api_ranges_block_slider_view_form_submit()(پرونده search_api_ranges.module، خط 364).
من واقعاً به آنچه آنجا بود و چرا نگاه نکردم، فقط کد را کمی در خط 427 تغییر دادم:

Drupal_goto($path, array("query" => array($params), "language" => $language)); + drupal_goto($values["path"], array("query" => array($params), "language" => $language));

پس از آن مشکل حل شد.

© 2024 ermake.ru -- درباره تعمیر رایانه شخصی - پورتال اطلاعاتی