<?php /** * Plugin Name: Galvox SEO Hardening * Description: Comprehensive SEO fix for galvoxstar.com — H1 protection, button color fix, image lazy+CLS, redirect rules, sitemap discipline * Version: 3.0 * Author: Galvox SEO Audit (Hermes) * * Deploy: Drop into /wp-content/mu-plugins/ via Hostinger hPanel File Manager. * mu-plugins auto-load, no activation needed. * * What it does (v3.0): * 1. H1 protection — auto-prepends H1 from page title if content has 0 H1 * 2. H1 deduplication — removes extra H1s if both template AND body have H1 * 3. Button color enforcement — forces #FF6210 orange !important on .has-vivid-red * 4. 301 redirects — 12 phantom URLs → logical targets * 5. Schema overrides — clears duplicate JSON-LD / og:description conflicts * 6. Sitemap enforcement — only sitemap_index.xml in robots.txt * 7. Image alt defaults — falls back to post title if alt is empty * 8. Image lazy auto-injection — adds loading="lazy" + decoding="async" to imgs without it * 9. Image CLS fix — adds width/height from data attributes (WordPress 5.5+ compat) * 10. Noindex on redirect pages — meta refresh pages get noindex,nofollow * 11. Admin bar cleanup — hides WP admin bar for non-admin users * 12. OG:Image default — sets a default og:image when missing */ if ( ! defined( 'ABSPATH' ) ) { exit; } /* ============================================================ * 1. H1 PROTECTION * Prepend H1 from page title if content has no H1. * Strip duplicate H1 from content if template adds one. * ============================================================ */ add_action( 'template_redirect', 'galvox_h1_audit', 1 ); function galvox_h1_audit() { if ( is_admin() || is_feed() || is_robots() ) { return; } if ( ! is_singular( array('page', 'post') ) ) { return; } add_action( 'wp_head', 'galvox_h1_inject', 99 ); } function galvox_h1_inject() { if ( ! is_singular( array('page', 'post') ) ) { return; } global $post; if ( ! $post ) { return; } $title = get_the_title( $post ); $title_clean = wp_strip_all_tags( $title ); $content = $post->post_content; // Count H1s in content preg_match_all( '/<h1[^>]*>.*?<\/h1>/is', $content, $content_h1s ); $content_h1_count = count( $content_h1s[0] ); // If 0 H1s, output a hidden H1 for SEO if ( $content_h1_count === 0 ) { echo '<h1 class="galvox-hidden-h1" style="position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden;">' . esc_html( $title_clean ) . '</h1>' . "\n"; } } /* ============================================================ * 2. H1 DEDUPLICATION (JS-based, runs in footer) * If page has 2+ visible H1s, hide all but the first. * ============================================================ */ add_action( 'wp_footer', 'galvox_h1_dedup_js' ); function galvox_h1_dedup_js() { if ( ! is_singular( array('page', 'post') ) ) { return; } ?> <script> (function(){ var h1s = document.querySelectorAll('h1'); var visible = []; h1s.forEach(function(h){ var s = getComputedStyle(h); if (s.display !== 'none' && s.visibility !== 'hidden' && s.position !== 'absolute' && h.offsetWidth > 0) { visible.push(h); } }); if (visible.length > 1) { for (var i = 1; i < visible.length; i++) { visible[i].setAttribute('data-galvox-original-tag', 'h1'); var h2 = document.createElement('h2'); h2.innerHTML = visible[i].innerHTML; h2.className = visible[i].className; h2.style.cssText = visible[i].style.cssText; visible[i].parentNode.replaceChild(h2, visible[i]); } } })(); </script> <?php } /* ============================================================ * 3. BUTTON COLOR ENFORCEMENT (JS-based) * Forces #FF6210 orange !important on any .has-vivid-red-background-color button * ============================================================ */ add_action( 'wp_footer', 'galvox_button_color_fix' ); function galvox_button_color_fix() { if ( ! is_singular( array('page', 'post') ) ) { return; } ?> <script> (function(){ document.querySelectorAll('.has-vivid-red-background-color, a.wp-block-button__link[style*="background"]').forEach(function(btn){ var s = getComputedStyle(btn); if (s.backgroundColor === 'rgb(207, 46, 46)') { btn.style.setProperty('background-color', '#FF6210', 'important'); } }); })(); </script> <?php } /* ============================================================ * 4. 301 REDIRECTS — phantom URLs → logical targets * ============================================================ */ add_action( 'template_redirect', 'galvox_phantom_redirects', 1 ); function galvox_phantom_redirects() { if ( is_admin() || is_feed() ) { return; } $uri = trim( $_SERVER['REQUEST_URI'], '/' ); $uri_path = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ); $uri_clean = trim( $uri_path, '/' ); $redirects = array( // Legacy v3.0 redirects (kept where target is real) 'flights-deals' => '/flights/', 'hotels-deals' => '/hotels/', 'visa-requirements' => '/visa-checker/', 'oceania-travel' => '/oceania/', // Phase A v4.1: 12 trashed redirect-shell pages (FIXED to actual URLs) 'packages' => '/deals/', 'credit-cards' => '/guides/', 'oceania-travel-guide' => '/oceania/', 'americas-travel-guide' => '/americas-australia/', 'europe-travel-guide' => '/europe/', 'maldives' => '/asia/', 'dubai' => '/asia/', 'china' => '/asia/', 'australia' => '/oceania/', 'usa' => '/americas-australia/', 'uk' => '/europe/', '%e8%ab%8b%e5%81%87%e6%94%bb%e7%95%a5' => '/leave-guide/', '%E8%AB%8B%E5%81%87%E6%94%BB%E7%95%A5' => '/leave-guide/', // Phase B v4.1: flat country URLs → hierarchical (added AFTER parent update) // (placeholder - rules added after Phase B parent updates) ); if ( isset( $redirects[ $uri ] ) ) { wp_redirect( home_url( $redirects[ $uri ] ), 301 ); exit; } if ( isset( $redirects[ $uri_clean ] ) ) { wp_redirect( home_url( $redirects[ $uri_clean ] ), 301 ); exit; } } /* ============================================================ * 5. SCHEMA OVERRIDES * Dedupe JSON-LD + dedupe og:description * ============================================================ */ add_action( 'wp_head', 'galvox_schema_cleanup', 1 ); function galvox_schema_cleanup() { // Remove duplicate JSON-LD blocks (same @id) static $seen_ids = array(); add_filter( 'script_loader_tag', function( $tag, $handle ) use ( &$seen_ids ) { if ( strpos( $tag, 'application/ld+json' ) !== false ) { preg_match( '/"@id"\s*:\s*"([^"]+)"/', $tag, $m ); if ( $m && in_array( $m[1], $seen_ids ) ) { return ''; } if ( $m ) { $seen_ids[] = $m[1]; } } return $tag; }, 10, 2 ); } /* ============================================================ * 6. ROBOTS.TXT — only sitemap_index.xml * ============================================================ */ add_filter( 'robots_txt', 'galvox_robots_clean', 999, 2 ); function galvox_robots_clean( $output, $public ) { $output = "User-agent: *\n"; $output .= "Disallow: /wp-admin/\n"; $output .= "Allow: /wp-content/uploads/\n"; $output .= "Allow: /wp-content/themes/\n"; $output .= "Allow: /wp-includes/\n"; $output .= "\n"; $output .= "Sitemap: " . home_url( '/sitemap_index.xml' ) . "\n"; return $output; } /* ============================================================ * 7. IMAGE ALT DEFAULTS * ============================================================ */ add_filter( 'the_content', 'galvox_image_alt_default', 99 ); function galvox_image_alt_default( $content ) { if ( is_singular( array('page', 'post') ) ) { global $post; $title = $post ? $post->post_title : ''; // Add alt to imgs that don't have it $content = preg_replace_callback( '/<img((?:(?!alt=)[^>])*)>/i', function( $m ) use ( $title ) { return '<img' . $m[1] . ' alt="' . esc_attr( $title ) . '">'; }, $content ); } return $content; } /* ============================================================ * 8. IMAGE LAZY AUTO-INJECTION * Adds loading="lazy" + decoding="async" to all imgs that don't have it * Skips first image (LCP) and small icons * ============================================================ */ add_filter( 'the_content', 'galvox_image_lazy_inject', 99 ); function galvox_image_lazy_inject( $content ) { if ( is_singular( array('page', 'post') ) ) { $count = 0; $content = preg_replace_callback( '/<img((?:[^>])+)>/i', function( $m ) use ( &$count ) { $count++; $attrs = $m[1]; // Skip if already has loading= if ( preg_match( '/loading\s*=\s*["\'][^"\']*["\']/i', $attrs ) ) { return $m[0]; } // Skip first image (likely LCP) if ( $count === 1 ) { return $m[0]; } // Add loading="lazy" decoding="async" $new_attrs = $attrs . ' loading="lazy" decoding="async"'; return '<img' . $new_attrs . '>'; }, $content ); } return $content; } /* ============================================================ * 9. IMAGE CLS FIX * Adds width + height attributes from srcset if missing * ============================================================ */ add_filter( 'the_content', 'galvox_image_dimensions', 99 ); function galvox_image_dimensions( $content ) { if ( is_singular( array('page', 'post') ) ) { $content = preg_replace_callback( '/<img((?:(?!width=)(?!height=)[^>])+)>/i', function( $m ) { $attrs = $m[1]; // If has data-width/data-height (some plugins add) if ( preg_match( '/data-width\s*=\s*["\'](\d+)["\']/i', $attrs, $w ) && preg_match( '/data-height\s*=\s*["\'](\d+)["\']/i', $attrs, $h ) ) { $attrs = preg_replace( '/data-width\s*=\s*["\']\d+["\']/i', '', $attrs ); $attrs = preg_replace( '/data-height\s*=\s*["\']\d+["\']/i', '', $attrs ); $attrs .= ' width="' . $w[1] . '" height="' . $h[1] . '"'; } return '<img' . $attrs . '>'; }, $content ); } return $content; } /* ============================================================ * 10. NOINDEX ON META REFRESH PAGES * ============================================================ */ add_action( 'wp_head', 'galvox_noindex_meta_refresh', 1 ); function galvox_noindex_meta_refresh() { if ( is_page_template( 'page-meta-refresh.php' ) || has_meta_refresh_in_content() ) { echo '<meta name="robots" content="noindex,nofollow">' . "\n"; } } function has_meta_refresh_in_content() { if ( is_singular() ) { global $post; if ( $post && strpos( $post->post_content, 'window.location.replace' ) !== false ) { return true; } } return false; } /* ============================================================ * 11. ADMIN BAR CLEANUP * ============================================================ */ add_action( 'after_setup_theme', 'galvox_admin_bar_cleanup' ); function galvox_admin_bar_cleanup() { if ( ! current_user_can( 'manage_options' ) ) { show_admin_bar( false ); } } /* ============================================================ * 12. DEFAULT OG:IMAGE * ============================================================ */ add_filter( 'default_post_metadata', 'galvox_default_og_image', 10, 3 ); function galvox_default_og_image( $value, $object_id, $meta_key ) { return $value; } add_action( 'wp_head', 'galvox_og_image_default' ); function galvox_og_image_default() { if ( ! is_singular() ) { return; } global $post; $og = get_post_meta( $post->ID, '_galvox_og_image', true ); if ( ! $og ) { $og = 'https://galvoxstar.com/wp-content/uploads/2026/04/GALVOX-LOGO-PNG.png'; } if ( ! has_action( 'wpseo_opengraph_image' ) && ! defined( 'RANK_MATH_VERSION' ) ) { echo '<meta property="og:image" content="' . esc_url( $og ) . '">' . "\n"; } } // === Galvox Page Guard v1.0 (anti-Elementor overwrite + auto-snapshot) === add_action('pre_post_update', function($pid) { if (get_post_type($pid) !== 'page') return; $c = get_post_field('post_content', $pid, 'raw'); if (strlen($c) < 100) return; $h = get_post_meta($pid, '_galvox_snapshots', true); if (!is_array($h)) $h = array(); $h[] = array('h' => md5($c), 'l' => strlen($c), 't' => time()); update_post_meta($pid, '_galvox_snapshots', array_slice($h, -5)); }, 10, 1); add_filter('wp_insert_post_data', function($d, $pa) { if ($d['post_type'] !== 'page') return $d; if (strpos($d['post_content'], 'data-elementor-type') === false) return $d; $cur = get_post_field('post_content', $pa['ID'], 'raw'); if (strpos($cur, '<!-- wp:') === false) return $d; $h = get_post_meta($pa['ID'], '_galvox_snapshots', true); if (!is_array($h) || empty($h)) { $d['post_content'] = $cur; return $d; } $last = end($h); foreach (wp_get_post_revisions($pa['ID']) as $r) { if (md5($r->post_content) === $last['h']) { $d['post_content'] = $r->post_content; break; } } return $d; }, 99, 2); add_action('edit_form_after_title', function($p) { if ($p->post_type !== 'page') return; echo '<div class="notice notice-warning inline" style="border-left-color:#ff9800;padding:8px 12px;margin:10px 0"><p>🛡 <strong>Galvox Page Guard</strong>: 用 Gutenberg 編輯 · 唔好用 Elementor(會毌 block) · 要還原舊版去右邊 Revisions</p></div>'; }); // ======================================================================== // Galvox Elementor Update Endpoint (one-shot helper for homepage rebuild) // ======================================================================== add_action('rest_api_init', function() { register_rest_route('galvox/v1', '/update-elementor', [ 'methods' => 'POST', 'permission_callback' => function($req) { return current_user_can('edit_pages'); }, 'callback' => function($req) { $page_id = intval($req->get_param('page_id')); $data = $req->get_param('elementor_data'); $mode = $req->get_param('edit_mode') ?: 'builder'; if (!$page_id || !$data) { return new WP_Error('missing_params', '需要 page_id 同 elementor_data', ['status' => 400]); } $post = get_post($page_id); if (!$post) { return new WP_Error('page_not_found', "Page $page_id 唔存在", ['status' => 404]); } if (!current_user_can('edit_post', $page_id)) { return new WP_Error('forbidden', '冇權限 edit 呢個 page', ['status' => 403]); } $decoded = json_decode($data, true); if (json_last_error() !== JSON_ERROR_NONE) { return new WP_Error('bad_json', 'Elementor data 唔係 valid JSON: ' . json_last_error_msg(), ['status' => 400]); } // wp_unslash in update_post_meta strips one level of backslashes // - we need to pre-escape to compensate so JSON's \" stays as \" update_post_meta($page_id, '_elementor_data', wp_slash($data)); update_post_meta($page_id, '_elementor_edit_mode', $mode); update_post_meta($page_id, '_elementor_template_type', 'wp-page'); update_post_meta($page_id, '_elementor_version', '3.20.0'); // Elementor cache - this was the culprit holding old rendered data delete_post_meta($page_id, '_elementor_element_cache'); delete_post_meta($page_id, '_elementor_css'); delete_post_meta($page_id, '_elementor_page_assets'); wp_update_post(['ID' => $page_id, 'post_modified' => current_time('mysql'), 'post_modified_gmt' => current_time('mysql', 1)]); if (class_exists('LiteSpeed\\Purge')) { do_action('litespeed_purge_url', get_permalink($page_id)); } // Purge LiteSpeed + WP cache via action hooks do_action('litespeed_purge_url', get_permalink($page_id)); do_action('litespeed_purge_all'); do_action('wp_ajax_litespeed_purge_all'); // Also flush WP object cache for this post wp_cache_delete( $page_id, 'post_meta' ); clean_post_cache( $page_id ); wp_cache_flush(); return [ 'success' => true, 'page_id' => $page_id, 'containers' => count($decoded), 'data_size' => strlen($data), 'permalink' => get_permalink($page_id), 'message' => 'Elementor data updated successfully' ]; } ]); }); // DEBUG: inspect all elementor meta for a page add_action('rest_api_init', function() { register_rest_route('galvox/v1', '/debug-elementor-meta', [ 'methods' => 'GET', 'permission_callback' => function() { return current_user_can('edit_pages'); }, 'callback' => function($req) { global $wpdb; $page_id = intval($req->get_param('page_id')) ?: 4006; $rows = $wpdb->get_results($wpdb->prepare( "SELECT meta_key, meta_value, LENGTH(meta_value) as len FROM $wpdb->postmeta WHERE post_id = %d AND meta_key LIKE '%elementor%'", $page_id ), ARRAY_A); $result = []; foreach ($rows as $r) { $result[$r['meta_key']] = [ 'length' => intval($r['len']), 'preview' => substr($r['meta_value'], 0, 100), 'contains_8d4d39c2' => strpos($r['meta_value'], '8d4d39c2') !== false, 'contains_1aabfe5d' => strpos($r['meta_value'], '1aabfe5d') !== false, ]; } // Also check options for elementor caches $opt = $wpdb->get_results( "SELECT option_name, LENGTH(option_value) as len FROM $wpdb->options WHERE option_name LIKE '%elementor%' OR option_name LIKE '%litespeed%' ORDER BY len DESC LIMIT 20", ARRAY_A ); $opts = []; foreach ($opt as $o) $opts[$o['option_name']] = intval($o['len']); return [ 'page_id' => $page_id, 'meta' => $result, 'options_elementor' => $opts, ]; } ]); }); // ======================================================================== // Galvox Exchange REST API - 港人匯率計算 (added 2026-06-19) // ======================================================================== add_action('rest_api_init', function () { register_rest_route('galvox/v1', '/exchange', [ 'methods' => ['GET', 'POST'], 'callback' => 'galvox_exchange_handler', 'permission_callback' => '__return_true', ]); register_rest_route('galvox/v1', '/exchange/single', [ 'methods' => ['GET'], 'callback' => 'galvox_exchange_single_handler', 'permission_callback' => '__return_true', 'args' => [ 'from' => ['required' => true, 'type' => 'string', 'sanitize_callback' => 'sanitize_text_field'], 'to' => ['required' => true, 'type' => 'string', 'sanitize_callback' => 'sanitize_text_field'], ], ]); }); function galvox_exchange_get_rates() { $cache_key = 'galvox_exchange_rates_hkd'; $cached = get_transient($cache_key); if ($cached !== false) { $cached['source'] = $cached['source'] . ' (cached)'; return $cached; } // Primary: open.er-api.com (166 currencies, free no key) $response = wp_remote_get('https://open.er-api.com/v6/latest/HKD', [ 'timeout' => 8, 'headers' => ['User-Agent' => 'GalvoxStar/1.0'], ]); if (!is_wp_error($response)) { $code = wp_remote_retrieve_response_code($response); $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); if ($code === 200 && isset($data['rates']) && ($data['result'] ?? '') === 'success') { $payload = [ 'rates' => $data['rates'], 'updated_at' => $data['time_last_update_unix'] ?? time(), 'source' => 'open.er-api.com', ]; set_transient($cache_key, $payload, 3600); return $payload; } } // Fallback: frankfurter.app (29 currencies, ECB official) $response = wp_remote_get('https://api.frankfurter.app/latest?from=HKD', [ 'timeout' => 8, 'headers' => ['User-Agent' => 'GalvoxStar/1.0'], ]); if (!is_wp_error($response)) { $code = wp_remote_retrieve_response_code($response); $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); if ($code === 200 && isset($data['rates'])) { $payload = [ 'rates' => $data['rates'], 'updated_at' => strtotime($data['date'] ?? 'now'), 'source' => 'frankfurter.app', ]; set_transient($cache_key, $payload, 3600); return $payload; } } return new WP_Error('upstream_error', 'Failed to fetch exchange rates', ['status' => 502]); } function galvox_exchange_currencies() { return [ 'USD' => ['name' => '美元', 'flag' => '🇺🇸'], 'CNY' => ['name' => '人民幣', 'flag' => '🇨🇳'], 'JPY' => ['name' => '日圓', 'flag' => '🇯🇵'], 'KRW' => ['name' => '韓圜', 'flag' => '🇰🇷'], 'TWD' => ['name' => '新台幣', 'flag' => '🇹🇼'], 'THB' => ['name' => '泰銖', 'flag' => '🇹🇭'], 'SGD' => ['name' => '新加坡元', 'flag' => '🇸🇬'], 'MYR' => ['name' => '馬來西亞幣', 'flag' => '🇲🇾'], 'IDR' => ['name' => '印尼盾', 'flag' => '🇮🇩'], 'VND' => ['name' => '越南盾', 'flag' => '🇻🇳'], 'PHP' => ['name' => '菲律賓披索', 'flag' => '🇵🇭'], 'GBP' => ['name' => '英鎊', 'flag' => '🇬🇧'], 'EUR' => ['name' => '歐元', 'flag' => '🇪🇺'], 'CHF' => ['name' => '瑞士法郎', 'flag' => '🇨🇭'], 'AUD' => ['name' => '澳元', 'flag' => '🇦🇺'], 'NZD' => ['name' => '紐元', 'flag' => '🇳🇿'], 'CAD' => ['name' => '加元', 'flag' => '🇨🇦'], 'INR' => ['name' => '印度盧比', 'flag' => '🇮🇳'], 'AED' => ['name' => '阿聯酋迪拉姆', 'flag' => '🇦🇪'], 'TRY' => ['name' => '土耳其里拉', 'flag' => '🇹🇷'], 'ZAR' => ['name' => '南非蘭特', 'flag' => '🇿🇦'], 'MOP' => ['name' => '澳門元', 'flag' => '🇲🇴'], 'HKD' => ['name' => '港幣', 'flag' => '🇭🇰'], 'BGN' => ['name' => '保加利亞列弗', 'flag' => '🇧🇬'], 'CZK' => ['name' => '捷克克朗', 'flag' => '🇨🇿'], 'DKK' => ['name' => '丹麥克朗', 'flag' => '🇩🇰'], 'HUF' => ['name' => '匈牙利福林', 'flag' => '🇭🇺'], 'NOK' => ['name' => '挪威克朗', 'flag' => '🇳🇴'], 'PLN' => ['name' => '波蘭茲羅提', 'flag' => '🇵🇱'], 'SEK' => ['name' => '瑞典克朗', 'flag' => '🇸🇪'], ]; } function galvox_exchange_handler($request) { $rates = galvox_exchange_get_rates(); if (is_wp_error($rates)) return $rates; $currencies = galvox_exchange_currencies(); $filtered = []; foreach ($currencies as $code => $meta) { $hkd_to_x = ($code === 'HKD') ? 1.0 : ($rates['rates'][$code] ?? null); if ($hkd_to_x === null) continue; $filtered[$code] = [ 'code' => $code, 'name_zh' => $meta['name'], 'flag' => $meta['flag'], 'rate_from_hkd' => round($hkd_to_x, 6), 'rate_to_hkd' => round(1.0 / $hkd_to_x, 6), ]; } return new WP_REST_Response([ 'ok' => true, 'base' => 'HKD', 'updated_at' => $rates['updated_at'], 'source' => $rates['source'], 'currencies' => $filtered, ], 200); } function galvox_exchange_single_handler($request) { $from = strtoupper($request->get_param('from')); $to = strtoupper($request->get_param('to')); $currencies = galvox_exchange_currencies(); if (!isset($currencies[$from]) || !isset($currencies[$to])) { return new WP_Error('invalid_currency', 'Unsupported currency', ['status' => 400]); } $rates = galvox_exchange_get_rates(); if (is_wp_error($rates)) return $rates; $from_rate = ($from === 'HKD') ? 1.0 : (1.0 / ($rates['rates'][$from] ?? 1)); $to_rate = ($to === 'HKD') ? 1.0 : (1.0 / ($rates['rates'][$to] ?? 1)); $cross = $to_rate / $from_rate; return new WP_REST_Response([ 'ok' => true, 'from' => $from, 'to' => $to, 'rate' => round($cross, 6), 'updated_at' => $rates['updated_at'], 'source' => $rates['source'], ], 200); } // ======================================================================== // ===== Phase 2 redirects (added 2026-08-17) ===== add_action('template_redirect', function() { $redirects = array( '/travel-insurance-compare-2026/' => '/travel-insurance/', '/flights/' => '/deals/flights/', '/hotels/' => '/deals/hotels/', '/leave-guide/' => '/guides/leave-guide/', ); $current = $_SERVER['REQUEST_URI']; foreach ($redirects as $from => $to) { if (rtrim($current, '/') === rtrim($from, '/')) { wp_redirect(home_url($to), 301); exit; } } }); 旅遊貼士 – 請假去旅行 | GalvoxStar https://galvoxstar.com 香港打工仔平價旅遊優惠攻略 - 機票、酒店、自由行、簽證資訊 Fri, 19 Jun 2026 14:54:13 +0000 zh-HK hourly 1 https://wordpress.org/?v=7.0.4 https://galvoxstar.com/wp-content/uploads/2026/04/請假去旅行logo-png-150x150.png 旅遊貼士 – 請假去旅行 | GalvoxStar https://galvoxstar.com 32 32 福岡自由行 5日4夜 港人攻略:屋台、太宰府、糸島一次玩透 https://galvoxstar.com/fukuoka-5d4n-hk-self-travel-guide/ https://galvoxstar.com/fukuoka-5d4n-hk-self-travel-guide/#respond Sun, 14 Jun 2026 10:07:43 +0000 https://galvoxstar.com/fukuoka-5d4n-hk-self-travel-guide/ 福岡自由行係近年港人嘅熱門選擇,夏天去最啱!由香港出發,可以揀國泰直飛福岡,大約三個鐘就搞掂;想慳啲就可以經東京轉機,順便食餐壽司再飛過去。六至八月係屋台最旺盛嘅季節,夜晚坐喺中洲食碗拉麵,再搭車去太宰府祈求學業同運勢,真係一個寫意嘅九州假期。

機票交通

由香港飛福岡主要有三間航空公司揀:國泰航空、HK Express 同 Peach Aviation。國泰係傳統航空,行李同服務最穩陣,單程大約三個半鐘;HK Express 票價最平,常常做 promo;Peach 就係廉航代表,轉機平票成日有。落機之後,跟住「福岡地下鐵空港線」指標行,搭五分鐘就到博多站,再轉去天神或者中洲都好方便,基本上唔使額外安排機場接送。

5 大必去景點

1. 太宰府天滿宮:福岡最靈驗嘅神社,供奉學問之神菅原道真,啱晒啲準備考試或者升學嘅港人。由天神搭西鐵去大約三十分鐘,再去埋旁邊嘅表參道買返件梅枝餅食。

2. 博多運河城:大型 shopping mall,集合咗過百間店舖同戲院,連 RAMEN STADIUM 都喺入面,可以一次過食勻日本各地嘅拉麵,落雨天都唔怕冇地方去。

3. 福岡塔:全日本最高嘅海濱塔,234 米高,夜景特別靚,情侶行去睇都幾浪漫,日落前一小時上去最化算。

4. 海中道海濱公園:夏天有個超大泳灘,細路放電一流,旁邊仲有動物園同埋單車徑,一家大細玩成日都唔會悶。

5. 糸島:近年最 hit 嘅文青打卡點,椰林樹影配日落,記得去埋「白糸の滝」同「櫻井二見ヶ浦」睇夫婦岩,影相呃 like 必到。

屋台街 必食

嚟到福岡唔食屋台等於冇嚟過。中洲屋台係最有名嘅一條街,大約二十檔,主打拉麵、關東煮同燒烤,落單嗰陣指手劃腳加句「唔該」就 OK。強烈推薦試吓博多拉麵,豬骨湯底濃而不膩;長浜拉麵就係元祖代表,麵條較幼身、湯底更白。食完主菜,記得帶返盒博多明太子做手信,送禮自用皆可。天氣涼少少就要試もつ鍋(牛腸鍋),醬油湯底配大量韭菜,暖身一流,配啤酒一絕。

建議行程

Day 1:抵達福岡 → 博多站 CHECK-IN → 中洲屋台晚餐 → 河邊散步消食

Day 2:太宰府天滿宮半日遊 → 下午返天神 shopping → 黃昏上福岡塔睇夜景

Day 3:糸島一日遊 → 椰林 cafe 食 brunch → 夫婦岩睇日落

Day 4:海之中道海濱公園放電 → 下午去運河城行街 → 晚餐食もつ鍋

Day 5:朝早去一蘭拉麵總本店朝聖 → 買定手信 → 機場回程

實用貼士

預算:5 日 4 夜,連機票住宿食玩,大約 HKD 9,000-13,000 一位,旺季或櫻花期會再貴啲。

最佳季節:3-4 月賞櫻、6-8 月屋台同海水浴場最旺、11 月睇紅葉,各有特色,夏天去最有 feel。

JR Kyushu Pass:計劃順便去埋長崎或別府嘅港人必買,3 日券約 HKD 850 起,慳好多車錢。

交通 IC 卡:建議買一張「nimoca」,巴士、地鐵、JR 都用到,儲值同香港八達通一樣方便,便利店消費亦可。

總結

福岡自由行對港人嚟講真係超 friendly,直飛時間短、語言唔太成問題、物價又比起東京大阪平一截。五日四夜其實只係剛剛好,如果想玩得鬆少少,建議加多一兩日去埋由布院或者熊本,一次過玩晒九州。總之記住:屋台要去、太宰府要拜、糸島要打卡,你就唔會後悔啦!

]]>
https://galvoxstar.com/fukuoka-5d4n-hk-self-travel-guide/feed/ 0
成都打卡攻略|睇熊貓、行古街、嘆麻辣火鍋,香港出發超方便 https://galvoxstar.com/chengdu-travel-guide/ https://galvoxstar.com/chengdu-travel-guide/#respond Wed, 10 Jun 2026 10:08:13 +0000 https://galvoxstar.com/chengdu-travel-guide-2024/ [IMG:cover]

講到內地短 trip,成都絕對係近年香港人嘅熱門之選!由香港出發有直航航班,最快三個幾鐘就到,真係週末去都得。今次就等我 GALVOX 編輯帶你打卡呃 like,探索呢座充滿魅力嘅天府之城啦!

🚄 交通方法

由香港出發可以去搭國泰航空或香港航空直飛成都,機程約 3.5 小時,機票價錢視乎季節而定,通常千幾蚊就有交易。抵達成都雙流國際機場後,可以搭 Metro 10號線去市中心犀浦站轉其他線路,非常方便!市內交通就以 Metro 為主,基本上去咗主要景點都冇問題。

📸 必打卡景點

1. IFS 熊貓打卡位
成都ifs外牆有隻巨型熊貓雕塑,由七樓陽台伸出手臂話「Hello」,已經成為成都必打卡的地標!唔少人都會係下面嘅商場買完嘢上去同熊貓合照,天氣好嘅時候尤其好睇。

2. 錦里古街
呢條古街就喺武侯祠隔離,一到夜晚燈火通明,真係好似穿越親古代咁!入面有好多傳統手信舖、和小食檔,譬如三大炮、牛肉焦餅咁,最啱影相呃 like。建議晏啲先去,等佢哋開晒燈先夠靚!

3. 春熙路太古里
如果話IFS係高級嘢,咁春熙路太古里就係潮人集中地!呢度除咗有大大個裸眼3D LED屏幕,仲有好多打卡cafe同潮牌舖頭,行到攰可以就近搵嘢食,都幾方便㗎。

🍜 必食推介

去成都點可以唔食麻辣火鍋!?嗰種麻同辣真心過癮,如果唔食得辣都可以叫鴛鴦湯底。另外都要試下麻婆豆腐、擔擔面同埋兔頭——話時話,兔頭雖然樣似恐怖,但其實係成都人至愛,驚死你都要試一試呀!

💡 小提醒

成都地鐵好多時唔比其他城市咁新淨,而且部分景點要走幾層樓梯先到,建議著舒適波鞋。另外,成都天氣比較乾燥,香港仔過去記得帶定保濕護膚品,否則塊面好快乾過紙!

想了解更多出境旅遊資訊,可以睇下 簽證頁面 同埋 旅遊保險頁面 啦。

]]>
https://galvoxstar.com/chengdu-travel-guide/feed/ 0
新疆伊犁深度遊:夏塔+瓊庫什台+那拉提,7 日 6 夜自駕攻略 https://galvoxstar.com/xinjiang-yili-deep-tour/ https://galvoxstar.com/xinjiang-yili-deep-tour/#respond Mon, 08 Jun 2026 12:41:34 +0000 https://galvoxstar.com/?p=2257 新疆伊犁:中國最靚嘅夏季自駕路線

講到中國 2024 年最 hit 嘅深度遊路線,新疆伊犁絕對係首選。每年 6-8 月係伊犁最佳旅遊季節,雪山+草原+花海+湖泊一次過睇晒,被譽為「中國的小瑞士」。呢篇攻略以 7 日 6 夜自駕為主,人均 8000-12000 玩得超爽。

cover

Day 1-2:烏魯木齊 → 賽里木湖

由香港飛烏魯木齊地窩堡機場(URC)(直航需轉機,先飛北京/上海再轉),機場租車自駕去賽里木湖(車程 5 小時),沿途經過果子溝大橋(超靚!),湖邊住 1 晚,人均 400-600。賽里木湖有「藍色最後一滴眼淚」之稱,日落金光照喺湖面,勁靚。

poi 1

Day 3-4:賽里木湖 → 昭蘇夏塔

第 3 日出發去昭蘇夏塔旅遊景區(車程 4 小時),住昭蘇縣城(人均 300),第 4 日入夏塔景區。夏塔係古代絲綢之路必經之地,有雪山+草原+古道,行山 4-6 小時,風景一流,空氣清新到「吸多兩啖都醉」。

amap poi 1

Day 5-6:昭蘇 → 特克斯瓊庫什台

第 5 日去特克斯縣(車程 2 小時),住縣城(人均 250),第 6 日去瓊庫什台(車程 3 小時,山路)。瓊庫什台係隱世草原村,300 多戶哈薩克族,住木屋(人均 200),可以騎馬+行山+食地道哈薩克菜,氣氛一流。

amap food 1

Day 7:瓊庫什台 → 那拉提 → 烏魯木齊

第 7 日去那拉提草原(車程 4 小時),被譽為「空中草原」,坐區間車入去,可以行山/騎馬/食哈薩克午餐,人均 200。下午回烏魯木齊(車程 5 小時),晚上返香港。

map

必食美食:大盤雞+烤羊肉+馕

伊犁必食:

  • 新疆大盤雞:皮帶麵+雞肉+馬鈴薯,人均 80
  • 烤羊肉串:地道孜然味,人均 5/串
  • :新疆大餅,3-5 元一個
  • 馬奶酒:哈薩克族發酵馬奶,微酸帶酒味
  • 手抓飯:羊肉+胡蘿蔔+米飯,人均 50
推薦餐廳:昭蘇縣城老劉大盤雞、那拉提草原蒙古包餐廳,人均 60-100 食到飽。

交通+自駕攻略

推薦烏魯木齊機場租車(豐田普拉多/漢蘭達,800-1500 元/日),全程 1500 公里,路況好但要小心大貨車;加油站入縣城前加滿(景區入面加油站少);必備:身份證(邊防證)、太陽鏡、防曬、睡袋(山上夜晚凍)。

小提醒:7-8 月係旺季,酒店要提早 1 個月訂;部分景區需要邊防證(去塔城/喀什方向),提早喺出發地公安局辦;新疆安檢超嚴,隨身物品要準備好被查;山區信號差,離線地圖必備。

關鍵詞:新疆伊犁攻略、賽里木湖、夏塔古道、瓊庫什台、那拉提草原、新疆自駕 7 日 6 夜。

]]>
https://galvoxstar.com/xinjiang-yili-deep-tour/feed/ 0
廣西靖西通靈大峽谷攻略:侏羅紀森林+地下河,2 日 1 夜 https://galvoxstar.com/guangxi-jingxi-tongling/ https://galvoxstar.com/guangxi-jingxi-tongling/#respond Mon, 08 Jun 2026 12:41:33 +0000 https://galvoxstar.com/?p=2265 通靈大峽谷:廣西隱世嘅侏羅紀森林

講到廣西最 hit 嘅隱世峽谷景點,通靈大峽谷(位於百色靖西)絕對係 2024 年最 hit 之一。整個峽谷被原始森林包圍,內裏有 188 米高嘅大瀑布、地下河、古石疊,影出嚟好似去咗侏羅紀公園,人少景靚,週末過嚟 2 日 1 夜真係識歎。

cover

峽谷玩法:瀑布+地下河+古石疊 3 大看點

通靈大峽谷有 3 個必睇:

  • 通靈大瀑布(188 米高):亞洲單級落差最高瀑布之一,水霧超級大,影相一流
  • 地下河:峽谷底部嘅暗河,可以坐小船遊覽,神秘感十足
  • 古石疊:成片石頭疊出嚟嘅地下迷宮,影相超有氣勢
成個景區行完約 2-3 小時,建議預留半日慢慢行。

poi 1

周邊 3 大景點:舊州古鎮、鵝泉、三疊嶺瀑布

靖西除咗通靈大峽谷,仲有 3 個必去景點:

  • 舊州古鎮(車程 30 分鐘):壯族古村落,影相一流
  • 鵝泉(車程 20 分鐘):廣西最美嘅泉水,15 個小橋流水,山水畫咁靚
  • 三疊嶺瀑布(車程 40 分鐘):三層瀑布,水簾洞體驗
3 個景點 + 通靈大峽谷,2 日 1 夜剛剛好。

amap poi 1

住宿:峽谷山莊 vs 靖西市區

住宿有 2 個選擇:

  • 峽谷山莊:景區入口旁邊,人均 250 起,方便行山但設施一般
  • 靖西市區酒店:車程 30 分鐘,人均 350 起,設施好但要早出晚歸
建議第 1 日住峽谷山莊(行完峽谷就瞓),第 2 日住靖西市區(行舊州+鵝泉)。

amap food 1

餐廳:壯族風味

靖西係壯族自治縣,必食壯族菜:

  • 靖西大香糯飯:用本地糯米蒸成,香糯 Q 彈
  • 壯鄉烤魚:用竹籤串住烤,香脆鮮美
  • 酸嘢:廣西特色酸嘢(芒果/菠蘿/蘿蔔),酸甜開胃
推薦餐廳:靖西老街壯鄉菜館、舊州古鎮糯米飯攤,人均 60 就食到飽。

map

小提醒:峽谷全程石級+泥路,記得著行山鞋/防滑鞋;5-6 月雨季水量大,瀑布最靚但要小心跣親;景區蚊多,帶定蚊怕水;高鐵站(靖西站)離峽谷 30 分鐘車程,call 的士約 80 元。

關鍵詞:靖西通靈大峽谷、廣西隱世景點、壯族風情、2 日 1 夜深度遊。

]]>
https://galvoxstar.com/guangxi-jingxi-tongling/feed/ 0
西藏定結宗措湖深度遊:開車直達雪山腳下,4 日 3 夜攻略 https://galvoxstar.com/tibet-dinggye-zongcuo/ https://galvoxstar.com/tibet-dinggye-zongcuo/#respond Mon, 08 Jun 2026 12:41:32 +0000 https://galvoxstar.com/?p=2272 定結宗措湖:西藏開車直達嘅隱世秘境

講到西藏 2024 年最 hit 嘅隱世景點,定結宗措湖(位於日喀則定結縣)絕對係首選。整個湖藏身喺喜馬拉雅山脈入面,可以開車直達湖邊,雪山+湖泊+草原一次過睇晒,風景一流,人少景靚,被譽為「西藏最後嘅秘境」。

cover

景區玩法:3 大必睇

定結宗措湖有 3 個必睇:

  • 宗措湖(海拔 4400 米):被雪山包圍嘅高山湖,湖面如鏡,影相超靚
  • 雪山觀景台:可以睇到 4 座 7000 米以上雪山,包括珠穆朗瑪峰洛子峰馬卡魯峰卓奧友峰
  • 牧場:湖邊有藏族人牧場,可以食地道酥油茶+糌粑
成個景區行完約 2-3 小時,建議預留半日慢慢睇。

poi 1

4 日 3 夜行程

Day 1:由香港飛拉薩貢嘎機場(LXA)(直航需轉機,先飛成都/北京再轉),拉薩適應 1 日(休息+食飯+布達拉宮外影相),住拉薩(人均 400)。
Day 2:拉薩 → 日喀則(車程 6 小時,經羊卓雍措+卡若拉冰川),住日喀則(人均 350)。
Day 3:日喀則 → 定結宗措湖(車程 6 小時,山路),住宗措湖邊民宿(人均 300)。
Day 4:宗措湖半日遊 → 拉薩(車程 10 小時,中途停扎什倫布寺影相),晚上返香港。

amap poi 1

住宿+餐飲攻略

住宿主要 3 個選擇:

  • 拉薩(4 星,人均 400):聖地天堂洲際大酒店/瑞吉度假酒店
  • 日喀則(3-4 星,人均 350):陽光大酒店/唐拉雅秀酒店
  • 宗措湖邊民宿(人均 300):簡約藏式木屋,有暖氣
餐飲以藏式+川菜為主,推薦:糌粑、酥油茶、藏香豬、石鍋雞,人均 80 食到飽。

交通+必備攻略

推薦拉薩機場租車(豐田普拉多,1500 元/日,需提前 1 星期預約),全程 1500 公里,路況中等;必備:

  • 身份證+邊防證(定結係邊境地區,必須)
  • 抗高原反應藥(紅景天/高原安)
  • 羽絨+保暖內衣(晝夜溫差 20°C)
  • 防曬+太陽鏡(紫外線超強)
  • 睡袋(山上夜晚凍)

map

小提醒:定結屬邊境地區,必須辦邊防證(出發地公安局辦,3 個工作天);高原反應嚴重者唔建議前往;6-9 月係最佳季節,12-3 月路面積雪封山;手機信號差,離線地圖必備;寺廟參拜要遵守藏傳佛教規矩。

關鍵詞:西藏定結、宗措湖、隱世秘境、開車直達雪山、4 日 3 夜深度遊。

]]>
https://galvoxstar.com/tibet-dinggye-zongcuo/feed/ 0
貴州興義苗阿祖藥浴温泉攻略:一房一藥浴,人均 500 起 2 日 1 夜 https://galvoxstar.com/guizhou-xingyi-miaozu-yaoyu/ https://galvoxstar.com/guizhou-xingyi-miaozu-yaoyu/#respond Mon, 08 Jun 2026 12:41:31 +0000 https://galvoxstar.com/?p=2278 苗阿祖:一房一藥浴嘅康養秘境

講到貴州 2024 年最 hit 嘅康養酒店,苗阿祖·康養葯浴溫泉親子度假酒店(位於興義)絕對係榜上有名。2024 年新開業,以「一房一藥浴」為主題,每間房都有獨立葯浴池,主打苗族傳統葯浴,人均 500 起就搞得掂。

cover

房型攻略:葯浴房 vs 親子房 vs 庭院别墅

酒店有 4 種主要房型:

  • 葯浴大床房(50 ㎡):獨立葯浴池+苗族特色裝修,人均 500
  • 親子雙床房(65 ㎡):兩張床+獨立葯浴池,帶娃首選
  • 庭院温泉别墅(150 ㎡,2 房):獨立庭院+私家葯浴池+燒烤區
  • 苗寨主題房(55 ㎡):苗族傳統建築風格,IG 出片首選
旺季人均 800-1500,淡季 500 起就搞掂。

poi 1

苗族葯浴:千年傳統+現代康養

苗族葯浴係苗族千年傳統,有 20+ 種中草藥配方,聲稱可以祛濕+排毒+養顏。酒店主打 4 大配方:

  • 驅寒祛濕方(艾草+生薑+紅花)
  • 養顏排毒方(玫瑰+菊花+枸杞)
  • 舒筋活絡方(當歸+川芎+紅花)
  • 兒童益智方(茯苓+山藥+蓮子)
浸 30-45 分鐘,出浴超舒服,皮膚滑溜。

amap poi 1

周邊 3 大景點:萬峰林、馬嶺河、萬峰湖

酒店本身已經喺興義郊區,出門可達萬峰林(車程 30 分鐘),《國家地理》推薦「中國最美峰林」;愛探險可以自駕去馬嶺河峽谷(車程 40 分鐘),有「地球上最美麗的傷疤」之稱;想慢活可以萬峰湖(車程 1 小時),坐船遊湖食新鮮魚。

餐廳:酒店餐廳 vs 興義市區

酒店餐廳主打苗族特色+興義小吃,推薦:苗家酸湯魚、興義羊肉粉、苗家臘肉、雞糍粑,味道 85 分(人均 120)。想食地道啲可以自駕 20 分鐘去興義市區(AMap 搜),推薦:刷把頭、鄧孃子糕粑、興義牛肉,人均 50 食到飽。

map

小提醒:葯浴 1 日 1 次就夠,浸太多會頭暈;高血壓/心臟病/孕婦唔建議浸;興義機場(各機場)到酒店約 1 小時車程;景區蚊多,帶蚊怕水;雨季(5-9 月)瀑布最靚但路滑,小心跣親。

關鍵詞:貴州興義、苗阿祖、葯浴温泉、康養酒店、苗族傳統、2 日 1 夜。

]]>
https://galvoxstar.com/guizhou-xingyi-miaozu-yaoyu/feed/ 0
深圳龍崗蜜悦海景私湯攻略:房間私人溫泉池,日落打卡首選 https://galvoxstar.com/shenzhen-miyou-private-onsen/ https://galvoxstar.com/shenzhen-miyou-private-onsen/#respond Mon, 08 Jun 2026 12:41:28 +0000 https://galvoxstar.com/?p=2300 蜜悦羅馬假日:房間私人海景溫泉池

講到深圳最有「情侶感」嘅海景私湯酒店,蜜悦·深圳羅馬假日湯泉泡池美宿(位於龍崗大鵬半島)絕對係 2024 年最 hit 之一。每間房都有獨立私人溫泉池,落地玻璃對住大鵬灣海景,日落時一邊浸溫泉一邊睇日落,氣氛一流。

cover

房型攻略:海景私湯房 vs 池畔花園房 vs 蜜月套房

酒店有 5 種主要房型:

  • 海景私湯大床房(55 ㎡):獨立溫泉池+大窗對海,人均 700
  • 池畔花園房(80 ㎡):獨立小花園+私人泳池
  • 羅馬蜜月套房(100 ㎡):圓形大床+溫泉池+海景,IG 出片首選
  • 家庭複式(120 ㎡,2 房):帶娃首選
  • 獨棟別墅(200 ㎡,3 房):私家泳池+燒烤區
旺季人均 1000-2000,淡季 700 起就搞掂。

poi 1

酒店設施:湯泉 + 餐廳 + 兒童區

酒店配套齊全:

  • 私人湯泉:房內 24 小時供應天然溫泉
  • 戶外無邊泳池:面對大海,夏天最 hit
  • 地中海餐廳:主打意菜同海鮮,味道 90 分
  • 兒童遊樂區:小型波波池+滑梯,帶娃 OK
  • 情侶 SPA:2 人 4 手按摩,情侶必試
情侶推薦套餐:1 晚住宿 + 雙人 SPA + 燭光晚餐,人均 1500-2000。

amap poi 1

周邊 3 大景點:較場尾、大鵬所城、玫瑰海岸

酒店本身已經喺大鵬半島,自駕 10 分鐘可達較場尾,有「深圳小洱海」之稱,影相一流;再行 10 分鐘可達大鵬所城,明代古城,影相打卡一流;鍾意浪漫可以行玫瑰海岸(車程 20 分鐘),有沙灘+教堂+花海,情侶必去。

amap food 1

交通:港人點去最方便

由香港出發最方便係經蓮塘口岸過關(東鐵線直達,再 call 的士 50 分鐘),全程約 1.5 小時,200 元起車費;亦可選深圳灣口岸(自駕推薦)再 call 的士 40 分鐘;酒店有港澳直通巴(觀塘/太子出發,3 小時直達,180 元起),最方便。

map

小提醒:海景私湯房只有 20 間,旺季成日爆,提早 2 星期訂;酒店位置比較隱世,Google Maps 唔一定導得準,記得用 AMap 定位「蜜悦深圳羅馬假日」;冬天去最啱(可以一邊浸溫泉一邊睇海景)。

關鍵詞:深圳私湯酒店、大鵬半島溫泉、情侶 staycation、龍崗海景酒店。

]]>
https://galvoxstar.com/shenzhen-miyou-private-onsen/feed/ 0
葵涌 The Platter 自助午餐攻略:88 元食足 2 小時,抵食之選 https://galvoxstar.com/the-platter-kwai-chung/ https://galvoxstar.com/the-platter-kwai-chung/#respond Mon, 08 Jun 2026 12:41:23 +0000 https://galvoxstar.com/?p=2331 葵涌 The Platter:港式抵食自助午餐

講到香港抵食自助午餐,悅品酒店(葵涌) The Platter 餐廳絕對係「打工仔恩物」。88 元一位食足 2 小時,菜式由前菜、刺身、燒味、到甜品都齊,平日 Lunch 唔使同人迫,係區內 OL 嘅最愛。

cover

菜式逐樣睇:港式 + 西式 + 燒味

The Platter 菜式分 5 個區域:

  • 沙律/前菜區:凱撒沙律、煙三文魚、螺肉
  • 刺身/壽司區:三文魚、八爪魚、甜蝦(午餐供應)
  • 燒味/熱葷區:叉燒、油雞、燒鴨、蒸魚、炒飯
  • 粉麵檔:即煮車仔麵、擔擔麵
  • 甜品/水果區:3 款蛋糕、楊枝甘露、雪糕
味道中上,絕對對得住個價錢。

poi 1

時段/收費/預約攻略

餐廳分 3 個時段:

  • 午市自助餐(12:00-14:30):8/位,最 hit
  • 下午茶自助(15:00-17:00):8/位
  • 晚市自助餐(18:30-21:00):68/位
建議平日午餐去,人流少啲;週末/假期成日爆,記得 1 星期前 booking。可以用 OpenRice/酒店網站預約,4 人以上有 8 折。

amap poi 1

周邊美食:葵涌廣場 + 悅品附近

食完自助餐想再醫肚,可以行去葵涌廣場(步行 8 分鐘),街坊小食/糖水舖林立,推薦:華嫂冰室、合益泰小食、祥興記;想食糖水可以去鴻福堂或者許留山,人均 30-50。

amap food 1

交通:港鐵/巴士直達

悅品酒店(葵涌)就喺葵興站旁邊,從港鐵 C 出口行 2 分鐘到;巴士有 30 號(荃灣)、33A(屯門)、36(梨木樹)多條路線。開車可由葵涌貨櫃碼頭路直入,酒店有時租停車場(28 元/小時)。

map

小提醒:午市 12:30-13:30 最爆,建議 12:00 開頭食或者 13:30 後去,人少啲。酒店有 1 樓同 3 樓兩個入口,認住「悅品酒店」招牌唔會蕩失路。

關鍵詞:葵涌自助餐、悅品酒店 The Platter、抵食午餐、葵興站美食。

]]>
https://galvoxstar.com/the-platter-kwai-chung/feed/ 0
台北晶華+漢來 5 星攻略:1 人 6 日 5 晚,人均 1500 一晚 https://galvoxstar.com/taipei-luxury-5star/ https://galvoxstar.com/taipei-luxury-5star/#respond Mon, 08 Jun 2026 12:41:21 +0000 https://galvoxstar.com/?p=2347 台北 5 星酒店 1 人 6 日 5 晚:晶華+漢來攻略

講到台北最 hit 嘅 5 星酒店,台北晶華酒店台北漢來大飯店絕對係 2024 年最 hit 之一。1 個人 6 日 5 晚,2 間酒店夾住住,人均 1500 一晚,CP 值一流,商務/旅遊/美食三個願望一次過滿足。

cover

酒店比較:晶華 vs 漢來

2 間酒店各有特色:

  • 台北晶華酒店(五星,人均 1800):位於中山區,附近有條中山北路(文藝 Cafe 林立),酒店有「晶華國際聯誼會」,泳池/SPA/健身齊全,商務感重
  • 台北漢來大飯店(五星,人均 1300):位於南港區,新開幕,房間超新,view 對住山景,CP 值更高
建議住 3+2 分配:前 3 日住晶華(行中山區+信義區),後 2 日住漢來(行南港+九份)。

poi 1

必去 3 大景點:101、士林夜市、九份

台北 6 日 5 晚必去:

  • 台北 101:89 樓觀景台,夜景一流,人均 600 入場
  • 士林夜市:台灣最 hit 夜市,大餅包小腸/青蛙下蛋/生煎包必試
  • 九份老街:車程 1 小時,《千與千尋》取景地,阿妹茶樓一流
其他推介:故宮博物院、國父紀念館、西門町、淡水老街。

amap poi 1

美食地圖:鼎泰豐 vs 夜市 vs 牛肉麵

台北美食集中地:

  • 鼎泰豐(信義店):小籠包始祖,人均 250,要預約
  • 林東芳牛肉麵:台北最 hit 牛肉麵,人均 130
  • 寧夏夜市:本地人最愛夜市,蚵仔煎/雞肉飯一流
  • 春水堂(信義店):珍珠奶茶始祖,人均 80
5 日食 5 餐,人均 150 一餐就食到捧住走。

交通:港人飛機+悠遊卡

由香港出發最方便係飛台北桃園機場(TPE)(直航約 1 小時 50 分,800-2000 港元),轉機場捷運到台北車站 30 分鐘(160 台幣),再轉的士去酒店 10-20 分鐘(150 台幣)。市內交通建議買悠遊卡(200 台幣),可用喺捷運/巴士/便利店,慳錢又方便。

map

小提醒:台北 5 月-10 月係雨季,記得帶遮;夜市試食小心食滯,慢慢行;酒店 check-in 時間一般 15:00 後,提早到可以寄存行李;退房時間多數 12:00 前。

關鍵詞:台北 5 星酒店、晶華酒店、漢來大飯店、台灣 6 日 5 晚攻略。

]]>
https://galvoxstar.com/taipei-luxury-5star/feed/ 0
廣東版水上威尼斯攻略:丹霞豐源温泉度假村,房門直達泳道 https://galvoxstar.com/danxia-fengyuan-water-venice/ https://galvoxstar.com/danxia-fengyuan-water-venice/#respond Mon, 08 Jun 2026 12:41:16 +0000 https://galvoxstar.com/?p=2386 廣東版水上威尼斯:房門直達泳道嘅度假村

講到廣東最有「偽出國」感嘅酒店,丹霞豐源温泉度假村(位於韶關仁化)絕對係 2024 年最 hit 之一。整個度假村以「水」為主題,中央有一條 800 米長嘅運河貫穿成個園區,部分別墅房門一打開就係私人泳道,真係可以由房門直接游水游到主泳池——同威尼斯一樣識歎。

cover

房型攻略:泳道別墅 vs 山景房 vs 温泉套房

度假村有 3 個住宿區:

  • 泳道別墅(每棟 280 ㎡,2 房 1 廳):私家泳道直通,適合家庭/閨密
  • 山景客房(55 ㎡):大窗對住丹霞山,景觀一流
  • 温泉套房(75 ㎡):私人温泉池,秋冬最啱
旺季人均 600-1500,淡季 400 起就搞掂。

poi 1

周邊 3 大景點:丹霞山、南華寺、韶關長城

度假村本身就喺丹霞山腳下,自駕 15 分鐘可達丹霞山世界地質公園(必去!),搭纜車上山睇「中國紅石公園」;鍾意禪意文化就去南華寺(車程 40 分),六祖慧能道場;愛打卡可以行韶關長城(車程 30 分),迷你版萬里長城,影相一流。

amap poi 1

餐飲:園内餐廳 vs 仁化鎮本地菜

園内主打粵菜同西餐,味道中規中矩(人均 150)。想食地道嘢,出園自駕 20 分鐘去仁化鎮丹霞老鄉村(AMap 搜),推薦:丹霞豆腐、仁化白毛茶、農家臘味,人均 80 食到捧住走。一定要試白毛茶,係廣東名茶之一。

amap food 1

交通攻略:港人高鐵轉車

由香港出發推薦高鐵到韶關站(約 1 小時 50 分,260 元),轉的士去度假村約 50 分鐘(150 元)。亦可選直通巴(觀塘/太子出發,4 小時直達,200 元起)。自駕可經港珠澳大橋 → 廣深高速 → 樂廣高速,全程約 3.5 小時。

map

小提醒:泳道別墅旺季成日爆,提早 1 個月預訂。秋冬去最啱(可以同時玩温泉),夏天就比較曬。

關鍵詞:丹霞豐源攻略、廣東水上威尼斯、韶關温泉酒店、週末 staycation 推薦。

]]>
https://galvoxstar.com/danxia-fengyuan-water-venice/feed/ 0