Ιστολόγιο

Τα μαθήματα SEO από τη διόρθωση του δικού μας site

Περάσαμε μερικές μέρες διαβάζοντας το δικό μας site όπως θα το διάβαζε μια μηχανή αναζήτησης, και βρήκαμε έξι πράγματα που αξίζει να διορθωθούν. Κάθε σελίδα δήλωνε δύο μπλοκ FAQ, το Google χρησιμοποιούσε ως μικρογραφία μας ένα διακοσμητικό φωτεινό φόντο, μια σειρά σελίδων προτύπων κατατάσσονταν για αναζητήσεις που δεν απαντούσαν, και ένα νέο τμήμα του site μπλοκαρόταν από το δικό μας edge στο staging. Τίποτα δεν ήταν δραματικό. Όλα κόστιζαν σιωπηλά ορατότητα.

Το site σε μία παράγραφο

Το mythex.ai είναι εφαρμογή μίας σελίδας (single-page app) που την προ-αποδίδουμε (prerender) κατά τη μεταγλώττιση: ένα script διατρέχει κάθε διαδρομή, γράφει ένα στατικό αρχείο HTML για αυτήν και ενσωματώνει τον τίτλο, την περιγραφή και τα δομημένα δεδομένα της σελίδας (το μπλοκ JSON-LD που λέει στις μηχανές αναζήτησης τι είναι μια σελίδα — δείτε τι είναι τα δομημένα δεδομένα). Τα περισσότερα από όσα ακολουθούν ζουν σε εκείνο το βήμα prerender, γιατί αυτό είναι το HTML που πραγματικά διαβάζει ο crawler.

1. Κάθε σελίδα διεκδικούσε ότι ήταν η σελίδα FAQ

Σύμπτωμα. Το βασικό μας πρότυπο HTML είχε ένα μπλοκ FAQPage για όλο το site στα δομημένα δεδομένα του, με διεύθυνση που έδειχνε στο /faq. Στη συνέχεια το prerender πρόσθετε από πάνω το δικό της FAQPage για κάθε σελίδα. Άρα κάθε σελίδα του site έστελνε δύο — και η πολιτική απορρήτου μας έλεγε στο Google ότι ήταν η σελίδα FAQ.

Γιατί έχει σημασία. Το Google περιμένει το πολύ ένα FAQPage ανά σελίδα. Ένα δεύτερο που δείχνει αλλού είναι το είδος πράγματος που υποβαθμίζει το markup μιας σελίδας, και δεν το αγνοεί απλώς.

Διόρθωση. Το καθολικό μπλοκ αφαιρέθηκε. Το markup FAQ κάθε σελίδας προέρχεται πλέον από ένα σημείο, συμπεριλαμβανομένης της ίδιας της /faq, που το χτίζει από την πλήρη λίστα ερωτήσεων. Οι σελίδες χωρίς FAQ δεν δηλώνουν καμία, που είναι η ειλικρινής απάντηση. Και το prerender αποτυγχάνει τη μεταγλώττιση αν κάποια σελίδα φέρει ξανά περισσότερο από ένα FAQPage. Ένας κανόνας που ζει μόνο στη μνήμη κάποιου παραβιάζεται· ένας κανόνας που τον επιβάλλει το build δεν παραβιάζεται.

2. Το Google χρησιμοποιούσε λάθος εικόνα για εμάς

Σύμπτωμα. Στα αποτελέσματα αναζήτησης, η μικρογραφία του Mythex ήταν το απαλό, παλλόμενο φωτεινό φόντο πίσω από το hero της αρχικής σελίδας — μια διακοσμητική εικόνα φόντου — αντί για την κάρτα κοινοποίησής μας.

Γιατί συνέβη. Ποτέ δεν είπαμε στο Google ποια εικόνα αντιπροσωπεύει μια σελίδα, οπότε διάλεξε μία που βρήκε.

Διόρθωση. Δύο πλευρές του ίδιου προβλήματος:

  • Πείτε ποια εικόνα είναι της σελίδας. Η αρχική σελίδα έχει πλέον έναν κόμβο WebPage με primaryImageOfPage που δείχνει στην κάρτα κοινοποίησης, και τα δομημένα δεδομένα κάθε προ-αποδομένης σελίδας φέρουν τη δική τους εικόνα (την εικόνα κοινοποίησης της σελίδας ή την προεπιλεγμένη).
  • Κρύψτε τη διακόσμηση. Οι εικόνες φόντου απαγορεύονται πλέον στο robots.txt και σερβίρονται με κεφαλίδα noindex, noimageindex, ώστε να μένουν έξω από την αναζήτηση εικόνων και τις μικρογραφίες.

3. Οι μηχανές αναζήτησης γνώριζαν μόνο το λογότυπό μας

Τα δομημένα δεδομένα Organization μας είχαν όνομα, λογότυπο και μερικούς συνδέσμους κοινωνικών δικτύων — επωνυμία και τίποτα άλλο. Οι μηχανές αναζήτησης χτίζουν το πάνελ γνώσης μιας εταιρείας από στοιχεία τύπου μητρώου, γι' αυτό προσθέσαμε εκείνα από την άδεια λειτουργίας μας: νομική επωνυμία, ημερομηνία ίδρυσης, ιδρυτή και καταχωρισμένη διεύθυνση. Σκόπιμα αφήσαμε έξω τον αριθμό τηλεφώνου.

4. Οι σελίδες προτύπων απαντούσαν σε λάθος ερώτηση

Σύμπτωμα. Το Search Console έδειχνε τρεις σελίδες προτύπων που συγκέντρωναν εμφανίσεις και κανένα κλικ. Μία κατατασσόταν για «content strategist portfolio» και τις παραλλαγές του, μία για «best italian restaurant website design», και μία για ένα σύνολο γύρω από το «agile board» — οι μισές από αυτές τις αναζητήσεις περιείχαν τη λέξη «free». Οι θέσεις κυμαίνονταν από τα μέσα της εικοστής έως την πεντηκοστή.

Γιατί. Κάθε σελίδα απαντούσε σε διαφορετική ερώτηση από εκείνη που έγινε. Όποιος ήθελε να δει πώς μοιάζει ένας καλός σχεδιασμός για ιταλικό εστιατόριο κατέληγε σε σελίδα που του πουλούσε έναν builder.

Διόρθωση. Καθεμία από τις τρεις έχει πλέον ενότητα γραμμένη για την αναζήτηση και όχι για το προϊόν, τίτλο και περιγραφή με τις λέξεις που πληκτρολογούν οι άνθρωποι, και FAQ που αξίζουν το markup που ήδη εξέπεμπαν.

Το ίδιο commit διόρθωσε ένα πιο διακριτικό πρόβλημα. Το μπλοκ «σχετικά πρότυπα» έπαιρνε τα πρώτα τέσσερα πρότυπα μιας κατηγορίας, οπότε κάθε πρότυπο portfolio έδειχνε στα ίδια τέσσερα portfolio, και το υπόλοιπο της κατηγορίας δεν είχε καθόλου εσωτερικούς συνδέσμους. Το αντικαταστήσαμε με έναν κύκλο ταξινομημένο ανά υποκατηγορία: κάθε σελίδα προτύπου έχει πλέον ακριβώς τέσσερις εισερχόμενους και τέσσερις εξερχόμενους συνδέσμους. Το προ-αποδομένο HTML εκτυπώνει πλέον και αυτούς τους συνδέσμους — πριν υπήρχαν μόνο αφού εκτελεστεί η JavaScript, κάτι που ένας crawler μπορεί να μην κάνει ποτέ.

5. Ενημερώνοντας το Bing για νέες σελίδες τη στιγμή που αναπτύσσονται

Το Google αγνοεί το IndexNow, ένα πρωτόκολλο για ειδοποίηση μηχανών αναζήτησης όταν αλλάζει ένα URL. Το χρησιμοποιούν το Bing, το Yandex και το Seznam — και ο δείκτης του Bing είναι αυτός που διαβάζει η αναζήτηση του ChatGPT. Ένας δημιουργός εφαρμογών AI που δεν μπορούν να βρουν οι βοηθοί τεχνητής νοημοσύνης είναι ένα ιδιαίτερο είδος αποτυχίας.

Η προφανής προσέγγιση, να υποβάλλεται ολόκληρος ο χάρτης του site σε κάθε ανάπτυξη, είναι ο τρόπος να σας περιορίσουν ρυθμιστικά τα αιτήματα, και οι περισσότερες αναπτύξεις δεν αλλάζουν τίποτα που ενδιαφέρει μια μηχανή αναζήτησης. Γι' αυτό ένα script συγκρίνει τον χάρτη που σερβίρεται αυτή τη στιγμή με εκείνον που μόλις χτίστηκε και υποβάλλει μόνο τη διαφορά.

Δύο λεπτομέρειες το έκαναν να λειτουργήσει:

  • Κάντε στιγμιότυπο πριν την ανάπτυξη. Η βάση σύγκρισης πρέπει να καταγραφεί πριν πάει ζωντανό το νέο build. Μετά, ο «ζωντανός» χάρτης είναι ήδη ο νέος και κάθε διαφορά βγαίνει κενή.
  • Μόνο νέες σελίδες, προς το παρόν. Ο χάρτης μας δεν έχει ημερομηνίες lastmod, οπότε το script ανακοινώνει νέες σελίδες αλλά όχι επανεγγραφές. Η σήμανση κάθε URL με την ημερομηνία build θα σήμαινε ότι ολόκληρο το site άλλαξε σε κάθε ανάπτυξη — ακριβώς το spam που προσπαθούσαμε να αποφύγουμε.

Τρέχει μόνο σε αναπτύξεις παραγωγής και δεν αποτυγχάνει ποτέ τη μεταγλώττιση: όταν εκτελείται, το site είναι ήδη ζωντανό, και μια ειδοποίηση σε μηχανή αναζήτησης δεν αξίζει ένα κόκκινο deploy.

6. Το δικό μας edge έλεγε «δεν βρέθηκε»

Όταν ξεκινήσαμε τις σελίδες /ai (περισσότερα γι' αυτές στο μια σελίδα προορισμού για κάθε είδος επιχείρησης), το staging έδειχνε «Not found» σε όλες, ενώ ο στατικός host τις σερβίρει κανονικά.

Η υπηρεσία μπροστά από τους marketing host μας προωθεί μόνο μια λίστα επιτρεπόμενων διαδρομών· οτιδήποτε άλλο παίρνει σκληρό 404. Το /ai ήταν νέο και δεν ήταν στη λίστα. Προσθέσαμε τα /ai και /ai/*, με ένα τεστ που επιβεβαιώνει ότι περνούν. Ένα μικρό σφάλμα, αλλά ακριβώς το είδος που κάνει ένα νέο τμήμα αόρατο στους crawlers χωρίς να το προσέξει κανείς.

Τι κρατήσαμε από όλο αυτό

  • Διαβάστε το HTML που διαβάζει ένας crawler. Τα περισσότερα από αυτά ήταν αόρατα σε έναν περιηγητή και προφανή στο προ-αποδομένο αρχείο.
  • Μετατρέψτε τους κανόνες SEO σε ελέγχους μεταγλώττισης. Το «ένα FAQPage ανά σελίδα» επιβάλλεται πλέον, δεν απομνημονεύεται.
  • Πείτε στις μηχανές αναζήτησης τι εννοείτε. Αν δεν δηλώσετε ποια εικόνα ή ποια στοιχεία σας αντιπροσωπεύουν, θα μαντέψουν.
  • Το Search Console σας λέει ποια ερώτηση έκαναν οι άνθρωποι. Εμφανίσεις χωρίς κλικ συνήθως σημαίνουν ότι η σελίδα απαντούσε σε άλλη ερώτηση.
  • Υποβάλετε διαφορές, όχι τα πάντα. Η ειδοποίηση μόνο για ό,τι άλλαξε σας κρατά μέσα στα όρια ρυθμού.

Αν κάνετε το ίδιο για ένα site που φτιάξατε, οι οδηγοί μας για SEO για ιστοσελίδες που χτίζονται με AI και ρύθμιση του Google Search Console καλύπτουν τα βασικά.

Mythex · Pricing · Χτίστε οτιδήποτε με AI · Πρότυπα ιστοσελίδων και εφαρμογών · Το Mythex σε σύγκριση · Γλωσσάρι δημιουργίας εφαρμογών με AI · Δωρεάν εργαλεία δημιουργίας εφαρμογών με AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)