Αναφορές με δική σας επωνυμία
Μια αναφορά PDF με την επωνυμία σας για έναν ιστότοπο — συνολική βαθμολογία, τάση εντοπισμένων προβλημάτων, τι διορθώθηκε και τι εμφανίστηκε από την τελευταία αναφορά, ανακτημένα 404 και μη λειτουργικοί σύνδεσμοι που αποκαταστάθηκαν, μεταβολές Search Console και δραστηριότητα bot AI — παράγεται με μία εντολή και, προαιρετικά, στέλνεται με email βάσει προγράμματος. Φτιαγμένη για agencies: βάλτε λογότυπο, χρώμα και «συντάχθηκε για {client}» και παραδώστε τη στον πελάτη.
Κατεβάστε παραγόμενο δείγμα αναφοράς στα Αγγλικά (PDF, 98 KB) ή ακολουθήστε την περιήγηση σάρωση → διόρθωση → αναφορά. Το δείγμα χρησιμοποιεί αρχικά δεδομένα Merchant και δύο νέες σαρώσεις· δείχνει ένα διορθωμένο πρόβλημα, 19 ακόμη ανοιχτά και κανένα δεδομένο Search Console.
Τι περιλαμβάνει
- Συνολική βαθμολογία — ο μέσος όρος των τελευταίων βαθμολογιών ανά σελίδα (τα δημοσιευμένα κριτήρια: A ≥ 90 … F), με τη μεταβολή από την τελευταία αναφορά, καθώς και τάση συνολικής βαθμολογίας στις πρόσφατες σαρώσεις. Κάθε σάρωση πλέον καταγράφει τη βαθμολογία ιστοτόπου στην εκτέλεση, οπότε η τάση είναι πραγματικό ιστορικό ανά σάρωση — αρχίζει να συμπληρώνεται από την πρώτη σάρωση μετά την αναβάθμιση (οι παλιότερες εκτελέσεις δεν έχουν βαθμολογία και απλώς παραλείπονται).
- Προβλήματα ανά σάρωση — πραγματική τάση στις πρόσφατες ολοκληρωμένες σαρώσεις (λιγότερα είναι καλύτερα).
- Διορθωμένα και νέα προβλήματα — πόσα ελαττώματα διορθώσατε και πόσα εμφανίστηκαν από την τελευταία αναφορά. Διαβάζονται από το πραγματικό ιστορικό προβλημάτων — τα προβλήματα έχουν πλέον κύκλο ζωής διόρθωσης / επανανοίγματος — μόλις ολοκληρωθεί μια πλήρης περίοδος με αυτόν, αλλιώς από το στιγμιότυπο προηγούμενης αναφοράς.
- Αποκατάσταση — επιλυμένοι μη λειτουργικοί σύνδεσμοι, ανακτημένα 404 (η διαδρομή επιστρέφει ξανά 200 από μόνη της — δείτε
seo-pro:404-recheck) και ανακατευθυνόμενα 404 από την τελευταία αναφορά, μαζί με όσα παραμένουν ανοιχτά. Ένα ανακτημένο 404 είναι πραγματική διόρθωση στην πηγή, που μετριέται χωριστά από ανακατεύθυνση. - Search Console — κορυφαία ερωτήματα και σελίδες, και μεγαλύτερες μεταβολές: οι μεγαλύτερες διακυμάνσεις κλικ έναντι της τελευταίας αναφοράς. Παραλείπεται ομαλά όταν το GSC δεν έχει ρυθμιστεί.
- Δραστηριότητα bot AI — αιτήματα που αποδίδονται βάσει user-agent (όχι επαληθευμένης ταυτότητας bot), συνολικά πλήθη και — από το ημερήσιο ιστορικό ομάδων όταν καλύπτει το διάστημα — πραγματικές επισκέψεις αυτής της περιόδου και διαφορετικές διευθύνσεις URL που ανίχνευσε κάθε bot (αλλιώς με εναλλακτική τη διαφορά συνολικών μετρητών από στιγμιότυπο).
«Από την τελευταία αναφορά»
Η αναφορά συγκρίνει περίοδο με περίοδο έναντι της προηγούμενης αναφοράς σας, όχι έναντι αυθαίρετης ημερομηνίας. Κάθε φορά που παράγετε μία, αποθηκεύεται ελαφρύ στιγμιότυπο (seo_report_runs) — βαθμολογία, ταυτότητες ανοιχτών προβλημάτων, γραμμές Search Console και μετρητής επισκέψεων κάθε bot. Η επόμενη αναφορά συγκρίνει τη σημερινή κατάσταση με εκείνο το στιγμιότυπο.
Αυτή είναι η εναλλακτική για ενδείξεις που δεν κρατούν δικό τους ιστορικό: ανά σελίδα κρατιέται μόνο η τελευταία βαθμολογία. Το στιγμιότυπο κατά την παραγωγή αναφοράς τις μετατρέπει σε ειλικρινή σύγκριση. Αρκετές ενδείξεις πλέον κρατούν πραγματικό ιστορικό και η αναφορά το προτιμά, χρησιμοποιώντας το στιγμιότυπο μόνο ως εναλλακτική: τα προβλήματα έχουν κύκλο ζωής διόρθωσης / επανανοίγματος (πραγματικά πλήθη διορθωμένων/νέων μόλις ολοκληρωθεί πλήρης περίοδος με αυτόν), το Search Console κρατά μετρήσεις ανά ημέρα και οι επισκέψεις bot AI κρατούν ημερήσιες ομάδες (πραγματικές επισκέψεις ανά περίοδο και διαφορετικές διευθύνσεις URL). Κάθε ένδειξη επιστρέφει στη διαφορά στιγμιοτύπων για την πρώτη αναφορά μετά την αναβάθμιση ή όταν το ιστορικό δεν καλύπτει το διάστημα.
Δύο συνέπειες:
- Η πρώτη αναφορά είναι σημείο αναφοράς. Δείχνει την τρέχουσα κατάσταση· τα στοιχεία «διορθωμένα», «νέα», μεταβολές και «από την τελευταία αναφορά» συμπληρώνονται από τη δεύτερη αναφορά και μετά.
- Η συχνότητα είναι δική σας επιλογή. Με μηνιαία παραγωγή οι διαφορές καλύπτουν μήνα· με εβδομαδιαία καλύπτουν εβδομάδα. Χρησιμοποιήστε
--no-storeγια έκτακτη προεπισκόπηση που δεν πρέπει να μετακινήσει το σημείο αναφοράς.
Παραγωγή αναφοράς
php artisan seo-pro:reportΧωρίς επιλογές, γράφει PDF στο storage/app/seo-reports/. Κατευθύνετέ το σε άλλο σημείο ή στείλτε το με email:
# Write to a specific file or directory
php artisan seo-pro:report --output=/tmp/acme-october.pdf
# E-mail it to one or more recipients (the PDF is attached)
php artisan seo-pro:report --email=client@acme.com --email=pm@agency.com
# One-off preview that does NOT store a snapshot (deltas won't advance)
php artisan seo-pro:report --no-store --output=/tmp/preview.pdf
# Machine-readable summary
php artisan seo-pro:report --jsonΕπιλογές
| Επιλογή | Αποτέλεσμα |
|---|---|
--client= | Αντικαθιστά την ετικέτα πελάτη «συντάχθηκε για» |
--agency= | Αντικαθιστά το όνομα agency στην αναφορά |
--accent= | Αντικαθιστά το χρώμα έμφασης (hex, π.χ. #3D5AFE) |
--logo= | Αντικαθιστά τη διαδρομή εικόνας λογοτύπου |
--email= | Διεύθυνση παραλήπτη (επαναλαμβανόμενη)· στέλνει την αναφορά με email |
--send | Στέλνει email στους ρυθμισμένους παραλήπτες |
--output= | Γράφει το PDF σε αυτό το αρχείο ή κατάλογο |
--no-store | Δεν αποθηκεύει στιγμιότυπο (οι διαφορές περιόδου δεν προχωρούν) |
--json | Παράγει μηχανικά αναγνώσιμη σύνοψη |
Προγραμματισμός email
Το πακέτο δεν προγραμματίζεται ποτέ μόνο του — εσείς ορίζετε τη συχνότητα. Στο πρόγραμμα κονσόλας της εφαρμογής σας (routes/console.php ή app/Console/Kernel.php):
use Illuminate\Support\Facades\Schedule;
Schedule::command('seo-pro:report --send')->monthly();Ορίστε μία φορά τους προεπιλεγμένους παραλήπτες, στις ρυθμίσεις ή στο .env:
SEO_PRO_REPORT_RECIPIENTS="client@acme.com,pm@agency.com"Το --send χρησιμοποιεί αυτούς ως εναλλακτική· οι ρητές επιλογές --email τους αντικαθιστούν.
Εταιρική ταυτότητα
Η εταιρική ταυτότητα δεν είναι μυστική, οπότε βρίσκεται στις ρυθμίσεις — ορίστε τη μία φορά και κάθε αναφορά τη χρησιμοποιεί. Κάθε πεδίο μπορεί να αντικατασταθεί ανά αναφορά με τις παραπάνω επιλογές εντολής (χρήσιμο όταν μία εγκατάσταση παράγει αναφορές για πολλούς πελάτες).
SEO_PRO_REPORT_AGENCY="Blue Whale Studio"
SEO_PRO_REPORT_LOGO="/var/www/brand/logo.png"
SEO_PRO_REPORT_ACCENT="#3D5AFE"
SEO_PRO_REPORT_CLIENT="Acme Outdoor Co."
SEO_PRO_REPORT_CONTACT="hello@bluewhale.studio · bluewhale.studio"
SEO_PRO_REPORT_FOOTER="Confidential — prepared for Acme Outdoor Co."Σημειώσεις:
- Λογότυπο — απόλυτη διαδρομή προς αρχείο
PNG/JPG/GIF/WEBP/SVG. Ενσωματώνεται στο PDF ως data URI, αφού η εφαρμογή διαβάσει το αρχείο, οπότε ο renderer δεν χρειάζεται να ανακτήσει την εικόνα μέσω δικτύου. ΤοPNGή τοJPGείναι ασφαλέστερο. - Χρώμα έμφασης — επικυρώνεται ως κυριολεκτική τιμή hex· μια κακή τιμή επιστρέφει στην προεπιλογή. Εμφανίζεται μόνο ως χρώμα, ποτέ ως ακατέργαστο CSS.
- Όνομα agency — προεπιλογή το όνομα εφαρμογής σας (
config('app.name')).
Το πλήρες τμήμα ρυθμίσεων βρίσκεται στο reports του config/seo-pro.php και περιλαμβάνει paper (προεπιλογή a4), include_gsc και πόσες εκτελέσεις τάσης / γραμμές GSC / bot θα συμπεριληφθούν.
Ένας ιστότοπος ανά εγκατάσταση
Το Pro σαρώνει τη μία εφαρμογή στην οποία είναι εγκατεστημένο, οπότε η αναφορά περιγράφει αυτή την εγκατάσταση. Ένα agency που λειτουργεί πολλούς ιστοτόπους πελατών παράγει μία αναφορά ανά εγκατάσταση (οι παρακάμψεις --client / εταιρικής ταυτότητας επισημαίνουν την καθεμία). Δεν υπάρχει πολυμισθωτικό μοντέλο «sites».
Πώς κατασκευάζεται
Το PDF αποδίδεται με dompdf από προεπιλογή — καθαρή PHP, χωρίς Node ή headless Chromium — οπότε μια προγραμματισμένη αναφορά αποδίδεται σε worker ουράς ή cron χωρίς εκτελέσιμα συστήματος, και το Pro παραμένει headless. Η απομακρυσμένη ανάκτηση είναι ανενεργή στον renderer· η μόνη εικόνα (το λογότυπό σας) ενσωματώνεται, ώστε τίποτε σε αποδιδόμενο πεδίο να μην μπορεί να προκαλέσει ανάκτηση.
Αναφορές σε κάθε γραφή (renderer Browsershot)
Από core 3.20 / Pro 2.40, οι renderer Chrome απενεργοποιούν το JavaScript και αποκλείουν αιτήματα assets HTTP(S), FTP και WebSocket. Τα δημοσιευμένα πρότυπα πρέπει να χρησιμοποιούν στατικό HTML/CSS με ενσωματωμένα assets. Αυτοί οι έλεγχοι αφορούν assets σελίδας· το Chrome εξακολουθεί να χρειάζεται σωστά ρυθμισμένο host και sandbox. Ο renderer PDF καταγράφει προειδοποίηση εγκατάστασης γραμματοσειράς με οδηγία αντιμετώπισης όταν το Fontconfig αναφέρει γραφή που λείπει, περιλαμβάνοντας μειοψηφική γραφή σε μεικτό κείμενο. Μια γραμματοσειρά που λείπει δεν εμποδίζει το Chrome να παράγει PDF, οπότε ελέγξτε την έξοδο πριν στείλετε αναφορά.
Το dompdf σχεδιάζει μόνο τη γραμματοσειρά που ενσωματώνει (DejaVu Sans: λατινική, κυριλλική, ελληνική γραφή), οπότε μια αναφορά για Ιάπωνα, Ταϊλανδό ή Άραβα πελάτη εμφανίζει τετράγωνα αντί χαρακτήρων. Από το Pro 2.34, η αναφορά μπορεί αντ’ αυτού να αποδοθεί με headless Chrome μέσω spatie/browsershot — την ίδια εξάρτηση που χρησιμοποιεί το core για εικόνες OG, ώστε ένα μηχάνημα να ρυθμίζεται μία φορά:
// config/seo-pro.php → 'reports'
'renderer' => 'browsershot', // default 'dompdf'
'browsershot' => [
'chrome_path' => null, // null = reuse seo.og_image.chrome_path
'node_binary' => null, // … seo.og_image.node_binary
'npm_module_path' => null, // … seo.og_image.npm_module_path
'no_sandbox' => null, // … seo.og_image.no_sandbox
'timeout' => 90,
],
'locale' => null, // report language; null captures the app locale
'format_locale' => null, // optional regional date/number formatΤο Chrome σχεδιάζει ό,τι έχει εγκατασταθεί στον διακομιστή, και το πρότυπο χρησιμοποιεί τότε τη στοίβα γραμματοσειρών ανά γραφή του core (Noto Sans, πρώτα την οικογένεια Noto Sans CJK της γλώσσας σελίδας, έπειτα Ταϊλανδικά, Αραβικά, Εβραϊκά, Devanagari, έγχρωμα emoji και DejaVu Sans ως βάση για τη λατινική γραφή). Εγκαταστήστε τις οικογένειες που χρειάζεστε — apt install fonts-noto-cjk fonts-noto-core fonts-noto-color-emoji σε Debian και Ubuntu — ακριβώς όπως για εικόνες OG· το seo:og-images προειδοποιεί κατά την εκτέλεση όταν η γραφή σελίδας δεν έχει εγκατεστημένη οικογένεια, και η απάντηση είναι ίδια για τις αναφορές. Το πρότυπο Blade, τα δεδομένα και το στιγμιότυπο είναι πανομοιότυπα με τις δύο μηχανές· αλλάζει μόνο ο rasterizer, και το ReportGenerator::renderer() σας λέει ποιος έχει συνδεθεί.
Ημερομηνίες και αριθμοί με τις τοπικές ρυθμίσεις του αναγνώστη
Η αναφορά καταγράφει το seo-pro.reports.locale κατά την κατασκευή της. Το null χρησιμοποιεί τη γλώσσα εφαρμογής. Η επιλυμένη γλώσσα μετάφρασης ελέγχει τις ετικέτες PDF και email, το προεπιλεγμένο θέμα, την επιλογή γραμματοσειράς και το HTML lang. Οι τοπικές παραλλαγές χωρίς δικό τους αρχείο μετάφρασης καταφεύγουν στην ενσωματωμένη βασική γλώσσα και μετά στα Αγγλικά. Τα Απλοποιημένα (zh_CN) και Παραδοσιακά (zh_TW) Κινεζικά παραμένουν διακριτά.
Οι ημερομηνίες και οι αριθμοί ακολουθούν τη ζητούμενη τοπική ρύθμιση μέσω ICU όταν είναι εγκατεστημένο το ext-intl. Ορίστε seo-pro.reports.format_locale για να επιλέξετε συνειδητά διαφορετική τοπική μορφοποίηση: τα locale=it και format_locale=en_US παράγουν ιταλικές ετικέτες με αμερικανική μορφοποίηση ημερομηνιών και αριθμών. Χωρίς ext-intl, διατηρείται η εναλλακτική αγγλική ημερομηνία και ομαδοποίηση αριθμών με κόμμα.
Το email στην ουρά κρατά την καταγεγραμμένη γλώσσα, μορφοποίηση και θέμα ακόμη κι όταν αλλάζουν οι ρυθμίσεις worker. Επιλέξτε τη γλώσσα πριν παράγετε το PDF· η μεταγενέστερη αλλαγή γλώσσας ενός mailable δεν μπορεί να μεταφράσει το συνημμένο του. Παλιά payload ουράς πριν από το Pro 2.39 χρησιμοποιούν ρυθμίσεις worker, επειδή δεν έχουν καταγεγραμμένες ρυθμίσεις. Προσαρμοσμένα θέματα, εταιρική ταυτότητα και αποθηκευμένα μηνύματα προβλημάτων παραμένουν δεδομένα πηγής.
Η εμφάνιση CLI είναι ξεχωριστή: το php artisan seo-pro:report --display-locale=it μεταφράζει τη σύνοψη εντολής· οι ρυθμίσεις αναφοράς επιλέγουν τη γλώσσα PDF/email του πελάτη. Το CLI έχει προεπιλογή Αγγλικά, ρυθμιζόμενη με SEO_PRO_CLI_LOCALE. Τα κλειδιά και οι κωδικοί JSON μένουν σταθερά, ενώ οι ανθρώπινες ετικέτες μπορεί να μεταφράζονται. Δημοσιεύστε το seo-pro-lang για να αντικαταστήσετε μηνύματα αναφορών και ροής εργασίας στο lang/vendor/seo-pro/{locale}/seo-pro.php.
Προγραμματιστικά, επιλύστε το ReportGenerator από το container:
use Rankbeam\Seo\Pro\Reports\Branding;
use Rankbeam\Seo\Pro\Reports\ReportGenerator;
$report = app(ReportGenerator::class)->generate(
Branding::fromConfig()->withOverrides(['prepared_for' => 'Acme Outdoor Co.']),
);
$report->pdf; // raw PDF bytes
$report->data; // the assembled ReportData
$report->run; // the persisted SEOReportRun snapshot