Windows 10 Apache VirtualHost Chrome

Grudzień 1st, 2016

Stary sposób tworzenia virtualhostów dla apache w przypadku windowsa 10 i google chrome przestał działać. Objawiało się to tym że żaden virtualhost nie był widoczny dla chroma, wskazywał na katalog główny. Rozwiązaniem problemu była zmiana konfiguracji virtualhostów:

<VirtualHost 127.0.0.1>
DocumentRoot „D:\Praca\web\cms”
ServerName cms.localhost
</VirtualHost>

na:

<VirtualHost localhost>
DocumentRoot „D:\Praca\web\cms”
ServerName cms.localhost
</VirtualHost>

Dlaczego? A kogo to obchodzi ważne że działa.

Instalacja Apache 2.4 na Windows

Listopad 11th, 2014

Kiedyś było miło i bezpośrednio na stronach apache.org można było pobrać instalatora. Dla wersji 2.4 już nie są tacy mili. Na szczęście ratuje nas parę stron, gdzie można pobrać skompilowane wersje. Ja użyłem:

http://www.apachehaus.com

Przy pobieraniu należy pamiętać żeby pobrać wersję dla kompilatora c++ który mamy zainstalowany, albo zainstalować najświeższy kompilator.

Jak rozpakujemy archiwum, wrzucamy go do dowolnego katalogu, odpalamy httpd.exe z katalogu bin i powinno śmigać. Warto uruchomić polecenie z wiersza poleceń:

httpd install -k

doda to między innymi apache jako usługę.

Konfiguracja httpd.conf, podaję z wartościami odpowiednimi dla mojego systemu windows i katalogów.

1. Ścieżka do apache:

Define SRVROOT „D:/Praca/Apache Group/Apache2.4”

2. Ścieżka do plików, jeśli nie pasuje nam htdocs w katalogu apache

DocumentRoot „D:/Praca/web”

<Directory „D:/Praca/web”>

3. Dodajemy virtualne serwery:

NameVirtualHost 127.0.0.1
<VirtualHost 127.0.0.1>
DocumentRoot „D:\Praca\web”
ServerName localhost
</VirtualHost>

i przykładowa subdomena:

NameVirtualHost 127.0.0.1
<VirtualHost 127.0.0.1>
DocumentRoot „D:\Praca\web\w2b\cms\public”
ServerName w2b.localhost
ServerAlias *.w2b.localhost
</VirtualHost>

4. Ścieżka do pliku php.ini

PHPIniDir „D:\Praca\Apache Group\php-5.5.18”

5. Konfiguracja php

– podajemy ścieżkę do dllki, znajdującej się w katalogu php: LoadModule php5_module „D:\Praca\Apache Group\php-5.4.25\php5apache2_4.dll”
– do sekcji: <IfModule mime_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Zend_Auth rememberMe

Maj 8th, 2011

Trochę się namęczyłem przy tym(1,5h) dlatego że nie wgłębiałem się nigdy w zasadę działania Zend_Session i dlatego że skopiowałem bezmyślnie kod z jakiegoś przykładu, który prawie działał.

Zend_Session to bardzo fajna klasa, nie dość że łatwo się używa to dodatkowo wprowadza metody które rozszerzają możliwości standardowej sesji php. Do rzeczy jak zrobić zapamiętaj mnie wykorzystując Zend_Auth.

Żeby tego dokonać trzeba wiedzieć że Zend wprowadza dodatkowy mechanizm który pozwala na ustawienie czasu życia konkretnego Zend_Session_Namespace poprzez metodę setExpirationSeconds($seconds, $variables = null). Można też po podaniu nazw zmiennych w danym namespace ustawić wygaśnięcie tylko dla nich. Czyli pierwszy krok to ustawienie czasu życia sesji dla klasy Zend_Auth czyli np.

$session = new Zend_Session_Namespace(‚Zend_Auth’);
$seconds  = 60 * 60 * 24 * 7; // 7 dni
$session->setExpirationSeconds($seconds);

Ale to jeszcze nie wszystko, bo sesja w php trwa jedynie tyle ile określa parametr session.cookie_lifetime, który jest ustawiony w php.ini i najczęściej przyjmuje wartość 0 co oznacza że ciasteczko, które przechowuje identyfikator sesji straci ważność po zamknięciu okna przeglądarki.  Parametr ten możemy zmienić we wspomniamym wyżej php.ini, .htaccess, lub używając metody ini_set lub funkcji php session_set_cookie_params albo korzystając z metody klasy Zend_Session::rememberMe – która jako parametr pobiera liczbę sekund.
Należy pamiętać żeby zrobić to przed zaczęciem korzystania z sesji. Ja np. ustawiłem to w application.ini: phpSettings.session.cookie_lifetime = 604800.

Błąd który popełniłem na początku i który zmusił mnie do przejrzenia źródeł Zend_Session i Zend_Session_Namespace było  skopiowanie kodu z jakiegoś przykładu w którym parametr sessions.cookie_liftime był ustawiany po wykonaniu logowania. Co było w tym złego? To że używając w innych miejscach sesji parametr sessions.cookie_liftime był standardowo ustawiany na 0 co powodowało usunięcie pliku cookie po zamknięciu okna przeglądarki. Nie od razu to skojarzyłem bo nie na każdej podstronie używałem dodatkowo sesji.

Cięcie mailingu

Listopad 2nd, 2010

Trochę męcząca sprawa. Raczej unikam tematu, ale czasami trzeba zrobić, więc nie ma rady. Poniżej kilka spostrzeżeń, które mogą się przydać:

  • im prostsze tym lepsze,
  • przeważnie w większości klientów poczty divy oraz atrybut float były dobrze obsługiwane jak również cała reszta. Problemów dostarczyła jedynie rodzina microsoft outlook,
  • dobrze jest unikać obrazów tła, można wbić do body, ale pozostałe obrazy lepiej osadzać poprzez tag <img>,
  • style, najlepiej umieszczać bezpośrednio w każdym tagu poprzez atrybut style(męczące i szybko syf w kodzie się robi, ale cóż…),
  • szkielet wiadomości, kolumny, elementy blokowe najlepiej robić w oparciu o tabelki, outlooki nie obsługują atrybutu width dla elementów div jedynie dla table, więc jak użyjemy divów będziemy mieli wszystko na 100%. Podobnie jest z padding(margin już ok).
  • Specyfikacja co można użyć w outlook 2007

Okrągłe ramki w css

Listopad 23rd, 2009

Jak zrobić okrągłe ramki? Rzecz wydaje się prosta i taka jest. Sposobów w sieci znalazłem wiele.

  • ramki css 3.0 – nie w każdej przeglądarce zadziała,
  • ramki tworzone za pomocą java script bez dodatkowych obrazów(ciekawe, ale skomplikowanych się nie dało zrobić),
  • ramki tworzone za pomocą java script i obrazów(to wydało mi się ciekawe).

Znalazłem gotowe, działające rozwiązanie, które za pomocą kodu java script obwijało w ramkę żądany element html. Ramka była podzielonym na składowe obrazem. Nie trzeba było dodawać dodatkowego kodu html żeby ją otrzymać bo to było dodawane przez js. Rozwiązanie wydało mi się ciekawe. Ale po tym jak obejrzałem kod java script, nie za bardzo mi się spodobał – był za długi i niechlujnie zrobiony, pewnie by coś przestało działać. Postanowiłem zrobić sam.

Założenie: zrobić jak najprościej.
1. Pierwszy etap to przygotowanie w Photo Shopie  ramki, narożników, cienia itd. Obrazy można pociąć tak że każdy narożnik i krawędź będzie oddzielnie(najprościej) lub łączyć je w celu ograniczenia liczby obrazów i żądań do serwera.
2. Ramkę do dowolnego elementu dodajemy, otaczając go w dodatkowe kontenery, które są wyposażone w tło(background) zawierające odpowiednią krawędź bądź narożnik. To w sumie wystarczy bo już mamy gotową ramkę. Ale jeśli ramek jest kilka, to robi nam się śmietnik w kodzie i jest kupa niepotrzebnych kontenerów(4 dla narożników i 4 dla krawędzi). Można by to było uporządkować.
3. Z pomocą w porządkowaniu przychodzi nam jQuery, a dokładnie metoda: wrap().

Kod do tworzenia ramek:

$(document).ready(function(){
        $('.roundMe').each(function(){
                $(this).wrap(
                '<div class="rounded"><div class="leftBorder"><div class="rightBorder"><div class="bottomBorder"><div class="leftUpperCorner"><div class="rightUpperCorner"><div class="leftLowerCorner"></div></div></div></div></div></div></div>'
                );
        });
});

Powyższy kod do każdego elementu posiadającego klasę roundMe doda ramkę. Poszczególne divy i obrazki w nich zawarte można grupować upraszczając to rozwiązanie.

Fatal error: Call to undefined method Zend_View_Helper_Placeholder_Container::ksort()

Listopad 7th, 2009

Fatal error: Call to undefined method Zend_View_Helper_Placeholder_Container::ksort() in /var/www/html3/library/zend/1.9.5/Zend/View/Helper/HeadMeta.php on line 333

Takie coś się pojawia przy wersji php 5.1.6. Najprostsze rozwiązanie to zrobić upgrade php do nowszej wersji i po bólu. Ale niestety nie wszędzie można to zrobić. Nie na każdy serwer mamy dostęp. Pozostaje wtedy tylko rozwiązanie prowizoryczne, autorem poniższego jest ktoś z forum zenda, na którym to znalazłem.

Aby się pozbyć powyższego błędu należy dodać do: Zend/View/Helper/Placeholder/Container/Abstract.php następującą metodę:
public function ksort()
{
$items = $this->getArrayCopy();
return ksort($items);
}
I znowu działa.

jak zaprojektować dobrą stronę internetową

Maj 17th, 2009

Jak zaprojektować dobrą stronę internetową? Najprostszą odpowiedzią jest – zlecić zrobienie strony profesjonalistom. Dlaczego? Niestety strony nie robi jeden człowiek. Do tego potrzebne jest co najmniej dwóch ludzi, a często i to za mało i tak na prawdę to potrzeba kilku osób. Minimum to grafik i koder Html i css.
No ale zakładamy że stronę robimy sami.

Jak zaprojektować dobrą stronę internetową?

  1. Zawartość merytoryczna.
    To jest najważniejsze. Treści to podstawa, wartościowe treści. Nieważne czy strona będzie dobrze wyglądać, czy kod będzie się sypać, dobre treści zawsze znajdą odbiorcę. Taka jest też idea pozycjonowania. Wartościowy content jest linkowany przez użytkowników w blogach, na forach, na własnych stronach itd.
  2. Grafika.
    Zasada im więcej tym lepiej raczej się nie sprawdza. Mając niewielkie umiejętności w tym zakresie, staramy się zrobić coś prostego, nie przesadzać z kolorami. Zrobienie ze strony choinki to nic dobrego. Do zaprojektowania wyglądu strony posłużyć się można programem Adobe Photoshop. 30 dniowy trial jest dostępny na stronie Adobe. Photoshop jest stosunkowo intuicyjny i po poznaniu podstawowych narzędzi oraz styli można zrobić całkiem ładny projekt.
    Zanim przystąpimy do prac trzeba wybrać kolorystykę strony. Dla tych, którzy nie mają wyczucia kolorów z pomocą przychodzi kuler, bardzo fajna aplikacja, firmy Adobe, która pozwala na wybranie schematu kolorów na podstawie fraz i wyszukiwarki. Nowe schematy są dodawane przez innych użytkowników. Proszę się nie przejmować, że kolorów w schemacie jest tylko 5. To wystarczająca ilość. Jak zabierzemy się do pracy i zaczniemy już układać wszystko okaże się że taki schemat jest wystarczający.
    Wielkość projektu. Teoretycznie nie ma ograniczeń. Ale trzeba pamiętać o tym że użytkownicy internetu mają różne monitory i dobrze by było zapewnić większości przyjemne oglądanie strony. Według ranking.pl w Polsce wciąż króluje rozdzielczość 1024x768px. Rozdzielczością w pionie nie musimy się przejmować, robimy strony dowolnie długie. Natomiast przesuwanie suwakiem w poziomie jest niewygodne, więc projekt graficzny musi się zmieścić w szerokości 1024px. Należy też pamiętać że suwak przeglądarki zajmuje 24px, więc do użytku zostaje nam 1000px – jest to więc maksymalny obszar jaki mamy do wykorzystania.
    Layout. Kiedyś bardzo modnym układem strony był: Nagłówek, trzy kolumny i stopka. Unikajmy takiego układu. Po pierwsze przysporzy nam on więcej problemów przy kodowaniu, a chcemy osiągnąć dobry efekt jak najprościej. Po drugie taki układ jest mniej czytelny od dwukolumnowego. Zazwyczaj wystarczają dwie kolumny. Kto chce zobaczyć jak sobie radzą duże portale wystarczy rzucić okiem np. na: onet.pl. Tak więc wybieramy układ: Nagłówek, dwie kolumny i stopka. Jak wykonać w prosty i poprawny sposób dwie kolumny w html i css możecie przeczytać tutaj: Dwie kolumny w css bez używania tabel. Ładne proporcje kolumn, to 1 do 3. Ale tu możemy szerokość dostosować do naszych potrzeb. Podobnie jest z wysokością nagłówka. Węższy gdy mamy ważny content do pokazania jak najszybciej, szerszy jeśli chcemy wrzucić np. ładne i duże zdjęcie.
    Typografia.
    Jest bardzo ważna. Dobrze dobrane czcionki zwiększą czytelność i również zwiększą urodę naszej strony. Najlepiej było by użyć czcionek komercyjnych, ale te kosztują sporo.
    Wielkość tekstu, który użytkownik będzie czytał to zazwyczaj 11px. Do nagłówków i wyróżnienia możemy użyć większych czcionek. Ale nie przesadzajmy. Starajmy się też unikać krzykliwych kolorów, dużych liter oraz dużej wielkości czcionki. Nie róbmy tego:

    ALA MA KOTA

  3. Html i Css.
    Cięcie strony nie jest rzeczą trudną. Sam szkielet możemy wybrać korzystając z takich narzędzi jak Dreamweaver z pakietu Adobe. Mamy do wyboru kilka layoutów, z których na pewno coś wybierzemy dla siebie. Możemy też skorzystać z tego: Dwie kolumny w css bez używania tabel.
    Porządek. Porządek w kodzie jest niezmiernie ważny. Według mnie jest na drugim miejscu po prostocie. Mając burdel w kodzie narażamy się na błędy i na długie godziny straty żeby je potem odszukać. Jak go osiągnąć.

    • Po pierwsze oddzielmy style Css od Html. Style możemy zapisywać w oddzielnym pliku i dołączyć je do dokumentu html za pomocą tagu: <link /> w sekcji <head></head> dokumentu.
    • Nazwy klas i id powinny odzwiercielać rzeczywiste przeznaczenie elementów, którym zostały nadane.
    • Stosujmy jednakową konwencję w nazewnictwie w całym projekcie np. ala_ma_kota lub alaMaKota.
    • W html stosujmy wcięcia w kodzie. To co siędzi w kontenerze dostaje wcięcie 1 znaku Tab i tak dalej w głąb. Oznaczajmy sobie koniec elementów blokowych np. <!–koniec kontenerGlowny –></div>
    • Używajmy i dobrze poznajmy podstawowe elementy html: div, span, table, ul, p, h, a, egzotyczne sobie odpuśćmy, bo są rzadko stosowane i raczej się nie przydadzą.

    Prostota. Jeśli zrobiliśmy coś co ma wiele linijek kodu, to najprawdopodobniej zrobiliśmy to źle. Radzę porzucić wtedy tok myślenia, który doprowadził nas do tak długiego kodu i podejść do problemu z innej strony. W taki sposób unikniemy sporej ilości błędów, które na pierwszy rzut oka są ukryte a wyjdą później. No i oczywiście do prostego kodu łatwiej wrócić po roku czasu.
    Style które warto znać i rozumieć. Często używane i bardzo ważne dla układu strony, oraz dla poprawnego wyświetlania są style odpowiedzialne za pozycję elementu i są to:

    • position oraz top, left, right, clear, z-index
    • display
    • margin
    • padding

    Za ich pomocą ułożymy każdy element strony dokładnie tam gdzie chcemy.
    Do umieszczania obrazów używamy kontenerów np. div oraz stylu: background.
    Na koniec. Pamiętajmy o tym że użytkownicy korzystają z różnych przeglądarek, warto jest więc przetostować naszą stronę w tych najpopularniejszych. Przydatną statystykę znajdziemy na stronie rankging.pl. W dzień pisania tego artykułu warto testować stronę pod IE6, IE7, Firefox 3.0, Firefox 2.0, Opera.
    Warto pisać bezbłędny kod. Mimo że przeglądarka wyświetli treść z błędami, to i tak może być błąd. Żeby tego uniknąć dokument możemy sprawdzić używając validatora Html i Css na stronach W3C(oprócz specyfikacji, jest tam też sporo samouczków, bardzo fajnie napisanych).

Dynamic text field antialias

Marzec 28th, 2009

Żeby uzyskąć wygładzanie tekstu we flashu dla pola textowego typu dynamic, należy:

  1. Ustawić np. opcję antialias for readbility,
  2. Zagnięździć odpowiedni zestaw znaków, klikając embed. Mi wystarcza podstawowe latin + polskie znaki.
  3. Ustaiwć właściwość pola textowego embedFonts = true.

Nie dużo tego, ale zawsze zapominam jak to zrobić.

Instalacja Apache 2.2 pod Windows

Marzec 1st, 2009

Instalacja Apache 1.3 pod Windows – instalacja starszej wersji.

Instalacja Apache 2.2 pod Windows.

Serwer Apache można pobrać ze strony:  http://httpd.apache.org/download.cgi
Php można pobrać ze strony: http://windows.php.net/download/ – wystarczy pobrać spakowane źródła zipem i rozpakować do dowolnego katalogu(dla apache wersja vc6 thread safe).

Instalacja przebiega dosyć podobnie do Apache w wersji 1.3.  Apache pobieramy ze strony w wersji instalacyjnej dla Windows. Pierwsze kroki są bardzo proste, ograniczają się do uruchomienia instalatora i klikania dalej, dalej… Ciekawie robi się dopiero gdy przechodzimy do konfiguracji. Na dobrą sprawę można było by nic nie konfigurować, bo serwer po zainstalowaniu zawiera już plik ze standardową konfiguracją, ale brakuje tam kilku linijek, które są niezbędne do pracy z php i również takich które ułatwiają pracę.
Zaczynamy od ustawienia DocumentRoot  i <Directory>  tam gdzie znajduje się nasz katalog ze stronami np. „D:/strony”. Zastępujemy standardowe wpisy wskazujące na katalog: htdocs wewnątrz instalacji Apache. Ja trzymam zawsze strony na dysku na którym nie mam systemu, co ułatwia sprawę jak trzeba przeinstalować windows. U mnie wygląda to tak:

  • DocumentRoot „D:/strony”
  • <Directory „D:/strony”>

Dalej instalujemy php w dowolnym katalogu, ja wrzucam to do katalogu apache: „C:/Program Files/Apache Group/php/”. Dodajemy kolejne wpisy w httpd.conf:

  • w sekcji: <IfModule mime_module> np. na samym końcu: AddType application/x-httpd-php .php
  • na samym końcu listy z wpisami LoadModule:  LoadModule php5_module „C:/Program Files/Apache Group/php/php5apache2_2.dll”
  • na samym końcu zmienna, która pozwala na wskazanie położenia pliku php.ini: PHPIniDir „C:/Program Files/Apache Group/php”

Plik: php5apache2_2.dll znajduje się w katalogu php i jest dołączany do źródeł php. Aktualnie korzytam z wersji php: 5.3.10

Konfiguracja php.ini:
Php.ini znajduje się w katalogu php jako php.ini-development lub php.ini-production. Warto go trochę pozmieniać.

  • pewnie będziemy korzystać z MySql, z bibliotek graficznych i zip. Odchaszowujemy następujące linijki: extension=php_mysqli.dll, extension=php_gd2.dll, extension=php_zip.dll
  • żeby apache znalazł te biblioteki(są dołączone do źródeł php) musimy mu podać scieżkę do nich: extension_dir = „C:\Program Files\Apache Group\php\ext”
  • dodatkowo trzeba dodać do zmiennej systemowej PATH scieżkę do biblioteki: libmysql.dll, która znajduje się w kataogu php. Aby dotrzeć do zmiennych systemowych w Windows xp wybieramy: Mój Komputer/Właściwości/Zaawansowane/Zmienne środowiskowe/.  Po dodaniu naszej ścieżki do php, restartujemy komputer.
  • chcemy też widzieć błędy jakie popełniamy. Serwer jest przeznaczony tylko do testowania aplikacji. Zmieniamy z Off na On: display_errors = On

Teraz już wszystko działa. Warto jednak dodać parę rzeczy, które ułatwią nam pracę:

  • mode_rewrite. W aplikacjach opartych np. na Frameworku Zend, bez włączonego mode_rewrite nie da się pracować.  Ogólnie mode_rewrite pozwala na manipulowanie adresami stron. Włącza się go w httpd.conf w linijce: LoadModule rewrite_module modules/mod_rewrite.so oraz AllowOverride None – zmieniamy na AllowOverride All w przeciwnym razie zmiany,  które wprowadzimy w pliku .htaccess będą ignorowane przez serwer.
  • do parametru DirectoryIndex dodajemy index.php: DirectoryIndex index.html index.php

Virtual Hosts:

Bardzo wygodnie jest tesotwać aplikacje i odwoływać się do nich poprzez subdomeny. Odwołujemy się w tedy do aplikacji tak: http://aplikacja.localhost zamiast http://localhost/aplikacja. Nie ulegną wtedy zmianie scieżki i wszystko będzie wyglądało tak jak na serwerze docelowym. Żeby módz korzystać z subdomen w pliku httpd.conf dodajemy na końcu pliku dla każdej subdomeny następujące wpisy:

NameVirtualHost 127.0.0.1
<VirtualHost 127.0.0.1>
DocumentRoot “D:\strony\aplikacja”
ServerName aplikacja.localhost
</VirtualHost>

Żeby zmiany były widoczne, trzeba dodać jeszcze wpis w pliku: C:\WINDOWS\system32\drivers\etc\hosts o następującej treści: 127.0.0.1 aplikacja.localhost.

Jak instalowałem za pierwszym razem nie obeszło się bez problemów, jak zawsze wynikających z nieuwagi. W instrukcji zrobiłem wszystko jak dla Apache 2.0 i w pliku httpd.conf ustawiłem LoadModule php5_module „C:/Program Files/Apache Group/php/php5apache2_2.dll. W efekcie Apache nie wystartował i dostałem komunikat błędu :

Syntax error on line 127 of C:/Program Files/Apache Group/Apache/conf/httpd.conf: Cannot load   C:/Program Files/Apache Group/php/php5apache2.dll into server:

Wszystko pięknie ale ścieżka jest przecież dobra, nie mogłem się pomylić.  Okazuje się że nie zauważyłem że czytam instrukcję dla serwera 2.0. Dla wersji 2.2 trzeba załadować bibliotekę: php5apache2_2.dll a nie php5apache2.dll.

Skąd wziąć linki

Luty 22nd, 2009

Ogólnie

Pozycjonowanie to zajęcie dla cierpliwych. Nie robi się tego na szybko. To należy pamiętać. Google nie jest głupie, zbyt gwałtowne działania mogą zostać wykryte i może zostać nałożony filtr, co skutkuje wypadnięciem z wyników na długie okresy strony na daną frazę.

Najważniejsze są linki do strony.

Pozycjonujemy zawsze na kilka fraz np. Na 3 frazy. Nigdy na jedną. Pozycjonowanie na jedną może być uznane za spam i wylecimy z wyników. Np. 50% linków na frazę główną i reszta na pozostałe.

Frazy typu Hurtownia Opakowań są trudniejsze od frazy Hurtownia Opakowań Wrocław(warto podziałać na Wrocław to duże miasto, a ten kto szuka usługi we Wro może skusić się na usługę z Wałbrzycha bo będzie taniej, a odległość jest niewielka, a z Wrocławia można już wyżyć w przeciwieństwie do Wałbrzycha).

Dodajemy codziennie po pięć dziesięć linków. Nigdy nie robimy akcji w stylu przez weekend 300. Pracujemy skrupulatnie i regularnie.

Skąd wziąć linki?

  1. Wymiana linkami ze znajomymi. Jeśli strona jest porządna śmiało można zamieścić znajomego w stopce.

  2. Obowiązkowo ta lista katalogów(mimo że są płatne): ranking katalogów ze względu na liczbę gości

  3. Spis katalogów(te są już gorszej jakości, ale warto też skorzystać): http://www.katalogiseo.info

  4. Spis precli(najczęściej blogi typu wordpress)
    https://www.seo.net.pl/spis_presellpage/ – nad tymi warto się skupić. Mają sporą moc. Pisze się artykuły na około 1000 znaków i zamieszcza linki w tekście. Unikalne treści są najlepsze. Ale kto to pisać będzie tyle razy. Można jeden artykuł zmieniać. Kolejność zdań, pomieszczać w zdaniach itd. Pisząc artykuł można pogrubiać frazy, użyć h1, h3 jeśli się da. Przykłady na moim blogu jak to ma wyglądać mniej więcej: http://www.kocham-kino.pl/category/bez-kategorii/

  5. Tworzenie prostych stron w darmowych serwisach prv.pl. yoyo.pl onet.pl wp.pl interia.pl itd. Zazwyczaj mają tam proste cmsy i nie trzeba znać html. Tworzymy strony na podobnej zasadzie jak wpisy do precli. Umieszczamy linki do naszej strony w treści. Następnie dodajemy stworzoną stronę do katalogów i precli.

  6. Linki na forach internetowych.

  7. Spamowanie blogów nieświadomych użytkowników.

  8. Kupno linków na allegro(zazwyczaj mała moc, wiele linków wychodzących, strony o niskiej wartości merytorycznej tzw. śmieciarki).