Bunun için en sağlam script - yazılımlardan biri olan opencart sistemini önermemek bana göre bencillik olur. kolay anlaşılabilir alt yapısıyla dıştan müdahale edilmeye fırsat veren sade kodlamalarla istenildiği gibi cazip bir şekilde tasarıma açıktır.
Tamam güzel sciriptimizi kurduk türkçeyede çevirdik ama reklam tanıtım vs işler nasıl olacak ? Sitemizi dünyaya nasıl duyuracağız. İşte burada seo optimizasyonu devereye girmektedir. Çoğumuzun bildiği ve aşina olduğu bu vaz geçilmez kalıbımızı opencarta nasıl entegre edebiliriz? ham bir opancart için bu aşamalar nasldır? onu bi inceleyelim.
Eğer tema değişecek ve daha profesyonel işlemler için düşüncesi olanlar varsa responsive temları tavsiye ederim Bunlar genellikle seo optimizesiyle brlikte yayınlanırlar. Bunun haricinde ücretsiz temalarda bu işlemlere başlayalım.
İlk kuralımız kurulu sistemimizde karışık ve gereksiz ister css ister html isterse js kodlamasından kesinlikle kaçınmalıyız. Aşırı yük bindiren gereksiz süslemelerden optimize edilmemiş js css ve resimlerden kaçınmalıyız.
1.) Sitelerimizde bulunan css ve jsleri en ideal biçimde minimize etmeliyiz. Bu siteye açılışta binen ve çalışmasını güçleştirecek olan yükten kurtracaktır. Benjsleri pek minimize edemedim genellikle sorun yaşadığımdan sadece css minize etmek için bu siteyi önerebilirim. ( minifier ). Daha sonra resimlerimizi optimize etmemiz gerekiyor bunun için adobe photoshop programını tavsiye ederim. Bunlar standart yükten kurtulmak için gerekli adımlar
2.) .htaccess optimizesi . bilindiği üzere bu işlem olmazsa olmazlardan biridir. ve çok gereklidir. .htaccess dosyamıza etag,gzip,deflate gibi skıştırma önbellekleme işlemlerine tabii tuttuğumuz zaman siteye aşırı yük binmesi en gellenecek ve sitemiz hızlı açılacaktır. optimizeli sürümde kullandığım kodlar aşağıdaki gibidir. ( bir çoğunu bu siteden aldım ve opencarta göre uyarladım. ). eksik fazla bu işlerden daha iyi arkadaşlar uyarırrsa geliştirme için daha faydalı olur.
# 1.To use URL Alias you need to be running apache with mod_rewrite enabled.
# 2. In your opencart directory rename htaccess.txt to .htaccess.
# For any support issues please visit: http://www.opencart.com
FileETag MTime Size
# BEGIN Turn ETags Off
Header unset ETag
FileETag None
# END Turn ETags Off
ExpiresActive on
ExpiresDefault "access plus 1 year"
Options +FollowSymlinks
AddDefaultCharset ISO-8859-9
# Prevent Directoy listing
Options -Indexes
# Prevent Direct Access to files
Order deny,allow
Deny from all
# SEO URL Settings
RewriteEngine On
# If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/
RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^download/(.*) /index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
### Additional Settings that may need to be enabled for some servers
### Uncomment the commands by removing the # sign in front of it.
### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that.
# 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
# php_flag register_globals off
# 2. If your cart has magic quotes enabled, This may work to disable it:
# php_flag magic_quotes_gpc Off
# 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
# php_value upload_max_filesize 999M
# 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value post_max_size 999M
# 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value max_execution_time 200
# 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value max_input_time 200
# 7. disable open_basedir limitations
# php_admin_value open_basedir none
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_USER_AGENT} (havij|libwww-perl|wget|python|nikto|curl|scan|java|winhttp|clshttp|loader) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (;|<|>|'|"|\)|\(|%0A|%0D|%22|%27|%28|%3C|%3E|%00).*(libwww-perl|wget|python|nikto|curl|scan|java|winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
RewriteCond %{THE_REQUEST} \?\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} \/\*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} etc/passwd [NC,OR]
RewriteCond %{THE_REQUEST} cgi-bin [NC,OR]
RewriteCond %{THE_REQUEST} (%0A|%0D|\\r|\\n) [NC,OR]
RewriteCond %{REQUEST_URI} owssvr\.dll [NC,OR]
RewriteCond %{HTTP_REFERER} (%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_REFERER} \.opendirviewer\. [NC,OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [NC,OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [NC,OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC,OR]
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC,OR]
RewriteCond %{QUERY_STRING} (\.\./|%2e%2e%2f|%2e%2e/|\.\.%2f|%2e\.%2f|%2e\./|\.%2e%2f|\.%2e/) [NC,OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR]
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} \=\|w\| [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)/self/(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)cPath=http://(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*embed.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^e]*e)+mbed.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*object.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^o]*o)+bject.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} ^.*(\(|\)|<|>|%3c|%3e).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\x00|\x04|\x08|\x0d|\x1b|\x20|\x3c|\x3e|\x7f).* [NC,OR]
RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
RewriteCond %{QUERY_STRING} (\.{1,}/)+(motd|etc|bin) [NC,OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} \-[sdcr].*(allow_url_include|allow_url_fopen|safe_mode|disable_functions|auto_prepend_file) [NC,OR]
RewriteCond %{QUERY_STRING} (;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
RewriteCond %{QUERY_STRING} (sp_executesql) [NC]
RewriteCond %{HTTP_USER_AGENT} ^w3af.sourceforge.net [NC,OR]
RewriteCond %{HTTP_USER_AGENT} dirbuster [NC,OR]
RewriteCond %{HTTP_USER_AGENT} nikto [NC,OR]
RewriteCond %{HTTP_USER_AGENT} SF [OR]
RewriteCond %{HTTP_USER_AGENT} sqlmap [NC,OR]
RewriteCond %{HTTP_USER_AGENT} fimap [NC,OR]
RewriteCond %{HTTP_USER_AGENT} nessus [NC,OR]
RewriteCond %{HTTP_USER_AGENT} whatweb [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Openvas [NC,OR]
RewriteCond %{HTTP_USER_AGENT} jbrofuzz [NC,OR]
RewriteCond %{HTTP_USER_AGENT} libwhisker [NC,OR]
RewriteCond %{HTTP_USER_AGENT} webshag [NC,OR]
RewriteCond %{HTTP:Acunetix-Product} ^WVS
RewriteRule ^.* http://127.0.0.1/ [R=301,L]
RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
RewriteRule .* – [F,L]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.lazbakkal\.biz$
RewriteRule ^(.*)$ http://lazbakkal.biz/ $1 [L,R=301]
Order Allow,Deny
Deny from 46.119.35.
Deny from 46.119.45.
Deny from 91.236.74.
Deny from 93.182.147.
Deny from 93.182.187.
Deny from 94.27.72.
Deny from 94.27.75.
Deny from 94.27.76.
Deny from 193.105.210.
Deny from 195.43.128.
Deny from 198.144.105.
Deny from 199.15.234.
Deny from 91.200.13.87.
Deny from 49.74.155.215.
Deny from 81.214.175.228.
Deny from 78.178.240.58.
Deny from 78.173.179.91.
Deny from 82.200.168.83.
Deny from 212.156.45.238.
Deny from 78.178.243.76.
Deny from 78.191.47.181.
Deny from 78.187.238.107.
Deny from 188.190.100.50.
Allow from all
# Enable GZIP
# Compress HTML, CSS, JavaScript, Text, XML and fonts
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include
mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
# Remove browser bugs (only needed for really old browsers)
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent
# Expires Headers - 2678400s = 31 days
Header set Connection keep-alive
ExpiresActive On
ExpiresDefault "access plus 2678400 seconds"
ExpiresByType text/html "access plus 7200 seconds"
ExpiresByType image/gif "access plus 2678400 seconds"
ExpiresByType image/jpeg "access plus 2678400 seconds"
ExpiresByType image/png "access plus 2678400 seconds"
ExpiresByType text/css "access plus 750000 seconds"
ExpiresByType text/javascript "access plus 2678400 seconds"
ExpiresByType application/x-javascript "access plus 2678400 seconds"
# Cache Headers
# Cache specified files for 31 days
Header set Cache-Control "max-age=2678400, public"
# Cache HTML files for a couple hours
Header set Cache-Control "max-age=7200, private, must-revalidate"
# Cache PDFs for a day
Header set Cache-Control "max-age=86400, public"
# Cache Javascripts for 31 days
Header set Cache-Control "max-age=2678400, private"
order deny,allow
deny from all
order allow,deny
deny from all
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
3.) Mnifierimiz tamam. htaccessimiz tamam şimdi sıra opencart için cache kuralına geldi . Resmi sitesinde ücretsiz olarak sunulan page cache moduluyle tabii php sürüm 5.4.x ve üzeri gereklidir. sayfa açılış hızınıza pozitif olarak çok büyük değer katacaktır. Not : bunu kurduğunuzda header .tpl nizi note++ ile açarak utf8 olarak kaydediniz. Aksi takdirde tr karakter hatası alırsınız. Yine google bir hizmeti olan cdn modlunude tavsiye ederim demir baş jsleri optimize ederek yine hızınıza olumlu değer katacaktır.
4.) Şimdi sıra geldi linklerimize opencart sicripti seolu link yapısıyla gelmediğinden "routu=common/home?" ile geldiğinden arama motorları bu yapıyı pek sevmezler bunu gidermenin iki yolu var tabiiki ücretsiz olarak biri seo sef friendly modülü bir diğeri ise deadcow 2.0 modulu.
seo sef friendly : Bu modul sistemle tümleşik olan kasaya git sepetim vb.. sayfaların link yapılarını ve biçemlerini değiştirip seoya uygun hale getirmektedir.
Deadcow : Seo sef friendly ile aynı mantık olup sadece kategoriler ürünler ve meta etiketleri üzerinde seoya uygun hale getirmektedir. Bu moodulu türkçe destek sayfalarında bulabilirsiniz.
5.) Meta etiket ve biçem etiket kullanınız.Bunlar opencart ile gelmezler. Ayrıyeten vqmod yordamıyla yada manuel olarak eklenmesi gerekmektedir. Bunlar google vb arama motorları için çok gereklidirler. Meta etiketl eklemek için bu sayfadaki eklentileri kendi sürümüze uygun olanı seçiniz. Buaradan tek tek örnek eremem çünkü her konum için ayrı ayrı moduller bulunmaktadır. Biçem etiketleri sayfalarınızda kullanmanız gerek bir diğer önemli konumlardan birtanesidir.İster madullerde ürün adlarına marka isimlerine yada ürün açıklaması girerken kullanmak çok faydalıdır. Aramalarda direk olarak sitenizin gözükmesinde yarar sağlar örnek bir modul için olanı belirteyim.
bu kısımlara strong , em , li , b gibi belirteç biçem etiketleri girebilirsiniz.
6.) Olmazsa olmaz rich sniper: bu eklenti kemikteki ilik damardaki coşkun kan gibidir. google vb aramalarınızda sitenizin görünümünde son derece pozitif sonuçlar yapmaktadır. rich sniper için bu sayfadaki eklentiler den sizin sürümünüze uygun olanı yükleyiniz.
7.) Resim boyutlandırma: Bu opencartla gelen ne yazkki özelliklerden biri değildir ve google aramalarında resim boyutlarına önem vermektedir. misal sitede ekli olan bir resmin kodu şu şekilde olmalıdır. gibi bunu opencarta uyarlamak içinse son ürünler modulunden örnek veriyorum
dosyamızı açalım : catalog/controller/module/ latest.php
bulalım :
$image = $this->model_tool_image->resize($result['image'], $setting['image_width'], $setting['image_height']);
bi alt satıra ekleyelim :
$this->data['latest_width'] = $setting['image_width'];
$this->data['latest_height'] = $setting['image_height'];
Dosyamızı Açalım : catalog/view/theme/seninteman/template/module/ latest.tpl
Bulalım :
Değiştirelim :
burada önemli olan diğer sayfa ve modullere eklerken dikkat etmeniz gerek kısım
$image = $this->model_tool_image->resize($result['image'], $setting['image_width'], $setting['image_height']);
kalın yazıyla belirttiğim yerlerdir. sayfa ve module göre farklılık göstereceğinden boyut çeken satırlara göre düzeşltme yapmanız gerekmektedir.
8.) rss feed ve sitemap.xml : bunlar opencart ile tümleşik gelmezler. rss feed için önerdiğim modul budur. her ürün ekelemede eklenen ürünleri rss beslemesi içine almaktadır. sitemap için basit bir kod yordamıyla şu şekilde yapmaktayım
copy("http://demo.lazbakkal.biz/index.php?route=feed/google_sitemap","sitemap.xml");
?>
bunun çalışması içinse admin->katalog->ürün beslemesi-> google sitemap tı yanlış hatırlamıyorsam kurup konumunu açık hale getiriniz.
Şimdilik aklımdakiler bu kadar ilerleyen zamanda yine güncelleyeceğim.
bu makale aynı anda hem wmaracı'nda hemde tr-opencart'ta yayımlanmıştır.
Görüş ve önerilerinizi bekliyorum.