The amazing migration of swallows

, 14 October 2021
The amazing migration of swallows
Swallow © Mya Bambrick

By Charlotte Owen

WildCall Officer 

For many of our seasonal visitors, the change in the weather that comes in September/October means it’s time for them to go.

Groups of swallows gather along the coast from September to swoop across the sand at low tide, scything through clouds of early morning midges for a protein-packed breakfast. They would already have been moving steadily southwards and then make a final pit-stop on the shore before heading out to sea to begin a six-week flight to South Africa. Most migratory birds will fatten up significantly before embarking on a long-distance flight, but swallows don’t need to, since they will catch plenty of mosquitoes, gnats and other in-flight snacks on the wing. Still, it makes sense to fuel up while they can as they wait restlessly at the shoreline for the optimal weather conditions that will signal their departure. Swallows travel by mainly by daylight and if dawn breaks with clear skies and a tailwind they will set off shortly after sunrise to cover up to 200 miles in a single day. They stop to rest overnight, often in huge flocks that will roost in reedbeds and other sheltered spots along the way.

The exact migration route varies depending on their departure location but ‘our’ swallows cross the Channel to fly south through western France and eastern Spain before making another sea crossing to reach Morocco. Then they must fly over the endless dunes of the Sahara, the largest hot desert in the world. This hazardous stretch will be completed in one go, since there aren’t any handy stopovers, and it’s the only leg of the journey undertaken after dark, during the relative cool of the desert night. By November, swallows will be flying through the tropical humidity of the vast Congo rainforest before finally reaching the winter warmth of South Africa and Namibia by December. The entire flight is some 6,000 miles in total, which is an incredible feat for a bird small enough to fit into your pocket.

Leave a comment

Comments

  • Valerie:

    Lots of good information thsnks

    30 Jul 2024 13:26:00

  • Kim Sara Perloff:

    Thank you for this – I thoroughly enjoyed it. I was trying to find some basic information about the beautiful swallows and this was a most informative and concise article, written with affection for these lovely birds.

    29 May 2025 10:36:00

Time Δ Debug Message - Perch Runway 3.2
1783045854.96680 [906] SELECT p.pagePath, pr.routePattern, pr.routeRegExp, p.pageTemplate, pr.routeOrder, s.settingValue AS siteOffline FROM swt_pages_staging p LEFT JOIN swt_page_routes pr ON p.pageID=pr.pageID LEFT JOIN swt_settings s ON s.settingID='siteOffline' UNION SELECT NULL AS pagePath, pr2.routePattern, pr2.routeRegExp, pr2.templatePath AS pageTemplate, pr2.routeOrder, NULL AS siteOffline FROM swt_page_routes pr2 WHERE templateID!=0 ORDER BY routeOrder ASC, pagePath ASC
1783045855.01630.0495Matched route: news/[slug:s]
1783045855.01650.0002Server address: 216.73.216.31
1783045855.01660.0001Using master page: /templates/pages/blog/post.php
1783045855.01660Page arguments:
Array
(
    [0] => /news/the-amazing-migration-of-swallows
    [s] => the-amazing-migration-of-swallows
    [1] => the-amazing-migration-of-swallows
)
1783045855.0170.0004 [1] SELECT * FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1783045855.01840.0013 [86] SELECT DISTINCT settingID, settingValue FROM swt_settings WHERE userID=0
1783045855.02110.0028 [1] SELECT locationID FROM swt_shop_tax_locations WHERE locationIsHome=1 LIMIT 1
1783045855.0220.0009INSERT INTO swt_shop_cart(memberID,locationID,currencyID,cartPricing,cartProperties) VALUES(NULL,'1',47,'standard','[]')
1783045855.06980.0478 [1] SELECT * FROM swt_shop_cart WHERE cartID=22547668
1783045855.07090.0011 [1] SELECT * FROM swt_shop_cart WHERE cartID=22547668
1783045855.0720.0011 [nil] SELECT * FROM swt_shop_sales WHERE saleFrom<='2026-07-03 02:30:00' AND saleTo>'2026-07-03 02:30:00' AND saleActive=1 AND saleDeleted IS NULL ORDER BY saleOrder ASC
1783045855.07410.0021 [1] SELECT SQL_CALC_FOUND_ROWS DISTINCT tbl.* FROM ( SELECT idx.itemID, main.*, idx2.indexValue as sortval FROM swt_blog_index idx JOIN swt_blog_posts main ON idx.itemID=main.postID AND idx.itemKey='postID' JOIN swt_blog_index idx2 ON idx.itemID=idx2.itemID AND idx.itemKey='postID' AND idx2.indexKey='_id' WHERE 1=1 AND ((idx.indexKey='postSlug' AND idx.indexValue='the-amazing-migration-of-swallows')) AND idx.itemID=idx2.itemID AND idx.itemKey=idx2.itemKey GROUP BY idx.itemID, idx2.indexValue, postID ) as tbl WHERE (postStatus='Published' AND postDateTime<='2026-07-03 02:30:00' ) GROUP BY itemID, sortval ORDER BY sortval ASC LIMIT 0, 10
1783045855.07950.0055 [1] SELECT FOUND_ROWS() AS `count`
1783045855.08040.0009 [1] SELECT * FROM swt_blog_posts WHERE postID=2642 AND postStatus='Published' AND postDateTime<='2026-07-03 02:30:00'
1783045855.08150.0011 [13] SELECT * FROM swt_blog_sections ORDER BY sectionTitle ASC
1783045855.08260.0011 [1] SELECT * FROM swt_blogs ORDER BY blogTitle ASC
1783045855.08380.0012 [1] SELECT * FROM swt_categories WHERE catID=181 LIMIT 1
1783045855.08450.0007 [1] SELECT * FROM swt_categories WHERE catID=45 LIMIT 1
1783045855.09120.0067Using template: /templates/blog/post.html
1783045855.09160.0004 [162] SELECT catID, catPath FROM swt_categories
1783045855.0930.0014 [1] SELECT * FROM swt_blog_posts WHERE postStatus='Published' AND postDateTime<='2026-07-03 02:30:00' AND postSlug='the-amazing-migration-of-swallows'
1783045855.13320.0402Using template: /templates/blog/post.html
1783045855.13440.0012 [250] SELECT country, countryID FROM swt_shop_countries WHERE countryActive=1 ORDER BY country ASC
1783045855.13630.0019Using template: /templates/pages/attributes/seo.html
1783045855.13670.0004 [1] SELECT regionID, regionTemplate, regionPage, regionRev AS rev FROM swt_content_regions WHERE regionKey='Banner image' AND (regionPage='/news/post' OR regionPage='*')
1783045855.13870.002 [nil] SELECT * FROM ( SELECT idx.itemID, c.regionID, idx.pageID, c.itemJSON, idx2.indexValue as sortval FROM swt_content_index idx JOIN swt_content_items c ON idx.itemID=c.itemID AND idx.itemRev=c.itemRev AND idx.regionID=c.regionID JOIN swt_content_index idx2 ON idx.itemID=idx2.itemID AND idx.itemRev=idx2.itemRev AND idx2.indexKey='_order' WHERE ((idx.regionID=104 AND idx.itemRev=0)) AND idx.itemID=idx2.itemID AND idx.itemRev=idx2.itemRev ) as tbl GROUP BY itemID, pageID, itemJSON, sortval, regionID ORDER BY sortval ASC
1783045855.14830.0095 [82] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageDepth >=0 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1783045855.15210.0039 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1783045855.15290.0007 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1783045855.15530.0024Using template: /templates/navigation/ps_nav_template.html
1783045855.15540.0001 [6] Using template: /templates/navigation/ps_nav_template_children.html
1783045855.15630.0009 [4] Using template: /templates/navigation/ps_nav_template_children.html
1783045855.15680.0006 [29] Using template: /templates/navigation/ps_nav_template_children.html
1783045855.15950.0027 [10] Using template: /templates/navigation/ps_nav_template_children.html
1783045855.16050.001 [7] Using template: /templates/navigation/ps_nav_template_children.html
1783045855.16120.0007 [9] Using template: /templates/navigation/ps_nav_template_children.html
1783045855.16370.0025 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' OR pageSortPath='/news/post' LIMIT 1
1783045855.16470.0009 [1] SELECT * FROM swt_pages_staging WHERE pageHidden=0 AND pageNew=0 AND pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition
1783045855.16740.0027 [1] Using template: /templates/navigation/breadcrumbs.html
1783045855.1680.0006Using template: /templates/blog/post.html
1783045855.16830.0003 [1] SELECT * FROM swt_blog_authors WHERE authorID='20' LIMIT 1
1783045855.16910.0008Using template: /templates/blog/author.html
1783045855.16970.0005 [1] SELECT SQL_CALC_FOUND_ROWS DISTINCT tbl.* FROM ( SELECT idx.itemID, main.*, idx2.indexValue as sortval FROM swt_blog_index idx JOIN swt_blog_posts main ON idx.itemID=main.postID AND idx.itemKey='postID' JOIN swt_blog_index idx2 ON idx.itemID=idx2.itemID AND idx.itemKey='postID' AND idx2.indexKey='_id' WHERE 1=1 AND ((idx.indexKey='postSlug' AND idx.indexValue='the-amazing-migration-of-swallows')) AND idx.itemID=idx2.itemID AND idx.itemKey=idx2.itemKey GROUP BY idx.itemID, idx2.indexValue, postID ) as tbl WHERE (postStatus='Published' AND postDateTime<='2026-07-03 02:30:00' ) GROUP BY itemID, sortval ORDER BY sortval ASC LIMIT 0, 1
1783045855.17490.0053 [1] SELECT FOUND_ROWS() AS `count`
1783045855.17560.0007 [1] Using template: /templates/blog/post.html
1783045855.18040.0048Using template: /templates/blog/comment_form.html
1783045855.18210.0016 [2] SELECT * FROM swt_blog_comments WHERE 1=1 AND postID=2642 AND commentStatus='LIVE' ORDER BY FIELD(webmentionType, 'like', 'repost', 'comment', NULL) ASC, commentDateTime ASC
1783045855.23780.0557 [2] Using template: /templates/blog/comment.html
1783045855.23890.0011Using template: /templates/blog/post.html
1783045855.23910.0003 [1] SELECT * FROM swt_blog_authors WHERE authorID='20' LIMIT 1
1783045855.25050.0114 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/what-we-do' OR pageSortPath='/what-we-do' LIMIT 1
1783045855.25150.0009 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-002' LIMIT 1
1783045855.25220.0007 [7] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-002%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1783045855.25440.0022 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1783045855.2550.0007 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1783045855.25710.002 [6] Using template: /templates/navigation/footer-nav.html
1783045855.2580.0009 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/make-a-difference' OR pageSortPath='/make-a-difference' LIMIT 1
1783045855.25870.0007 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-005' LIMIT 1
1783045855.25920.0005 [38] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-005%' ORDER BY pageTreePosition ASC
1783045855.26180.0026 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1783045855.26260.0007 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1783045855.26470.0021 [10] Using template: /templates/navigation/footer-nav.html
1783045855.26830.0036 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/visit' OR pageSortPath='/visit' LIMIT 1
1783045855.26910.0009 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-004' LIMIT 1
1783045855.26970.0006 [30] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-004%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1783045855.27240.0026 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1783045855.27870.0063 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1783045855.28140.0027 [29] Using template: /templates/navigation/footer-nav.html
1783045855.2840.0026 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/make-a-difference' OR pageSortPath='/make-a-difference' LIMIT 1
1783045855.28480.0008 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-005' LIMIT 1
1783045855.28540.0006 [11] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-005%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1783045855.28790.0025 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1783045855.28860.0007 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1783045855.29070.0021 [10] Using template: /templates/navigation/footer-nav.html
1783045855.30040.0097Request time: 0.3457
1783045855.30040Process time: 0.3433
1783045855.30040Memory: 1.6221