Το schema markup σου είναι ένα δεύτερο αντίγραφο της σελίδας
Το schema markup είναι η σελίδα γραμμένη δεύτερη φορά, για μηχανές — και τα δεύτερα αντίγραφα αποκλίνουν. Δεν κρατάμε το δικό μας ειλικρινές ελέγχοντάς το. Η σελίδα και τα structured data της βγαίνουν από την ίδια εγγραφή, οπότε κανένα δεν μπορεί να πει κάτι που δεν λέει το άλλο.
από Νεφέλη Κ.
Το schema markup είναι η σελίδα, γραμμένη δεύτερη φορά, σε μια διάλεκτο που διαβάζουν μόνο μηχανές. Και τα δεύτερα αντίγραφα αποκλίνουν. Το πεδίο author λέει «admin» — όποιος εγκατέστησε το plugin το 2019 και, όπως φαίνεται, έχει γράψει κάθε άρθρο από τότε. Η ημερομηνία τροποποίησης αλλάζει σε κάθε deploy, ή ποτέ. Ο κόμβος FAQ απαριθμεί πέντε ερωτήσεις· η σελίδα δείχνει τρεις. Υπάρχει τιμή σε ένα Offer σε σελίδα που δεν κοστολογεί τίποτα, επειδή το template την είχε. Οι οδηγίες της Google για structured data είναι ωμές: μάρκαρε ό,τι είναι ορατό, περίγραψε ό,τι υπάρχει, και markup που δεν το κάνει μπορεί να φέρει manual action που σου κόβει τα rich results. Δεν κρατάμε το schema μας ειλικρινές ελέγχοντάς το. Κάναμε το ψέμα αδύνατο.
Κάθε post σε αυτό το site είναι μία εγγραφή: τίτλος, excerpt, συγγραφέας, ημερομηνία, tag, παράγραφοι. Η σελίδα γίνεται render από αυτήν. Το ίδιο και τα structured data στο head αυτής της σελίδας, η καταχώριση στο sitemap, το item στο RSS, και η εικόνα για τα social που είδες αν ήρθες από link. Κανείς δεν πληκτρολογεί τίποτα στον κόμβο BlogPosting. Το headline στο JSON-LD είναι ο τίτλος της σελίδας επειδή είναι η ίδια μεταβλητή. Άλλαξε τον τίτλο στην εγγραφή και αλλάζουν και τα πέντε outputs στο ίδιο deploy. Δεν υπάρχει βήμα που λέγεται «ενημέρωσε το schema», άρα δεν υπάρχει βήμα να ξεχάσεις. Οι υπηρεσίες και τα projects δουλεύουν το ίδιο — το OfferCatalog σε μια σελίδα υπηρεσίας είναι η λίστα «τι φτιάχνουμε», στοιχείο προς στοιχείο.
Μία εγγραφή, ένα graph
Το διάγραμμα παραπάνω είναι μία εγγραφή. Σε επίπεδο site, είναι ένα graph. Κάθε κόμβος έχει ένα @id, και οι υπόλοιποι δείχνουν σε αυτό αντί να το επαναλαμβάνουν. Περιγράφουμε τον οργανισμό μία φορά· κάθε υπηρεσία, κάθε post, το WebSite και το Blog αναφέρονται σε αυτή τη μία περιγραφή. Ο συγγραφέας ενός post δεν είναι string — είναι ένα Person, με τον τίτλο θέσης από τη σελίδα της ομάδας και ένα worksFor που δείχνει πίσω σε εμάς. Η ελληνική σελίδα δηλώνει el-GR, παίρνει δικό της canonical, και δείχνει στην αγγλική με hreflang ενώ η αγγλική δείχνει πίσω. Στο Next.js το εύκολο λάθος είναι ένα σχετικό canonical στην ελληνική σελίδα που καταλήγει στο αγγλικό URL. Κάν' το αυτό και μόλις είπες στην Google ότι το ελληνικό σου site είναι αντίγραφο.
Γιατί μετράει περισσότερο τώρα απ' ό,τι παλιά. Για μια δεκαετία, το schema ήταν μια αγγαρεία του SEO: κέρδιζε rich results και τίποτα άλλο. Οι νεότεροι αναγνώστες το χρησιμοποιούν αλλιώς. Μια answer engine που αποφασίζει τι είσαι διαβάζει τη σελίδα και το markup, και όταν τα δύο διαφωνούν έχει δύο πηγές και κανέναν λόγο να εμπιστευτεί καμία. Αυτό είναι το μεγαλύτερο μέρος του GEO, όσο μας αφορά. Είπαμε το 2025 ότι τα models ανταμείβουν τις διακριτές δηλώσεις — ένα schema που συμφωνεί με τη σελίδα του είναι η ίδια δήλωση δύο φορές, μία σε πεζό λόγο και μία σε μορφή που μια μηχανή μπορεί να ελέγξει. Η συμφωνία ελέγχεται φτηνά. Ακριβώς γι' αυτό εκτιμάται.
Πού αποκλίνει το schema
Ο πίνακας παραπάνω είναι ο έλεγχος που τρέχουμε πριν αγγίξουμε οτιδήποτε, και στα sites που μας ζητούν να δούμε, συνήθως φταίει μία από αυτές τις τέσσερις γραμμές. Συγγραφέας: ένα login name, ή το όνομα του agency. Ημερομηνίες: ένα dateModified που ενημερώνεται σε κάθε build, που λέει στον crawler ότι η σελίδα είναι διαρκώς καινούργια και άρα ποτέ σταθερή — ή ένα παγωμένο στο launch. Μετρήσεις: κόμβοι FAQ, product και review που ξεπερνούν όσα υπάρχουν στη σελίδα, επειδή το markup παράχθηκε από τη βάση και όχι από το template. Προσφορές και αξιολογήσεις: ένα 4,8 από κριτικές που δεν βρίσκει κανείς, μια τιμή σε σελίδα υπηρεσίας που δεν κοστολογεί τίποτα. Το πρώτο πέρασμα αυτού του ελέγχου το κάναμε δωρεάν εργαλείο, το Second Copy: βάζεις ένα URL και σου δείχνει πού διαφωνούν το markup και η σελίδα σου. Η λύση σχεδόν ποτέ δεν είναι «διόρθωσε το JSON». Είναι να βρεις από τι γίνεται πραγματικά render η σελίδα και να κάνεις το schema να διαβάζει αυτό. Όταν το CMS δεν μπορεί, αυτή είναι η συζήτηση για το un-frameworking.
Τι δεν κάνουμε, επίτηδες. Δεν μαρκάρουμε τίποτα που ένας αναγνώστης δεν μπορεί να δει — κανένα FAQ schema για ερωτήσεις που ζουν σε support portal, κανένα Review για testimonials που δεν δείχνουμε, καμία κρυφή παράγραφος «για τα models». Δεν σερβίρουμε στους crawlers διαφορετική σελίδα· το HTML που παίρνει ένα bot είναι το HTML που πήρες εσύ. Το μόνο σημείο που πάμε πέρα από το ορατό κείμενο είναι το speakable: μαρκάρουμε τον τίτλο και το excerpt κάθε post ως τις δύο προτάσεις που θα θέλαμε να διαβαστούν φωναχτά, και είναι οι δύο προτάσεις στην κορυφή της σελίδας. Αν ένας αναγνώστης δεν μπορεί να το δει, ένα model δεν πρέπει να το μάθει.
Τι άλλαξε από τότε που αρχίσαμε να το λέμε δυνατά: σταματήσαμε να κάνουμε audit στο JSON. Ανοίγουμε τη σελίδα, βρίσκουμε τα structured data (το script με το ld+json), και κάνουμε μία ερώτηση — από πού παράγεται αυτό; Αν η απάντηση είναι «από το ίδιο μέρος με τη σελίδα», το audit έχει σχεδόν τελειώσει. Αν η απάντηση είναι «από ένα plugin», ξέρουμε πώς μοιάζουν οι επόμενες δύο εβδομάδες. Μία εγγραφή, rendered δύο φορές. Η σελίδα είναι το spec. Το schema είναι η μεταγραφή της.