Zauważyłem, że Narzędzia Google dla webmasterów zgłaszają wiele zablokowanych zasobów w mojej witrynie. W tej chwili wszystkie „zablokowane zasoby” to .css, .js i obrazy (.jpg, .png), które obsługuję z Cloudfront CDN.
Spędziłem dużo czasu testując i próbując dowiedzieć się, dlaczego Google nie indeksuje tych plików i zgłasza stan „blokowania zasobów”.
Obecnie obsługuję te pliki z kilku nazw hostów, takich jak: cdn1.example.com, cdn2.example.com,…
cdn1, cdn2 i inne są nazwami CNAME nazwy dystrybucji w chmurze.
Test: Próbowałem użyć bezpośrednio dystrybucji w chmurze (brak CNAME), ale problem nadal występuje.
Obecnie mój plik robots.txt wygląda następująco:
# Google AdSense
User-agent: Mediapartners-Google
Disallow:
#Google images
User-agent: Googlebot-Image
Disallow: /
User-agent: *
Disallow: /homepage
Disallow: /index.php*
Disallow: /uncategorized*
Disallow: /tag/*
Disallow: *feed
Disallow: */page/*
Disallow: *author*
Disallow: *archive*
Disallow: */category*
Disallow: *tag=*
Disallow: /test*
Allow: /
I przykłady plików zablokowanych na jednej przykładowej stronie:
cdn1.example.com/wp-content/plugins/wp-forecast/wp-forecast-default.css
cdn9.example.com/wp-content/plugins/bwp-minify/min/?f=wp-content/themes/magazine/css/font-awesome.min.css,wp-content/themes/magazine/css/responsive .css
cdn5.example.com/wp-content/themes/magazine/images/nobg.png
cdn6.example.com/wp-content/plugins/floating-social-bar/images/fsb-sprite.png
cdn5.example.com/wp-content/uploads/2013/11/Design-Hotel-3-80x80.jpg
cdn5.example.com/wp-content/uploads/2013/11/Marta-Hotel-7-270x225.jpg
Próbowałem nawet zezwolić na wszystko w pliku robots.txt, ale zawsze mam ten sam wynik.
Patrzę też uważnie na ustawienia CloudFront w Amazon i nie widzę nic, co mogłoby być powiązane (nie używam i nigdy nie korzystałem z opcji: „Ogranicz dostęp do przeglądarki (użyj podpisanych adresów URL lub podpisanych plików cookie)”.
W tej chwili spędziłem dużo czasu na analizowaniu tego i nie mam więcej pomysłów.
Czy ktoś może wymyślić powód, dla którego Googlebot miałby blokować indeksowanie plików hostowanych w Amazon CloudFront?
*
na końcu „prefiksu” adresu URL./test*
jest taki sam jak/test
.Odpowiedzi:
Tak więc wydaje się, że rozwiązaniem jest to, że Amazon Cloudfront również ocenia mój
robots.txt
i w jakiś sposób używa innych reguł składniowych niż Google.Działająca wersja mojego
robots.txt
jest następująca:Bardzo ważna uwaga, aby powiedzieć, że nie wykonuje dokładnie takich samych funkcji jak poprzednio. W rzeczywistości wyjąłem wszystkie puste wiersze, symbole wieloznaczne i dyrektywy „zezwalaj”. Oznacza to, że wynik końcowy nie jest taki sam ... ale myślę, że jest dla mnie wystarczająco blisko. Na przykład nie wyklucza stron znaczników przekazanych w ciągu zapytania ...
Trzy ważne uwagi:
Jeśli
robots.txt
testujesz z tym, nie zapomnij unieważnić dystrybucji w chmurze dla każdej iteracji. Samo sprawdzenie, czy doręczono Ci ostatnią wersję, nie wystarczy.Nie mogłem nigdzie znaleźć definicji
robot.txt
składni rozumianej przez chmurę Amazon. To była próba i błąd.Aby przetestować wyniki, użyj narzędzia „pobierz i wyrenderuj” google webmastera i ich przyjaznego testera mobilnego ( https://www.google.com/webmasters/tools/mobile-friendly/ )
Nie rozumiem, dlaczego Cloudfront sprawdza i ocenia moje
robots.txt
. Ten plik to „umowa” ze mną i robotami indeksującymi, które trafiają na moją stronę. Amazon nie ma biznesu w środku. Bałagan z moimrobots.txt
jest po prostu głupi.Nigdy nie przyszło mi do głowy, że cloudfront może odgadnąć moją
robots.txt
składnię.źródło
Utwórz plik robots.txt w wiadrze.
Utwórz inne źródło swojej dystrybucji w chmurze.
Ustaw priorytet swojego segmentu na wyższy niż na swojej stronie internetowej.
Unieważnij plik robots.txt witryny w Cloudfront.
Po wykonaniu powyższych czynności Google odczyta strony robots.txt podczas indeksowania witryny i zobaczy inne pliki robots.txt, podążając za linkami z dysku CDN.
źródło
Google nie blokuje indeksowania zasobów zewnętrznych za pomocą pliku robots.txt w katalogu głównym witryny głównej. Za pomocą subdomeny cdn lub inną klasyfikuje się jako domenę zewnętrzną, dlatego jedynym sposobem na zablokowanie zawartości jest użycie odpowiedzi nagłówka na pliku obsługiwanym przez samą CDN lub użycie pliku robots.txt na cdn lub subdomenie .
Za pomocą:
Powinieneś blokować tylko obrazy lokalne, musisz zrobić to samo w CDN.
Możliwe, że jest to problem z odpowiedzią na nagłówek i powinieneś zrobić „CURL” na jednym z plików w CDN. Powinien wyglądać mniej więcej tak:
Należy zwrócić uwagę na:
źródło
check the robots.txt on your CloudFront distribution
, że to powiedziałem! Jedynym sposobem na zablokowanie indeksowanych obrazów w CDN jest x-robots-tag i robots.txt w samej CDN, ponownie wspomniany.Znalazłem problem: CloudFront czyta plik robots.txt i uniemożliwia wyświetlanie zawartości, ale wydaje się, że analizuje niektóre, w odróżnieniu od tego, jakie roboty powinny.
Na przykład następująca treść w pliku robots.txt:
Disallow: */wp-contents/ Allow: */wp-contents/themes/
Gdy Googlebot sam go pobierze, indeksuje go; Kiedy CloudFront ją czyta, nie bierze pod uwagę dyrektywy „Zezwól” i zabrania serwowania czegokolwiek w środku
*/wp-contents/themes/
.Krótka odpowiedź: sprawdź plik robots.txt w Twojej dystrybucji CloudFront, może to być problem. Unieważnij i zaktualizuj poprawioną wersję i powinna działać!
źródło