Wpisy

Nowe zasoby i wsparcie dla Magento 2.0

Magento Enterprise Edition i Community Edition w wersjach 2.0.1 są już dostępne i zawierają ważne aktualizacje bezpieczeństwa i funkcjonalności, wliczając w to oficjalne wsparcie dla PHP 7.0.2. Wraz z wspominanym wsparciem użytkownicy mogą skorzystać z ogromnej poprawy wydajności, drastycznie zmniejszonego zużycia pamięci i nowych funkcji językowych. Więcej informacji o PHP7 i innych aktualizacjach które przynoszą wersja COMMUNITY i ENTERPRISE znajdziecie w informacjach o wydaniu. Czytaj dalej

Konkurencja pomocna w pozycjonowaniu ?

Oczywiste jest że potrzebujemy ruchu na naszej stronie aby osiągnąć sukces. Brak ruchu oznacza :

  • brak klientów,
  • brak transakcji,
  • brak zysków.

Najlepszą formą pozyskania wartościowego ruchu dla witryny są wyszukiwarki internetowe. Niestety większość właścicieli sklepów internetowych nie docenia ruchu generowanego z wyników wyszukiwania, co często prowadzi do porażki całego przedsięwzięcia związanego z e-commerce.

Brak wysokiej pozycji w wyszukiwarkach skutkuje brakiem klientów na stronie a jeżeli nasz sklep nie ma klientów to nie ma i transakcji. Efektem czego jest nieopłacalność prowadzenia sklepu.

Wiadomo iż optymalizacja sklepu dla wyszukiwarek jest ważna, ale tym co decyduje o pozycji naszego sklepu w wyszukiwarkach są linki. Optymalizacja sklepu jest tylko wstępem do osiągnięcia wysokich pozycji w wynikach wyszukiwania. Jeżeli wybierzemy Magento jako nasz system e-commerce to większość pracy z tym związanej opiera się na prawidłowym uzupełnieniu wszystkich pól opisujących nasze kategorie i przedmioty. Dokładniejszy opis optymalizacji Magento zamieściliśmy pod wpisem Magento seo http://www.magento-specialists.pl/2010/05/16/magento-seo/

Zdobywanie linków do strony często jest czynnością czasochłonna i skomplikowaną. Wymaga wyszukiwania stron z wysoką pozycją i pagerank, o podobnej tematyce do naszego sklepu. W internecie można znaleźć dziesiątki poradników jak zdobyć wartościowe linki. Ale poradniki te tylko wymieniają nam miejsca jakimi możemy się posłużyć, takie jak :

  • artykuły
  • katalogi stron
  • wpisy na forach
  • wpisy na blogach
  • komentarze … itd

żaden poradnik nigdy nie da nam odpowiedzi które z forów będzie najlepszym miejscem na nasz link, albo wpis na jakim blogu najbardziej przyczyni się do poprawy naszej pozycji.

Czy więc pozostaje nam tylko umieszczanie linków w ciemno na wszystkich napotkanych po drodze stronach ?

Nie. Źródłem takiej wiedzy może być nasza konkurencja, jeżeli jakaś strona osiągnęła już pierwsze miejsce w google na frazie która nas interesuje to warto wzorować się na jej zapleczu.

No dobrze ale jak uzyskać taką wiedzę przecież nie zadzwonimy do nich z pytaniem jak się pozycjonują. Na szczęście można w bardzo prosty sposób dowiedzieć się, gdzie znajdują się linki do ich strony. Narzędziem które posłuży nam do takiej analizy będzie http://search.yahoo.com za pomocą prostego zapytania linkdomain:www.nasza-domena.pl poznamy linki prowadzące do strony naszego konkurenta skatalogowane przez yacho. Teraz tylko wystarczy nam zrobić listę tych miejsc i spróbować dodać tam też i nasze linki.

Dzięki takiemu zabiegowi zamiast dodawać na oślep linki i czekać na efekt, mamy już z góry wytypowaną pulę stron o możliwie wysokim znaczeniu. W końcu jeżeli za ich pomocą nasza konkurencja odniosła sukces to i nam pewnie się uda.

Hosting dla magento

Ostatnimi czasy, często dostajemy zapytania od naszych klientów, na temat jakie są wymagania dotyczące hostingu dla magento. Według strony producenta powinno to być :

  • Serwer apache w wersji co najmniej 1.3:
  • PHP w wersji co najmniej 5.2.13+
    • Z zainstalowanymi dodatkami:
      • PDO_MySQL
      • simplexml
      • mcrypt
      • hash
      • GD
      • DOM
      • iconv
      • curl
      • SOAP (if Webservices API is to be used)
    • Safe_mode off
    • Memory_limit nie mniej niż 256Mb (preferowane 512)
  • Serwer bazodanowy MySQL:
    • 4.1.20 lub wyższy
    • z obsługą mechanizmu składowania InnoD
  • Możliwość dodania zadań do crontab z PHP 5
  • możliwość używania .htaccess

No dobrzy tyle by było tej teorii, a jak wygląda nasze doświadczenie :

Zawsze odradzamy naszym klienta wszelkiej maści hostingi współdzielone i to niezależnie czy to jest jakaś mała firma hostingowa z serwerem za 50 zł rocznie, czy konto biznes na home za 600 zł rocznie. Żadne z tych rozwiązań nie nadaje się do profesjonalnego zastosowania magento. Podstawowymi problemami są zawsze limity nakładane na skrypty w platformach współdzielonych. I tak np dla home jest to :

  • wielkość postowanego pliku – 64 MB,
  • max_execution_time – domyślnie 30 sekund – maksymalny czas wykorzystania procesora,
  • maksymalny czas wykonania skryptu – 300 sekund,
  • maksymalna ilość przyznanej pamięci – 80MB,
  • maksymalna ilość jednocześnie otwartych plików przez pojedynczy proces – 32

W magento takie limity doprowadzą do błędu „cpu time limit exceeded” np przy wykonywaniu operacji indeksowania lub eksportu bazy. Co więcej z względu na maksymalny czas wykonywania skryptu nie uda nam się nawet wykonać kopi bazy danych za pomocą udostępnianego przez home phpMyAdmin. Na nasze zgłoszenie do help desku w tej sprawie otrzymaliśmy odpowiedź :

„phpMyAdmin działa również w oparciu o zasoby serwera, w zwiazku z tym nie jest on polecany do operacji na bazach danych o wiekszej pojemnosci.
W przypadku dużych baz danych do wykonywania na nich operacji sugerujemy wykorzystanie zewnętrznego klienta SQL (np. Navicat)”

Więc gdzie hostować Magento? Nasza odpowiedź na to pytanie, to zawsze : „Na serwerze dedykowanym”. Jeżeli koszta związane z takim serwerem przekraczają założenia projektu to powinniśmy się zainteresować firmami wyspecjalizowanymi z dostarczaniu hostingu dla magento lub VPS-ami. Jedną z takich firm jest www.centerkom.pl

Jak usunąć testowe dane z Magento?

Po zakończeniu wdrażania systemu magento często pojawia się konieczność skasowania danych wprowadzonych tam podczas testów, między innymi użytkowników, produktów kategorii i zamówień.
Poniżej prezentuję jak usunąć takie informacje z naszego systemu.

Aby usunąć testowych użytkowników i ich zamówienia należy z poziomu bazy danych wykonać następujące zapytania sql.

TRUNCATE `sales_order`;
TRUNCATE `sales_order_datetime`;
TRUNCATE `sales_order_decimal`;
TRUNCATE `sales_order_entity`;
TRUNCATE `sales_order_entity_datetime`;
TRUNCATE `sales_order_entity_decimal`;
TRUNCATE `sales_order_entity_int`;
TRUNCATE `sales_order_entity_text`;
TRUNCATE `sales_order_entity_varchar`;
TRUNCATE `sales_order_int`;
TRUNCATE `sales_order_text`;
TRUNCATE `sales_order_varchar`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `log_quote`;
TRUNCATE `report_event`;

ALTER TABLE `sales_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_datetime` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
ALTER TABLE `tag` AUTO_INCREMENT=1;
ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
ALTER TABLE `wishlist` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
ALTER TABLE `report_event` AUTO_INCREMENT=1;

-- reset customers
TRUNCATE `customer_address_entity`;
TRUNCATE `customer_address_entity_datetime`;
TRUNCATE `customer_address_entity_decimal`;
TRUNCATE `customer_address_entity_int`;
TRUNCATE `customer_address_entity_text`;
TRUNCATE `customer_address_entity_varchar`;
TRUNCATE `customer_entity`;
TRUNCATE `customer_entity_datetime`;
TRUNCATE `customer_entity_decimal`;
TRUNCATE `customer_entity_int`;
TRUNCATE `customer_entity_text`;
TRUNCATE `customer_entity_varchar`;
TRUNCATE `log_customer`;
TRUNCATE `log_visitor`;
TRUNCATE `log_visitor_info`;

ALTER TABLE `customer_address_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `log_customer` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor_info` AUTO_INCREMENT=1;

-- Reset all ID counters
TRUNCATE `eav_entity_store`;
ALTER TABLE  `eav_entity_store` AUTO_INCREMENT=1;

SET FOREIGN_KEY_CHECKS=1;

Usunięcie zapytań do wyszukiwarki:

TRUNCATE TABLE `catalogsearch_query`

Usunie tagów

TRUNCATE TABLE `tag`
TRUNCATE TABLE `tag_relation`

Usunięcie produktów i powiązanych z nimi danych:

TRUNCATE TABLE `catalog_product_bundle_option`;
TRUNCATE TABLE `catalog_product_bundle_option_value`;
TRUNCATE TABLE `catalog_product_bundle_selection`;
TRUNCATE TABLE `catalog_product_entity_datetime`;
TRUNCATE TABLE `catalog_product_entity_decimal`;
TRUNCATE TABLE `catalog_product_entity_gallery`;
TRUNCATE TABLE `catalog_product_entity_int`;
TRUNCATE TABLE `catalog_product_entity_media_gallery`;
TRUNCATE TABLE `catalog_product_entity_media_gallery_value`;
TRUNCATE TABLE `catalog_product_entity_text`;
TRUNCATE TABLE `catalog_product_entity_tier_price`;
TRUNCATE TABLE `catalog_product_entity_varchar`;
TRUNCATE TABLE `catalog_product_link`;
TRUNCATE TABLE `catalog_product_link_attribute`;
TRUNCATE TABLE `catalog_product_link_attribute_decimal`;
TRUNCATE TABLE `catalog_product_link_attribute_int`;
TRUNCATE TABLE `catalog_product_link_attribute_varchar`;
TRUNCATE TABLE `catalog_product_link_type`;
TRUNCATE TABLE `catalog_product_option`;
TRUNCATE TABLE `catalog_product_option_price`;
TRUNCATE TABLE `catalog_product_option_title`;
TRUNCATE TABLE `catalog_product_option_type_price`;
TRUNCATE TABLE `catalog_product_option_type_title`;
TRUNCATE TABLE `catalog_product_option_type_value`;
TRUNCATE TABLE `catalog_product_super_attribute`;
TRUNCATE TABLE `catalog_product_super_attribute_label`;
TRUNCATE TABLE `catalog_product_super_attribute_pricing`;
TRUNCATE TABLE `catalog_product_super_link`;
TRUNCATE TABLE `catalog_product_enabled_index`;
TRUNCATE TABLE `catalog_product_website`;
TRUNCATE TABLE `catalog_product_entity`;

TRUNCATE TABLE `cataloginventory_stock`;
TRUNCATE TABLE `cataloginventory_stock_item`;
TRUNCATE TABLE `cataloginventory_stock_status`;

INSERT  INTO `catalog_product_link_type`(`link_type_id`,`code`) VALUES (1,'relation'),(2,'bundle'),(3,'super'),(4,'up_sell'),(5,'cross_sell');
INSERT  INTO `catalog_product_link_attribute` (`product_link_attribute_id`, `link_type_id`, `product_link_attribute_code`, `data_type`) VALUES (1,2,'qty','decimal'), (2,1,'position','int'), (3,4,'position','int'), (4,5,'position','int'),(6,1,'qty','decimal'), (7,3,'position','int'), (8,3,'qty','decimal');
INSERT  INTO `cataloginventory_stock`(`stock_id`,`stock_name`) VALUES (1,'Default');